2010-04-01 12 views
46

Je voudrais utiliser un flux de contrôle d'itération pour simplifier le code LaTeX suivant.Itération dans 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} 

j'apprends que le forloop package fournit la boucle for. Mais je ne suis pas sûr de savoir comment l'appliquer à mon cas? Ou d'autres méthodes pas par forloop?


Si je veux aussi tout simplement un autre cas similaire, où la seule différence est que le répertoire ne fonctionne pas de 1, 2, à 23, mais dans un ordre arbitraire tel que 3, 2, 6, 9 , ..., ou même une liste de chaînes telles que dira, dirc, dird, dirb, .... Comment puis-je faire le code LaTeX en boucles alors?

+1

s'il vous plaît vérifier si la réponse acceptée est toujours le meilleur choix. La réponse la plus votée a presque trois fois plus de voix! Merci. – Sebastian

Répondre

21

Quelque chose comme ça prendra soin du corps de votre tableau:

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

je devais commenter la première \hline parce qu'il m'a donné une erreur:

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

Je ne suis pas sûr de ce que cela signifie; Si vous ne pouvez vraiment pas vivre sans la double ligne, je peux y regarder de plus près. Notez également que vous devez utiliser <; par exemple, <= 24 ne fonctionnera pas. En ce qui concerne votre mise à jour: Je déclarerais simplement une commande qui prend l'argument que vous êtes en train de boucler. Quelque chose comme ceci:

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

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

Merci, Thomas! J'apprécie beaucoup! Oui, ce serait bien avec des doubles lignes horizontales séparant les lignes. Une autre question: comment puis-je également obtenir des lignes verticales doubles séparant les deux multicolonnes: \ multicolonne {5} {| c |} {Classe 0} et \ multicolonne {5} {| c |} {Classe 1}? – Tim

98

Vous pouvez utiliser package pgffor, un outil fourni par PGF. La syntaxe de base est:

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

Notamment, cette boucle ne se limite pas aux entiers, par exemple:

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