カンマ区切りのパラメータリストから表形式を作成する

カンマ区切りのパラメータリストから表形式を作成する

私はこれに対する答えを見つけようとしましたが、現時点ではどうすればうまくいくのかわかりません。

可変長のリストに基づいて表のいくつかの行を埋める新しいコマンドを作成したい。

\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 つの問題は & 記号を含めることであることがわかりました。また、テストでは、\\ を挿入することさえできないことがわかりました。 表形式のソリューションが見つかったとしても、それを見つけることができません。

これを実現する方法について何かアイデアはありますか?

答え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}

ここに画像の説明を入力してください

2 番目のセルにが必要だった場合は、次の\multicolumnように動作します。

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

これを に配置する場合、 は \newcommand\makeTabularRowsアイテム#1の csv を表すため、 を使用する必要があります\xintFor ##1 in {#1} \do {...}

関連情報