
Estoy intentando crear una tabla según el tamaño automáticamente. Hay una especie de proliferación de comandos de bucle en LaTeX, lo que dificulta determinar cuál es el adecuado. Probé el bucle TeX simple y los bucles de los paquetes forloop
, pgfloop
pero no tuve éxito.
Aparentemente, existe un problema al ejecutar un bucle dentro de un tabular
entorno. También intenté ejecutar primero el bucle y guardar la cadena de salida en un archivo token
y luego imprimir el token dentro del archivo tabular
. Esto funciona para algunos casos.
Aquí un ejemplo mínimo: Primero, lo que quiero producir:
\begin{tabular}{|*{4}{c|}}
1&2&3&4
\end{tabular}
Aquí, lo que he probado con el bucle TeX:
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\begin{tabular}{|*{\thenumofcol}{c|}}
\thetmpcol
\loop
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
&\thetmpcol
\repeat
\end{tabular}
Al parecer, el &
símbolo provoca problemas en el bucle. Lo mismo sucede si uso un bucle de los paquetes forloop
o pgfloop
. El error es
ERROR: Forbidden control sequence found while scanning use of \loop.
--- TeX said ---
<inserted text>
\par
l.140 &
\thetmpcol
--- HELP ---
No help available
Por eso pensé que podía guardar la cadena de la fila en un token
by
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent
\tmprowcontent={x}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
\tmprowcontent=\expandafter{\the\expandafter\tmprowcontent & x}%
\repeat
\begin{tabular}{|*{\thenumofcol}{c|}}
\the\tmprowcontent
\end{tabular}
Esto funciona si no incluyo ese contador en el archivo token
. Si reemplazo x
con el valor del contador actual, es decir,
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent
\tmprowcontent={\thetmpcol}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
\tmprowcontent=\expandafter{\the\tmprowcontent & \thetmpcol}%
\repeat
\begin{tabular}{|*{\thenumofcol}{c|}}
\the\tmprowcontent
\end{tabular}
Entonces cada entrada es el último valor del contador, es decir, 4
en ese caso. Esto se debe al uso de \expandafter
. Sin embargo, si no uso \expandafter
, TeX me dice que se queda sin memoria.
Por lo tanto, mi pregunta es ¿cómo puedo hacer que esto funcione?
Respuesta1
Puede simplemente iterar a través de los valores, aunque es posible que deba ocultarlos &
para que no se vea demasiado pronto y finalice una celda de la tabla a mitad de la prueba.
\documentclass{article}
\begin{document}
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{0}
\newcommand\foo{%
\stepcounter{tmpcol}%
\thetmpcol
\ifnum\value{tmpcol}<\value{numofcol}\hiddenamp\expandafter\foo\fi}
\newcommand\hiddenamp{&}
\begin{tabular}{|*{\thenumofcol}{c|}}
\foo
\end{tabular}
\end{document}