2010-04-01 7 views
46

Vorrei utilizzare un flusso di controllo di iterazione per semplificare il seguente codice LaTeX.Iterazione in 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} 

vengo a sapere che il forloop package fornisce l'anello for. Ma non sono sicuro di come applicarlo al mio caso? O altri metodi non di forloop?


Se anche voglio semplicemente un altro caso simile, in cui l'unica differenza è che la directory non viene eseguito da 1, 2, 23, ma in un ordine arbitrario come 3, 2, 6, 9 , ..., o anche una lista di stringhe come dira, dirc, dird, dirb, .... Come faccio a fare il codice LaTeX in loop allora?

+1

prega di verificare se la risposta accettata è ancora la scelta migliore. La risposta più votata ha quasi tre volte più voti positivi! Grazie. – Sebastian

risposta

21

Qualcosa di simile si prenderà cura del corpo del vostro tabellare:

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

ho dovuto commentare la prima \hline perché mi ha dato un errore:

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

io non sono sicuro di cosa significhi; se davvero non puoi vivere senza la doppia linea, posso esaminarla di più.

Si noti inoltre che è necessario utilizzare <; ad esempio, <= 24 non funzionerà.


Per quanto riguarda il vostro aggiornamento: vorrei semplicemente dichiarare un comando che prende l'argomento che si sta ripetendo. Qualcosa di simile a questo:

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

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

Grazie, Thomas! Lo apprezzo davvero! Sì, sarebbe bello con doppie linee orizzontali che separano le file. Un'altra domanda: come posso ottenere anche doppie linee verticali che separano le due colonne: \ multicolonna {5} {| c |} {Classe 0} e \ multicolonna {5} {| c |} {Classe 1}? – Tim

98

È possibile utilizzare pgffor pacchetto, uno strumento fornito da PGF. La sintassi di base è:

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

In particolare, questo ciclo for non è limitata ai numeri interi, ad esempio:

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