
Ich habe versucht, eine Antwort darauf zu finden, habe aber derzeit keine Ahnung, wie ich es zum Laufen bekomme.
Ich möchte einen neuen Befehl erstellen, der einige Zeilen einer Tabelle basierend auf einer gegebenen Liste mit variabler Länge füllt, wie
\makeTabularRows{item1, item2, item3}
Die Ausgabe davon sollte sein
\multicolumn{3}{c}{item1} & \\
\multicolumn{3}{c}{item2} & \\
\multicolumn{3}{c}{item3} &
Damit es in eine Tabelle passt wie
\begin{tabular}{lclr}
\makeTabularRows{item1, item2, item3}
\end{tabular}
Ich habe viele Teillösungen gefunden, zum Beispiel diese kurze
\newcommand{\makeTabularRows}[1]{%
\def\nextitem{\def\nextitem{.}}%
\@for \el:=#1\do{\nextitem\el}%
}
um Punkte zwischen den Elementen einzufügen, und andere Lösungen, die komplexer aussehen, beispielsweise um eine Aufzählung zu erstellen. Ich habe herausgefunden, dass ein Problem darin besteht, das &-Zeichen einzufügen, und meine Tests haben mir gezeigt, dass selbst das Einfügen des \\ nicht möglich zu sein scheint. Ich bin ratlos, was die Lösung für die Tabelle angeht, falls es eine gibt.
Irgendwelche Ideen, wie das gemacht werden kann?
Antwort1
Hier ist ein Ansatz mit einer erweiterbaren Schleife. Aus irgendeinem Grund xinttools
sind die meisten Einrichtungen für Eingaben vom {item1}{item2}{item3}
Typ ; wenn man dies bevorzugt, muss man es wie hier im Befehl item1, item2, item3
anwenden .\xintCSVtoList
\makeRows
Ich habe es \xintFor
in einem Kommentar erwähnt, aber ich habe die Frage nicht genau genug gelesen (Entschuldigung) ... \multicolumn
ist ein Biest, das unbedingt der Erste in seiner Zelle sein will (nach der Erweiterung). Makro \xintFor
führt einige (nicht globale) Zuweisungen durch, daher ist es hier nicht das geeignete Werkzeug.
\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}
Wenn Sie das in der zweiten Zelle gewollt hätten, \multicolumn
hätte es funktioniert:
\xintFor #1 in {item1, item2, item3}\do
{& \multicolumn{3}{c}{#1}\\}
und wenn Sie dies in ein \newcommand\makeTabularRows
Feld einfügen #1
, in dem die CSV-Datei der Elemente steht, müssen Sie verwenden \xintFor ##1 in {#1} \do {...}
.