我希望创建一个宏,它接收一个逗号分隔的列表(clist)作为参数,并返回一个多行表,其行数等于列表中元素的数量。
我定义了一个命令 \getNumItem,用于提取列表中元素的数量。我希望将结果用作命令 \multirow 中行数的输入参数。但是,这不起作用(可能是由于一些扩展问题)。
\documentclass{article}
\usepackage{xparse}
\usepackage{multirow}
\begin{document}
\ExplSyntaxOn
% Extract the number of elements in a clist
\DeclareExpandableDocumentCommand{\getNumItem}{m}{%
\int_new:N \numitem
\int_set:Nn \numitem {\clist_count:n{#1}}
\int_use:N \numitem
}
% Creates a multirow from a clist
\NewDocumentCommand{\secondCol}{m}{%
\tl_gclear_new:N \secondColRows
\clist_map_inline:nn {#1}{
\tl_gput_right:Nx \secondColRows {
& ##1 \exp_not:n {\\}
}
}
\tl_use:N \secondColRows
}
\ExplSyntaxOff
% Creates a multirow table with a number of rows equal to the length
% of the clist passed as arg #2
\newcommand{\multiRowTable}[2]{%
\begin{tabular}{|c|c|}
\hline
% This is what I would like to have
% \multirow{\getNumItem{#2}}{*}{#1} \secondCol{#2}
% This works
\multirow{2}{*}{#1} \secondCol{#2}
\hline
\end{tabular}
\\
% Verifying that \getNumItem{#2} works on its own
\getNumItem{#2}
}
% Test
\multiRowTable{a}{b,c}
\end{document}
我不知道如何修改 \getNumItem{#2} 才能使其正常工作。如能得到任何帮助,我将不胜感激。
答案1
根据您的输出,有一个简单的解决方案 -为列设置tabular
带有嵌套s 的 a。由于s 默认设置为垂直居中,因此不需要在设置中使用行数。tabular
tabular
\multirow
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\multiRowTable}[2]{%
\renewcommand{\do}[1]{##1 \\}%
\begin{tabular}{ | c | c | }
\hline
#1 & %
\begin{tabular}{ @{} c @{} }
\docsvlist{#2}
\end{tabular} \\
\hline
\end{tabular}
}
\begin{document}
\multiRowTable{a}{b,c}
\multiRowTable{a}{b,c,d}
\multiRowTable{a}{b,c,d,e}
\multiRowTable{a}{b,c,d,e,f}
\end{document}
etoolbox
提供列表处理能力。