Erstellen Sie eine Tabelle aus einer durch Kommas getrennten Parameterliste

Erstellen Sie eine Tabelle aus einer durch Kommas getrennten Parameterliste

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 xinttoolssind die meisten Einrichtungen für Eingaben vom {item1}{item2}{item3}Typ ; wenn man dies bevorzugt, muss man es wie hier im Befehl item1, item2, item3anwenden .\xintCSVtoList\makeRows

Ich habe es \xintForin einem Kommentar erwähnt, aber ich habe die Frage nicht genau genug gelesen (Entschuldigung) ... \multicolumnist ein Biest, das unbedingt der Erste in seiner Zelle sein will (nach der Erweiterung). Makro \xintForfü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}

Bildbeschreibung hier eingeben

Wenn Sie das in der zweiten Zelle gewollt hätten, \multicolumnhätte es funktioniert:

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

und wenn Sie dies in ein \newcommand\makeTabularRowsFeld einfügen #1, in dem die CSV-Datei der Elemente steht, müssen Sie verwenden \xintFor ##1 in {#1} \do {...}.

verwandte Informationen