Comandi con un “indice”

  • Creatore
    Topic
  • #31754
    strolego
    Partecipante
      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?
      Grazie
      Flavio

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #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

      • #31756
        strolego
        Partecipante
          Up
          0
          Down
          ::


          Ovviamente funziona, ça va sans dire.

          Grazie e alla prossima domanda 😉

      Visualizzazione 1 filone di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top