2010-04-01 57 views
46

Tôi muốn sử dụng một số luồng điều khiển lặp lại để đơn giản hóa mã LaTeX sau.Lặp lại trong 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} 

Tôi biết rằng forloop package cung cấp vòng lặp for. Nhưng tôi không chắc chắn làm thế nào để áp dụng nó vào trường hợp của tôi? Hoặc các phương pháp khác không phải bởi forloop?


Nếu tôi cũng muốn chỉ đơn giản là một trường hợp tương tự, nơi sự khác biệt duy nhất là thư mục không chạy từ 1, 2, đến 23, nhưng trong một số thứ tự tùy ý như 3, 2, 6, 9 , ... hoặc thậm chí là danh sách các chuỗi như dira, dirc, dird, dirb, .... Làm cách nào để tôi tạo mã LaTeX thành các vòng lặp?

+1

xin vui lòng kiểm tra nếu câu trả lời chấp nhận vẫn là sự lựa chọn tốt nhất. Câu trả lời bình chọn cao nhất có gần gấp ba lần số phiếu bầu! Cảm ơn. – Sebastian

Trả lời

21

Something như thế này sẽ chăm sóc cơ thể của bảng của bạn:

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

tôi phải ghi chú bên ngoài \hline đầu tiên bởi vì nó đã cho tôi một lỗi:

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

Tôi không chắc chắn điều đó có nghĩa là gì; nếu bạn thực sự không thể sống thiếu đường đôi, tôi có thể nhìn vào nó nhiều hơn.

Cũng lưu ý rằng bạn phải sử dụng <; ví dụ: <= 24 sẽ không hoạt động.


Như cập nhật của bạn: Tôi chỉ cần khai báo một lệnh để lấy đối số mà bạn đang lặp lại. Một cái gì đó như thế này:

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

\fordir{dira} 
\fordir{dirb} 
\fordir{dirc} 
\dots 
+0

Cảm ơn, Thomas! Thực sự đánh giá cao nó! Có, nó sẽ được tốt đẹp với hai dòng ngang tách hàng. Một câu hỏi khác: làm thế nào tôi cũng có thể nhận được các đường thẳng đứng đôi tách hai đa cột: \ multicolumn {5} {| c |} {Class 0} và \ multicolumn {5} {| c |} {Class 1}? – Tim

98

Bạn có thể sử dụng gói pgffor, một công cụ được cung cấp bởi pgf. Cú pháp cơ bản là:

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

Đáng chú ý, điều này cho vòng lặp không bị giới hạn số nguyên, ví dụ:

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