Re: Comandi con un “indice”

#31755
Up
0
Down
::

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

Go to top