web-dev-qa-db-fra.com

Itération dans 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 package forloop fournit la boucle for. Mais je ne sais pas comment l'appliquer à mon cas? Ou d'autres méthodes pas par forloop?


Si je veux aussi simplement un autre cas similaire, où la seule différence est que le répertoire ne s'exécute 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 transformer le code LaTeX en boucles?

57
Tim

Quelque chose comme ça va prendre 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
}

J'ai dû commenter le premier \hline car cela m'a donné une erreur:

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

Je ne sais pas ce que cela signifie; si vous ne pouvez vraiment pas vivre sans la double ligne, je peux y réfléchir davantage.

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


Quant à votre mise à jour: je déclarerais simplement une commande qui prend l'argument selon lequel vous bouclez. Quelque chose comme ça:

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

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

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

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

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

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