58 votes

itération en latex

Je voudrais utiliser un flux de contrôle d'itération pour simplifier le code latex suivant

  \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 pour le paquet de boucles fournit la boucle for. Mais je ne suis pas sûr de savoir comment l'appliquer à mon cas ? Ou d'autres méthodes ne passant pas par forloop ?

Merci et salutations !


Mise à jour :

Si je veux aussi simplement un autre cas similaire, où la seule différence est que le répertoire ne va pas de 1, 2, à 23, mais dans un ordre arbitraire comme 3, 2, 6, 9,..., ou même une liste de chaînes de caractères comme dira, dirc, dird, dirb,..... Comment transformer le code latex en boucles alors ?

Merci !

122voto

Ma Ming Points 501

Vous pouvez utiliser pgffor paquet, un outil fourni par pgf. La syntaxe de base est la suivante :

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

Notamment, cette boucle for n'est pas limitée aux nombres entiers, par exemple :

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

25voto

Thomas Points 63635

Quelque chose comme ceci prendra soin du corps de votre tabulaire :

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

J'ai dû commenter le premier \hline parce que ça 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 vous passer de la double ligne, je peux me renseigner davantage.

Notez également que vous devez utiliser < ; par exemple, <= 24 ne fonctionnera pas.


Pour ce qui est de votre mise à jour, je déclarerais simplement une commande qui prend l'argument sur lequel vous bouclez. Quelque chose comme ça :

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X