
私はこれに対する答えを見つけようとしましたが、現時点ではどうすればうまくいくのかわかりません。
可変長のリストに基づいて表のいくつかの行を埋める新しいコマンドを作成したい。
\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 {...}
。