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 paquet forloop 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 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 transformer le code LaTeX en boucles alors?

51
demandé sur Peter Mortensen 2010-04-01 20:03:05

2 réponses

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 suis pas sûr de ce que cela signifie; Si vous ne pouvez vraiment pas vivre sans la double ligne, je peux y regarder plus.

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


En ce qui concerne votre mise à jour: je déclarerais simplement une commande qui prend l'argument que vous bouclez. Quelque chose comme ce:

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

\fordir{dira}
\fordir{dirb}
\fordir{dirc}
\dots
22
répondu Thomas 2010-04-01 16:27:58

Vous pouvez utiliser pgffor package, 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}
110
répondu Ma Ming 2011-09-04 11:17:32