2010-04-01 19 views
46

me gustaría utilizar un poco de flujo de control de iteración para simplificar el siguiente código LaTeX.iteración en LaTeX

\begin{sidewaystable} 
    \caption{A glance of images} 
    \centering 
    \begin{tabular}{| c ||c| c| c |c| c|| c |c| c|c|c| } 
    \hline 
    \backslashbox{Theme}{Class} &\multicolumn{5}{|c|}{Class 0} & \multicolumn{5}{|c|}{Class 1} \\ 
    \hline 

    \hline 
      1 & 
      \includegraphics[scale=2]{../../results/1/0_1.eps} 
      &\includegraphics[scale=2]{../../results/1/0_2.eps} 
      &\includegraphics[scale=2]{../../results/1/0_3.eps} 
      &\includegraphics[scale=2]{../../results/1/0_4.eps} 
      &\includegraphics[scale=2]{../../results/1/0_5.eps} 
      &\includegraphics[scale=2]{../../results/1/1_1.eps} 
      &\includegraphics[scale=2]{../../results/1/1_2.eps} 
      &\includegraphics[scale=2]{../../results/1/1_3.eps} 
      &\includegraphics[scale=2]{../../results/1/1_4.eps} 
      &\includegraphics[scale=2]{../../results/1/1_5.eps}  \\ 
    \hline 

    ... % similarly for 2, 3, ..., 22 

    \hline 
      23 & 
      \includegraphics[scale=2]{../../results/23/0_1.eps} 
      &\includegraphics[scale=2]{../../results/23/0_2.eps} 
      &\includegraphics[scale=2]{../../results/23/0_3.eps} 
      &\includegraphics[scale=2]{../../results/23/0_4.eps} 
      &\includegraphics[scale=2]{../../results/23/0_5.eps} 
      &\includegraphics[scale=2]{../../results/23/1_1.eps} 
      &\includegraphics[scale=2]{../../results/23/1_2.eps} 
      &\includegraphics[scale=2]{../../results/23/1_3.eps} 
      &\includegraphics[scale=2]{../../results/23/1_4.eps} 
      &\includegraphics[scale=2]{../../results/23/1_5.eps}  \\ 
    \hline 

    \end{tabular} 
    \end{sidewaystable} 

me entero de que el forloop package proporciona el bucle for. Pero no estoy seguro de cómo aplicarlo a mi caso? U otros métodos no por forloop?


Si también quiero simplemente otro caso similar, donde la única diferencia es que el directorio no se ejecuta desde 1, 2, a las 23, pero en un orden arbitrario tal como 3, 2, 6, 9 , ..., o incluso una lista de cadenas como dira, dirc, dird, dirb, .... ¿Cómo hago que el código LaTeX se convierta en loops?

+1

favor, compruebe si la respuesta aceptada sigue siendo la mejor opción. ¡La respuesta más votada tiene casi tres veces más votos por votación! Gracias. – Sebastian

Respuesta

21

Algo como esto se hará cargo del cuerpo de su cuadro:

\newcounter{themenumber} 
\newcounter{classnumber} 
\newcounter{imagenumber} 
\forloop{themenumber}{1}{\value{themenumber} < 24}{ 
    % \hline <-- Error here 
    \arabic{themenumber} 
    \forloop{classnumber}{0}{\value{classnumber} < 2}{ 
     \forloop{imagenumber}{1}{\value{imagenumber} < 6}{ 
      & \includegraphics[scale=2]{ 
       ../../results/\arabic{themenumber}/\arabic{classnumber}_\arabic{imagenumber}.eps 
      } 
     } 
    } 
    \\ 
    \hline 
} 

que tenía que comentar la primera \hline porque me dio un error:

You can't use `\hrule' here except with leaders. 

No estoy seguro de lo que eso significa; si realmente no puedes vivir sin la doble línea, puedo investigar más.

También tenga en cuenta que usted tiene que utilizar <; por ejemplo, <= 24 no funcionará.


En cuanto a su cambio: yo simplemente declarar un comando que toma el argumento de que está bucle terminado. Algo como esto:

\newcommand\fordir[1]{do something complex involving directory named #1} 

\fordir{dira} 
\fordir{dirb} 
\fordir{dirc} 
\dots 
+0

¡Gracias, Thomas! ¡Realmente lo aprecio! Sí, sería bueno con líneas horizontales dobles que separan filas. Otra pregunta: ¿cómo puedo obtener líneas verticales dobles separando las dos multicolumnas: \ multicolumn {5} {| c |} {Class 0} y \ multicolumn {5} {| c |} {Class 1}? – Tim

98

Es posible utilizar pgffor paquete, una herramienta proporcionada por PGF. La sintaxis básica es:

\foreach \n in {0,...,22}{do something} 

Cabe destacar que este bucle no se limita a números enteros, por ejemplo:

\foreach \n in {apples,burgers,cake}{Let's eat \n.\par}