從逗號分隔的參數清單建立表格

從逗號分隔的參數清單建立表格

我試圖找到這個問題的答案,但目前我不知道如何讓它發揮作用。

我想創建一個新命令,它根據給定的可變長度列表填充表格的一些行,例如

\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 {...}.

相關內容