Amedeo” post=84860Ciao a tutti, riprendendo il tema in oggetto e volendo definire un con un numero di parametri superiore a 9 e noto a priori (es. 11), quale è la strada migliore? Alcuni esempi che ho trovato sfruttano la definizione di “variabili” di comodo in cui parcheggiare i valori dei primi 9 argomenti, chiamando quindi un comando a cascata che interpreta i rimenenti parametri ed utilizza le variabili di comodo precedentemente definite. Di seguito la prova che ho fatto:
`
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{calc}
\usepackage{tabularx}
\usepackage{booktabs}\newcommand\McsTcw[1]{#1\textwidth-2\tabcolsep}
\newenvironment{McsTabFive}[9]{%
\def\McsTabFiveA{#1}
\def\McsTabFiveB{#2}
\def\McsTabFiveC{#3}
\def\McsTabFiveD{#4}
\def\McsTabFiveE{#5}
\def\McsTabFiveF{#6}
\def\McsTabFiveG{#7}
\def\McsTabFiveH{#8}
\def\McsTabFiveI{#9}
\begin{McsTabFiveP}
}{
\end{McsTabFiveP}
}
\newenvironment{McsTabFiveP}[1]{%
\begin{small}
\begin{center}
\begin{tabular}{
p{\McsTabFiveB}
p{\McsTabFiveD}
p{\McsTabFiveF}
p{\McsTabFiveH}
p{#1}}
\toprule
{\McsTabFiveA} & {\McsTabFiveC} & {\McsTabFiveE} & {\McsTabFiveG} & {\McsTabFiveI} \\
}{%
\bottomrule
\end{tabular}
\end{center}
\end{small}
}
\newcommand\McsRigaTabFive[5]{%
\midrule
{#1} & {#2} & {#3} & {#4} & {#5} \\
}\begin{document}
\begin{McsTabFive}{Col1}{\McsTcw{.2}}{Col2}{\McsTcw{.2}}{Col3}{\McsTcw{.2}}{Col4}{\McsTcw{.2}}{Col5}{\McsTcw{.2}}
\McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
\McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
\end{McsTabFive}
\end{document}
`
Di funzionare funziona, ma forse vi sono modi più eleganti che non implichino una programmazione spinta.Grazie come sempre per ogni contributo.
a
Undici argomenti? Devi contarli e ti ci perdi. Molto meglio una sintassi “chiave-valore”:
`\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{calc}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{xparse}
\ExplSyntaxOn
\keys_define:nn { amedeotab }
{
col1 .tl_set:N = \l_amedeo_col_i_tl,
col2 .tl_set:N = \l_amedeo_col_ii_tl,
col3 .tl_set:N = \l_amedeo_col_iii_tl,
col4 .tl_set:N = \l_amedeo_col_iv_tl,
col5 .tl_set:N = \l_amedeo_col_v_tl,
dim1 .tl_set:N = \l_amedeo_colwd_i_tl,
dim2 .tl_set:N = \l_amedeo_colwd_ii_tl,
dim3 .tl_set:N = \l_amedeo_colwd_iii_tl,
dim4 .tl_set:N = \l_amedeo_colwd_iv_tl,
dim5 .tl_set:N = \l_amedeo_colwd_v_tl,
}
\tl_new:N \l_amedeo_tab_contents_tl
\NewDocumentEnvironment{ McsTabFive } { m }
{
\keys_set:nn { amedeotab } { #1 }
\begin{center}\small
\tl_put_right:Nx \l_amedeo_tab_contents_tl
{
\exp_not:n { \begin{tabular} }
{
p{ \dim_eval:n { \l_amedeo_colwd_i_tl \textwidth – 2\tabcolsep } }
p{ \dim_eval:n { \l_amedeo_colwd_ii_tl \textwidth – 2\tabcolsep } }
p{ \dim_eval:n { \l_amedeo_colwd_iii_tl \textwidth – 2\tabcolsep } }
p{ \dim_eval:n { \l_amedeo_colwd_iv_tl \textwidth – 2\tabcolsep } }
p{ \dim_eval:n { \l_amedeo_colwd_v_tl \textwidth – 2\tabcolsep } }
}
}
\tl_put_right:Nn \l_amedeo_tab_contents_tl
{
\toprule
\l_amedeo_col_i_tl &
\l_amedeo_col_ii_tl &
\l_amedeo_col_iii_tl &
\l_amedeo_col_iv_tl &
\l_amedeo_col_v_tl \\
}
}
{
\tl_use:N \l_amedeo_tab_contents_tl
\bottomrule
\end{tabular}
\end{center}
}
\NewDocumentCommand{\McsRiga}{ mmmmm }
{
\tl_put_right:Nn \l_amedeo_tab_contents_tl
{\midrule #1 & #2 & #3 & #4 & #5 \\}
}
\ExplSyntaxOff
\begin{document}
\begin{McsTabFive}{
col1=Col1, dim1=.2,
col2=Col2, dim2=.2,
col3=Col3, dim3=.2,
col4=Col4, dim4=.2,
col5=Col5, dim5=.2
}
\McsRiga{aaa}{bbb}{ccc}{ddd}{eee}
\McsRiga{aaa}{bbb}{ccc}{ddd}{eee}
\end{McsTabFive}
\end{document}`
Non è poi così difficile, te l’assicuro. La tabella è costruita un pezzo alla volta (le tabelle sono sempre un po’ ostiche) e poi composta tutta alla fine.
Ciao
Enrico