Vorrei definire dei comandi “indicizzati” del tipo \comandoi, \comandoii, \comandoiii, … in modo semiautomatico mediante un codice di questo tipo
`\newcounter{numero}
\setcounter{numero}{0}
\renewcommand{\thenumero}{\roman{numero}}\whiledo{\arabic{numero}<5}{
\stepcounter{numero}
\expandafter\newcommand\csname comando\thenumero \endcsname{\Roman{numero}}
}`Il risultato è che tutti i comandi \comandoi, \comandoii, … \comandov sono uguali a V mentre ovviamente vorrei \comandoi=I \comandoii=II, ecc.
Qualche suggerimento?
Il problema è che il testo di sostituzione dei comandi che definisci è sempre \Roman{numero}. Perciò l’espansione ti dà sempre la rappresentazione in cifre romane del valore attuale del contatore “numero”. Occorre \edef:
`\newcounter{numero}
\setcounter{numero}{0}
\renewcommand{\thenumero}{\roman{numero}}
\whiledo{\value{numero}<5}{
\stepcounter{numero}
\expandafter\edef\csname comando\thenumero\endcsname{\Roman{numero}}
}`
Con \edef il testo di sostituzione è sottoposto all’espansione al momento della definizione.
Non userei \arabic{numero} dentro a \whiledo, ma \value{numero}. Non cambia moltissimo, ma è concettualmente migliore: \value si riferisce al valore “indipendentemente dalla rappresentazione” e può essere usato ogni volta che LaTeX si aspetta una costante numerica.
Ciao
Enrico