views:

238

answers:

1
+7  Q: 

iteration in latex

Hi,

I would like to use some iteration control flow to simplify the following latex code

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

I learn that the forloop package provides the for loop. But I am not sure how to apply it to my case? Or other methods not by forloop?

Thanks and regards!


Update:

If I also want to simply another similar case, where the only difference is that the directory does not run from 1, 2, to 23, but in some arbitrary order such as 3, 2, 6, 9,..., or even a list of strings such as dira, dirc, dird, dirb,.... How to make the latex code into loops then?

Thanks!

+3  A: 

Something like this will take care of the body of your tabular:

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

I had to comment out the first \hline because it gave me an error:

You can't use `\hrule' here except with leaders.

I'm not sure what that means; if you really cannot live without the double line, I can look into it more.

Also note that you have to use <; for example, <= 24 will not work.


As to your update: I would simply declare a command that takes the argument that you're looping over. Something like this:

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

\fordir{dira}
\fordir{dirb}
\fordir{dirc}
\dots
Thomas
Thanks, Thomas! Really appreciate it! Yes, it would be nice with double horizontal lines separating rows. Another question: how can I also get double vertical lines separating the two multicolumns: \multicolumn{5}{|c|}{Class 0} and \multicolumn{5}{|c|}{Class 1}?
Tim