Итерация в LaTeX
Я хотел бы использовать некоторый поток управления итерацией, чтобы упростить следующий код 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}
Я узнал, что пакет forloop содержит цикл for
. Но я не уверен, как применить его к моему делу? Или другие методы не с помощью forloop?
Если я также хочу просто еще один подобный случай, где единственное отличие состоит в том, что каталог не работает от 1, 2, до 23, но в некотором произвольном порядке, таком как 3, 2, 6, 9,..., или даже список строк, таких как dira, dirc, dird, dirb,.... Как мне сделать код LaTeX в циклы тогда?
Ответы
Ответ 1
Что-то вроде этого позаботится о теле вашей таблицы:
\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
}
Мне пришлось прокомментировать первый \hline
, потому что он дал мне ошибку:
You can't use `\hrule' here except with leaders.
Я не уверен, что это значит; если вы действительно не можете жить без двойной линии, я могу изучить ее больше.
Также обратите внимание, что вы должны использовать <
; например, <= 24
не будет работать.
Что касается вашего обновления: я просто объявляю команду, которая принимает аргумент, который вы зацикливаете. Что-то вроде этого:
\newcommand\fordir[1]{do something complex involving directory named #1}
\fordir{dira}
\fordir{dirb}
\fordir{dirc}
\dots
Ответ 2
Вы можете использовать пакет pgffor
, инструмент, предоставляемый pgf. Основной синтаксис:
\foreach \n in {0,...,22}{do something}
Примечательно, что это для цикла не ограничено целыми числами, например:
\foreach \n in {apples,burgers,cake}{Let eat \n.\par}