newenvironment, tabularx e newcolumntype

  • Creatore
    Topic
  • #66848
    Up
    0
    Down
    ::


    Buonasera a tutti.

    Forse la domanda è banale, ma non riesco a capire perchè \newcolumntype all’interno di \newenvironment produce un errore:

    `\documentclass[a4paper,10pt]{article}
    \usepackage[italian]{babel}
    \usepackage{array}
    \usepackage{tabularx}

    \newenvironment{myTable1}{%
    \tabularx{\textwidth}{>{\raggedleft}p{0.3\textwidth}|X}}%%
    {\endtabularx}

    \newenvironment{myTable2}{%
    \newcolumntype{V}[1]{>{\raggedleft}p{#1}}
    \tabularx{\textwidth}{>V{0.3\textwidth}|X}}%
    {\endtabularx}

    \begin{document}

    \begin{myTable1}
    colonna1 & colonna2
    \end{myTable1}
    %
    \begin{myTable2} %%errore
    colonna1 & colonna2
    \end{myTable2}

    \end{document}`

    Perchè se uso la definizione di myTable2 ottengo un errore? Dove sbaglio?

    ciao a tutti.

Visualizzazione 0 filoni di risposte
  • Autore
    Risposte
    • #66849
      Up
      0
      Down
      ::

      pcgis” post=65770Buonasera a tutti.

      Forse la domanda è banale, ma non riesco a capire perchè \newcolumntype all’interno di \newenvironment produce un errore:

      `\documentclass[a4paper,10pt]{article}
      \usepackage[italian]{babel}
      \usepackage{array}
      \usepackage{tabularx}

      \newenvironment{myTable1}{%
      \tabularx{\textwidth}{>{\raggedleft}p{0.3\textwidth}|X}}%%
      {\endtabularx}

      \newenvironment{myTable2}{%
      \newcolumntype{V}[1]{>{\raggedleft}p{#1}}
      \tabularx{\textwidth}{>V{0.3\textwidth}|X}}%
      {\endtabularx}

      \begin{document}

      \begin{myTable1}
      colonna1 & colonna2
      \end{myTable1}
      %
      \begin{myTable2} %%errore
      colonna1 & colonna2
      \end{myTable2}

      \end{document}`

      Perchè se uso la definizione di myTable2 ottengo un errore? Dove sbaglio?

      Il problema è che stai definendo un nuovo comando all’interno di una definizione di un nuovo comando (forse non sembra, ma è così). In effetti \newenvironment{xyz}[n]{Inizio}{Fine}` definisce \xyz e \endxyz: la parte “Inizio” è quella che definisce \xyz con n argomenti, mentre la parte fine definisce \endxyz che è sempre un comando senza argomenti. Analogamente, \newcolumntype{V}[n]{testo} definisce un comando interno \NC@find@V con n argomenti.

      Quando si definisce un comando con argomenti \yyy all’interno della definizione di un altro comando \xxx, i parametri per \yyy devono essere indicati raddoppiando i simboli #:
      `\newcommand\xxx{\newcommand\yyy[1]{fa' qualcosa con ##1}}`
      Lo stesso vale nel tuo caso:
      `\newenvironment{myTable2}{%
      \newcolumntype{V}[1]{>{\raggedleft}p{##1}}%
      \tabularx{\textwidth}{V{0.3\textwidth}|X}}%
      {\endtabularx}`
      anche se mi sembra una perdita di tempo:
      `\newenvironment{myTable2}
      {\tabularx{\textwidth}{>{\raggedleft}p{0.3\textwidth}|X}}
      {\endtabularx}`
      fa esattamente la stessa cosa.

      (Nella tua definizione manca un % e c’è un > di troppo.)

      Ciao
      Enrico

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

Go to top