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