我在表格环境中使用循环时遇到了麻烦:
\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|}
)。