
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 xinttools
las instalaciones son para insumos del {item1}{item2}{item3}
tipo ; si lo prefiere, item1, item2, item3
debe aplicar \xintCSVtoList
como aquí en el \makeRows
comando.
Lo mencioné \xintFor
en un comentario pero no había leído con suficiente atención la pregunta (lo siento)... \multicolumn
es una bestia que realmente quiere ser la primera en su celda (después de la expansión). Macro \xintFor
realiza 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}
Si hubieras querido el \multicolumn
en la segunda celda, habría funcionado:
\xintFor #1 in {item1, item2, item3}\do
{& \multicolumn{3}{c}{#1}\\}
y si coloca esto en un \newcommand\makeTabularRows
lugar #1
donde representará el csv de los elementos, deberá usar \xintFor ##1 in {#1} \do {...}
.