Criar Tabular a partir da lista de parâmetros separados por vírgula

Criar Tabular a partir da lista de parâmetros separados por vírgula

Tentei encontrar uma resposta para isso, mas atualmente não tenho ideia de como fazê-lo funcionar.

Quero criar um novo comando que preencha algumas linhas de uma tabela com base em uma determinada lista com comprimento variável como

\makeTabularRows{item1, item2, item3}

A saída disso deve ser

\multicolumn{3}{c}{item1} & \\
\multicolumn{3}{c}{item2} & \\
\multicolumn{3}{c}{item3} &

Para que caiba em uma tabela como

\begin{tabular}{lclr}
    \makeTabularRows{item1, item2, item3}
\end{tabular}

Encontrei muitas soluções parciais, por exemplo, esta curta

\newcommand{\makeTabularRows}[1]{%
    \def\nextitem{\def\nextitem{.}}%  
    \@for \el:=#1\do{\nextitem\el}%
}

para inserir pontos entre os elementos e outras soluções que pareçam mais complexas, por exemplo, para criar uma enumeração. Descobri que um problema é incluir o sinal & e meus testes me mostraram que mesmo inserir o \\ parece não ser possível. Estou perdido para encontrar uma solução para o tabular, se houver.

Alguma idéia de como isso pode ser feito?

Responder1

Aqui está uma abordagem com um loop expansível. Por alguma razão, a maioria das xinttoolsinstalações são para insumos do {item1}{item2}{item3}tipo ; se preferir, item1, item2, item3é necessário aplicar \xintCSVtoListcomo aqui no \makeRowscomando.

Mencionei \xintForem um comentário mas não tinha lido com atenção a pergunta (desculpe) ... \multicolumné uma fera que realmente quer ser o primeiro em sua cela (após a expansão). A macro \xintForfaz algumas atribuições (não globais), portanto não é a ferramenta apropriada aqui.

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

insira a descrição da imagem aqui

Se você quisesse \multicolumnna segunda célula, teria funcionado:

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

e se você colocar isso em um \newcommand\makeTabularRowslocal onde #1representará o csv dos itens, você precisará usar \xintFor ##1 in {#1} \do {...}.

informação relacionada