2010-04-01 51 views
46

我想用一些迭代控制流来简化下面的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 package提供for循环。但我不确定如何将其应用于我的案例?或者其他方法不通过forloop?


如果我也想简单另一个类似的情况下,其中唯一的区别是该目录不为1,2运行,至23,但在一些任意的顺序如3,2,6,9 ,...,甚至是一系列字符串,例如dira,dirc,dird,dirb,....我如何将LaTeX代码转换为循环呢?

+1

请检查是否接受的答案仍然是最好的选择。最高票数的答案几乎是票数的三倍!谢谢。 – Sebastian 2013-11-08 15:48:36

回答

21

像这样将您的表格的身体护理:

\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 
+0

谢谢,托马斯!真的很感激它!是的,用双水平线分隔行会很好。另一个问题:我怎样才能得到分隔两个多列的双垂直线:\ multicolumn {5} {| c |} {Class 0}和\ multicolumn {5} {| c |} {Class 1}? – Tim 2010-04-01 20:42:17

98

您可以使用pgffor包,由PGF提供的一个工具。基本语法是:

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

值得注意的是,这对循环并不限于整数,例如:

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