在表格环境中使用循环的问题

在表格环境中使用循环的问题

我在表格环境中使用循环时遇到了麻烦:

\newcounter{it}
\setcounter{it}{0}

\begin{tabular}{ll}
  \loop\ifnum\theit<4
    \addtocounter{it}{1}
    Q & A\\
  \repeat
\end{tabular}

我收到一条错误,提示循环参数有一个额外的 },并且编译在 & 处停止。当它是单列表时,我不会收到错误,但即使在这种情况下,结果也不如预期:我得到了一次循环执行,而不是 4 次。

有人能告诉我我错过了什么吗?在表格中使用循环时有什么特殊注意事项吗?

答案1

是的,不要那样做。表格确实很特殊,并且不利于宏(例如每个表格&都会关闭一个组)。

尝试

\def\mylines{}%
\loop\ifnum\theit<4
  \addtocounter{it}{1}
  \expandafter\def\expandafter\mylines\expandafter{%
    \mylines
    Q & A\\
  }%
\repeat

外部然后是表格

\begin{tabular}{ll}
  \mylines
\end{tabular}

答案2

使用令牌寄存器收集所有行,然后打印这些行:

\documentclass{article}
\newcounter{it}  \setcounter{it}{0}
\newtoks\tabtoks
\newcommand\addtabtoks[1]{\tabtoks\expandafter{\the\tabtoks#1}}
\newcommand*\resettabtoks{\tabtoks{}}
\newcommand*\printtabtoks{\the\tabtoks}
\begin{document}

\resettabtoks
\loop\ifnum\theit<4
  \stepcounter{it} \addtabtoks{Q & A\\}
\repeat

\begin{tabular}{ll}
\printtabtoks
\end{tabular}

\end{document}

答案3

您自己的答案必须解决多行问题。这里有一种方法可以做到这一点,而不必单独构建最后一行,从而将表格行结构保持在循环内的一处。我加了一\hline两个来表明它们也不会打乱计划。

解决方案输出

\documentclass[12pt]{article}
\usepackage[a6paper,landscape]{geometry}

\usepackage{ifthen}

\def\tand{&}

\begin{document}
%
\newcounter{it}
\begin{tabular}{ll}
\hline
  \setcounter{it}{1}%
  \whiledo{\theit<4}{%
    Q \tand A \\%
    \ifnum\value{it}=3\hline\end{tabular}\fi
  \stepcounter{it}%
  }%
 \par Immediately after the table
%
\end{document}

答案4

我通过使用 while 循环解决了我的问题:

\def\tand{&}

\newcounter{it}
\begin{tabular}{ll}%
  \setcounter{it}{1}%
  \whiledo{\theit<3}{%
    Q \tand A \\%
  \stepcounter{it}%
  }%
  {\theit} \tand \\
\end{tabular}

PS:如果想知道为什么我需要单独打印最后一个,原因是执行留下了部分行(我正在使用tabular{|l|l|})。

相关内容