Создать таблицу из списка параметров, разделенных запятыми

Создать таблицу из списка параметров, разделенных запятыми

Я пытался найти ответ на этот вопрос, но на данный момент не имею ни малейшего представления, как это сделать.

Я хочу создать новую команду, которая заполняет некоторые строки таблицы на основе заданного списка переменной длины, например

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

и если вы поместите это в \newcommand\makeTabularRowsместо, где #1будет CSV-файл элементов, вам нужно использовать \xintFor ##1 in {#1} \do {...}.

Связанный контент