根据逗号分隔的参数列表创建表格

根据逗号分隔的参数列表创建表格

我试图找到这个问题的答案,但目前我不知道如何让它发挥作用。

我想创建一个新命令,根据给定的列表以可变长度填充表格的某些行,例如

\makeTabularRows{item1, item2, item3}

输出应该是

\multicolumn{3}{c}{item1} & \\
\multicolumn{3}{c}{item2} & \\
\multicolumn{3}{c}{item3} &

这样它就可以适合表格

\begin{tabular}{lclr}
    \makeTabularRows{item1, item2, item3}
\end{tabular}

我发现了很多部分解决方案,例如这个简短的解决方案

\newcommand{\makeTabularRows}[1]{%
    \def\nextitem{\def\nextitem{.}}%  
    \@for \el:=#1\do{\nextitem\el}%
}

在元素之间插入点,其他解决方案看起来更复杂,例如创建枚举。我发现一个问题是包含 & 符号,而我的测试表明,即使插入 \\ 似乎也不可能。如果有表格解决方案,我找不到。

有什么想法可以做到这一点吗?

答案1

这是一个带有可扩展循环的方法。出于某种原因,大多数xinttools设施都适用于该类型的输入 {item1}{item2}{item3};如果愿意,item1, item2, item3则需要在命令中应用\xintCSVtoList此处\makeRows

\xintFor在评论中提到过,但我没有仔细阅读这个问题(抱歉)...\multicolumn是一个野兽,它真的想成为其单元格中的第一个(扩展后)。宏\xintFor执行一些(非全局)分配,因此它不是此处合适的工具。

\documentclass{article}

\usepackage{xinttools}

\newcommand\makeOneRow [1]{\multicolumn{3}{c}{#1} & \\ }
\newcommand\makeRows [1]{%
    \xintApplyUnbraced {\makeOneRow}{\xintCSVtoList{#1}}%
}%

\begin{document}

\begin{tabular}{lclr}
    \makeRows{item1, item2, item3}
\end{tabular}

\end{document}

在此处输入图片描述

如果您想要\multicolumn第二个单元格,它就会起作用:

 \xintFor #1 in {item1, item2, item3}\do
  {& \multicolumn{3}{c}{#1}\\}

如果您将其放在 代表项目 csv 的\newcommand\makeTabularRows位置#1,则需要使用\xintFor ##1 in {#1} \do {...}

相关内容