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