Crear tabular a partir de una lista de parámetros separados por comas

Crear tabular a partir de una lista de parámetros separados por comas

Intenté encontrar una respuesta a esto pero actualmente no tengo idea de cómo hacer que funcione.

Quiero crear un nuevo comando que llene algunas líneas de una tabla basada en una lista determinada con longitud variable como

\makeTabularRows{item1, item2, item3}

El resultado de esto debería ser

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

Para que quepa en una tabla como

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

Encontré muchas soluciones parciales, por ejemplo esta breve.

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

para insertar puntos entre los elementos y otras soluciones que parecen más complejas, por ejemplo, para crear una enumeración. Descubrí que un problema es incluir el signo & y mis pruebas me mostraron que incluso insertar \\ parece no ser posible. No puedo encontrar una solución para el tabular, si es que la hay.

¿Alguna idea de cómo se puede hacer esto?

Respuesta1

Aquí hay un enfoque con un bucle expandible. Por alguna razón la mayoría de xinttoolslas instalaciones son para insumos del {item1}{item2}{item3}tipo ; si lo prefiere, item1, item2, item3debe aplicar \xintCSVtoListcomo aquí en el \makeRowscomando.

Lo mencioné \xintForen un comentario pero no había leído con suficiente atención la pregunta (lo siento)... \multicolumnes una bestia que realmente quiere ser la primera en su celda (después de la expansión). Macro \xintForrealiza algunas asignaciones (no globales), por lo que no es la herramienta adecuada en este caso.

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

ingrese la descripción de la imagen aquí

Si hubieras querido el \multicolumnen la segunda celda, habría funcionado:

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

y si coloca esto en un \newcommand\makeTabularRowslugar #1donde representará el csv de los elementos, deberá usar \xintFor ##1 in {#1} \do {...}.

información relacionada