Numeri nel nome del comando

  • Creatore
    Topic
  • #42103
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Nel codice che sto scrivendo elaboro delle liste separate da virgole di lunghezza variabile, per mezzo del pacchetto etextools.
      In base alla posizione della singola stringa nella lista occorre chiamare uno specifico comando. Ho pensato di costruire questi comandi inserendo l’indice nel nome:

      `\DeclareCmdListParser{\myparser}{,}

      \def\defitems[#1]#2{%
      \expandafter\def\csname cmd#1\endcsname{#2}}

      \myparser+[\defitems]{Pippo,Pluto,Paperino}

      \csname cmd0\endcsname

      \csname cmd1\endcsname

      \csname cmd2\endcsname`

      La domanda è:
      potrei avere dei problemi ad utilizzare dei numeri nel nome del comando?

      Tenete conto che etextools fa partire gli indici di posizione da zero, e che naturalmente i comandi così creati verrebbero utilizzati da altre macro di loop.

      Ho preso in considerazione il comando \romannumeral per creare automaticamente comandi tipo \cmdi, \cmdii, \cmdiii, ecc quindi con lettere, ma il numero zero viene espanso nella stringa vuota. Dovrei così ipotizzare che il semplice \cmd sia il comando corrispondente al primo elemento.
      Ho scartato \alph perchè limitato a 26 posizioni.
      Grazie.

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #42104
        Up
        0
        Down
        ::

        Nel codice che sto scrivendo elaboro delle liste separate da virgole di lunghezza variabile, per mezzo del pacchetto etextools.
        In base alla posizione della singola stringa nella lista occorre chiamare uno specifico comando. Ho pensato di costruire questi comandi inserendo l’indice nel nome:

        `\DeclareCmdListParser{\myparser}{,}

        \def\defitems[#1]#2{%
        \expandafter\def\csname cmd#1\endcsname{#2}}

        \myparser+[\defitems]{Pippo,Pluto,Paperino}

        \csname cmd0\endcsname

        \csname cmd1\endcsname

        \csname cmd2\endcsname`

        La domanda è:
        potrei avere dei problemi ad utilizzare dei numeri nel nome del comando?

        Tenete conto che etextools fa partire gli indici di posizione da zero, e che naturalmente i comandi così creati verrebbero utilizzati da altre macro di loop.

        Ho preso in considerazione il comando \romannumeral per creare automaticamente comandi tipo \cmdi, \cmdii, \cmdiii, ecc quindi con lettere, ma il numero zero viene espanso nella stringa vuota. Dovrei così ipotizzare che il semplice \cmd sia il comando corrispondente al primo elemento.
        Ho scartato \alph perchè limitato a 26 posizioni.
        Grazie.

        Non è un problema, se usi sempre \csname…\endcsname o un involucro più comodo come
        `\def\nameuse#1{\csname#1\endcsname}
        \nameuse{cmd0}`
        Ciao
        Enrico

      • #42105
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          Nel codice che sto scrivendo elaboro delle liste separate da virgole di lunghezza variabile, per mezzo del pacchetto etextools.
          In base alla posizione della singola stringa nella lista occorre chiamare uno specifico comando. Ho pensato di costruire questi comandi inserendo l’indice nel nome:

          `\DeclareCmdListParser{\myparser}{,}

          \def\defitems[#1]#2{%
          \expandafter\def\csname cmd#1\endcsname{#2}}

          \myparser+[\defitems]{Pippo,Pluto,Paperino}

          \csname cmd0\endcsname

          \csname cmd1\endcsname

          \csname cmd2\endcsname`

          La domanda è:
          potrei avere dei problemi ad utilizzare dei numeri nel nome del comando?

          Tenete conto che etextools fa partire gli indici di posizione da zero, e che naturalmente i comandi così creati verrebbero utilizzati da altre macro di loop.

          Ho preso in considerazione il comando \romannumeral per creare automaticamente comandi tipo \cmdi, \cmdii, \cmdiii, ecc quindi con lettere, ma il numero zero viene espanso nella stringa vuota. Dovrei così ipotizzare che il semplice \cmd sia il comando corrispondente al primo elemento.
          Ho scartato \alph perchè limitato a 26 posizioni.
          Grazie.

          Non è un problema, se usi sempre \csname…\endcsname o un involucro più comodo come
          `\def\nameuse#1{\csname#1\endcsname}
          \nameuse{cmd0}`
          Ciao
          Enrico

          Benissimo. Grazie.

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

      Go to top