Re: newenvironment, tabularx e newcolumntype

#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

Go to top