Итерация в 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 в циклы тогда?

2 51

2 ответа:

что-то вроде этого позаботится о теле вашей таблицы:

\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

вы можете использовать pgffor пакет, инструмент, предоставленный pgf. Основной синтаксис:

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

Примечательно, что этот цикл for не ограничивается целыми числами, например:

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