Amedeo” post=84057Buon pomeriggio a tutti, raccogliendo spunti da diversi contributi in rete ho composto un comando che accetta un numero variabile di argomenti per comporre una tabella di dati:
`\documentclass{book}
\begin{document}
\makeatletter
\newcommand{\McsAggiornamenti}{%
\chapter*{Aggiornamenti\markboth{Aggiornamenti}{}}
\begin{center}
\begin{tabular}{|p{0.2\textwidth}|p{0.5\textwidth}|p{0.2\textwidth}|}
\hline
\rule{0pt}{12pt}%
Data & Descrizione intervento & Autore\\
\hline
\@McsAggiornamentii % inizia la ricorsione
}
\newcommand\@McsAggiornamentii{\@ifnextchar\stopaggiornamenti{\@McsFineAggiornamenti}{\@McsAggiornamentiii}}
\newcommand\@McsAggiornamentiii[3]{%
\rule{0pt}{12pt}%
{#1} & {#2} & {#3}\\
\hline
\@McsAggiornamentii % reinizia la ricorsione
}
\newcommand\@McsFineAggiornamenti[1]{% l'argomento è \stopaggiornamenti
\end{tabular}
\end{center}
}
\makeatother\McsAggiornamenti
{Gennaio 2013}{Bla bla bla bla}{A. Verdi}
{Febbraio 2013}{Bla bla bla bla Bla bla bla bla}{A. Rossi}
\stopaggiornamenti\end{document}`
Il problema è che alla chiusura della tabella viene prodotta una riga extra vuota dovuta, ho pensato, alla presenza dell’argomento \stopaggiornamenti che non viene “consumato”.
C’è modo di consumare l’argomento oppure un modo migliore di gestire l’esigenza?
Grazie
gA
Eviterei questo tipo di approccio. Meglio costruirsi la tabella un pezzo alla volta.
`\documentclass{book}
\usepackage{xparse,booktabs,calc,tabularx}
\ExplSyntaxOn
\NewDocumentCommand{\McsAggiornamento}{m}
{
\keys_set:nn {mcsaggiornamenti} { #1 }
\amedeo_aggiorna:
}
\NewDocumentCommand{\StampaAggiornamenti}{ }
{
\begin{center}
\begin{tabular}{
p{.3\textwidth-2\tabcolsep}
p{.5\textwidth-2\tabcolsep}
p{.2\textwidth-2\tabcolsep}
}
\toprule
Data & Descrizione~intervento & Autore\\
\midrule
\tl_use:N \l_amedeo_aggiornamenti_tl
\bottomrule
\end{tabular}
\end{center}
\tl_clear:N \l_amedeo_aggiornamenti_tl
}
\tl_new:N \l_amedeo_aggiornamenti_tl
\keys_define:nn {mcsaggiornamenti}
{
data .tl_set:N = \l__amedeo_data_tl,
descr .tl_set:N = \l__amedeo_descr_tl,
autore .tl_set:N = \l__amedeo_autore_tl,
}
\cs_new_protected:Npn \amedeo_aggiorna:
{
\tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_data_tl
\tl_put_right:Nn \l_amedeo_aggiornamenti_tl {&}
\tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_descr_tl
\tl_put_right:Nn \l_amedeo_aggiornamenti_tl {&}
\tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_autore_tl
\tl_put_right:Nn \l_amedeo_aggiornamenti_tl {\\}
}
\ExplSyntaxOff
\begin{document}
\chapter*{Aggiornamenti\markboth{Aggiornamenti}{}}
\McsAggiornamento{
data =Gennaio 2013,
autore=A. Verdi,
descr =Bla bla bla bla,
}
\McsAggiornamento{
autore=A. Rossi,
data =Febbraio 2013,
descr =Bla bla bla bla Bla bla bla bla,
}
\StampaAggiornamenti
\end{document}`
Ogni aggiornamento ha il suo posto ed è più facile maneggiarli. Non occorre nemmeno un ordine preciso nei dati, visto che si usa una coppia “chiave-valore”.
Ciao
Enrico