Strano comportamento nell’ambiente tabular

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


      Considerate il seguente frammento di codice:
      `\newcommand\perc[3][]{%
      \newcommand\result{Risultato elaborazione}
      \result & #2 & #3 \\%}

      \begin{tabular}{lll}
      \perc{Prova}{121000}
      \end{tabular}
      `
      fornisce il risultato atteso.

      ma se spostiamo il \result in seconda colonna il compilatore pdfLatex produce il seguente errore:
      ./test3.tex:146:Undefined control sequence. \perc{Prova}{121000}

      `\newcommand\perc[3][]{%
      \newcommand\result{Risultato elaborazione}
      A) & \result:#2 & #3 \\%
      }

      \begin{tabular}{lll}
      \perc{Prova}{121000}
      \end{tabular}
      `

      Sembra che basti passare il primo carattere &, di separazione delle colonne che il comando definito all’interno dell’ambiente sia cancellato !
      Se il comando viene definito fuori dall’ambiente tabular non ci sono problemi.
      Sapreste indicarmi una soluzione (avrei bisogno di definire il comando internamente al tabular environment)?

      PS. sembra che se l’elaborazione viene eseguita dopo la & il problema non si verifichi (tentativo che mi è venuto in mente al termine della redazione di questo topic), ma è un pò scomodo inserire linee di codice in una cella del tabular.

      Grazie a tutti.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #24232
        DMW
          Up
          0
          Down
          ::


          Il motivo non lo so, però se metti
          `
          \newcommand\perc[3][]{%
          \gdef\result{Risultato elaborazione}
          A) & \result:#2 & #3 \\%
          } `
          usando \gdef, funziona senza problemi.

          Ciao

          Andrea

        • #24233
          Up
          0
          Down
          ::

          Il motivo non lo so, però se metti
          `
          \newcommand\perc[3][]{%
          \gdef\result{Risultato elaborazione}
          A) & \result:#2 & #3 \\%
          } `
          usando \gdef, funziona senza problemi.

          Non dovrebbe essere difficile scoprire il motivo per il quale \def non va ma \gdef sì: ogni cella costituisce un gruppo implicito.

          Ciao
          Enrico

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

            Il motivo non lo so, però se metti
            `
            \newcommand\perc[3][]{%
            \gdef\result{Risultato elaborazione}
            A) & \result:#2 & #3 \\%
            } `
            usando \gdef, funziona senza problemi.

            Non dovrebbe essere difficile scoprire il motivo per il quale \def non va ma \gdef sì: ogni cella costituisce un gruppo implicito.

            Ciao
            Enrico

            Ok, eventualmente utilizzerò \gdef anche se mi piace di più l’idea di elaborare i dati all’interno di una cella (a questo punto dovrei dire all’interno di un gruppo).

            … ma se ogni cella forma un gruppo implicito il comando non dovrebbe funzionare nemmeno nella prima cella …

            Grazie delle risposte.

          • #24235
            Up
            0
            Down
            ::

            … ma se ogni cella forma un gruppo implicito il comando non dovrebbe funzionare nemmeno nella prima cella ….

            Vediamo. Con
            `\newcommand\perc[3][]{%
            \newcommand\result{Risultato elaborazione}
            \result & #2 & #3 \\%}

            \begin{tabular}{lll}
            \perc{Prova}{121000}
            \end{tabular}`
            stai espandendo \perc nella prima cella della tabella. Mi pare evidente che funzioni. 🙂

            Ciao
            Enrico

        Visualizzazione 3 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top