创建具有可变行数的多行表条目

创建具有可变行数的多行表条目

我希望创建一个宏,它接收一个逗号分隔的列表(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 默认设置为垂直居中,因此不需要在设置中使用行数。tabulartabular\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提供列表处理能力。

相关内容