有没有简单的方法可以在表格环境中执行重复?
这就是我打算做的:
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{ifthen}
\newcommand\encircle[1]{%
\tikz[baseline=(X.base)]
\node (X) [draw, shape=circle, inner sep=0] {\strut #1};}
\begin{document}
\renewcommand{\arraystretch}{1.25}
\pagestyle{empty}
\begin{tabular}{|c|c|c|c|c|c|}
\hline
\newcounter{qno}
\setcounter{qno}{1}
\whiledo{\value{qno} < 41}{
\theqno.
& \encircle{a}
& \encircle{b}
& \encircle{c}
& \encircle{d}
& \encircle{e}
\\
\hline
\stepcounter{qno}
}
\end{tabular}
\end{document}
但它会产生一个编译错误、一个空白页和一个末尾有三行额外行的表格。
我知道可能的解决方案,但我想知道是否有任何不需要重新定义事物的解决方案。
答案1
使用 很容易expl3
,因为它\int_step_function:nnnN
在 TeX 重新启动以检查输出之前提供其结果。
\documentclass[a4paper,10pt]{scrartcl}
\usepackage{tikz}
\usepackage{xparse}
\newcommand\encircle[1]{%
\begin{tikzpicture}[baseline=(X.base)]
\node (X) [draw, shape=circle, inner sep=0] {\strut #1};
\end{tikzpicture}%
}
\ExplSyntaxOn
\NewDocumentCommand{\maketabularlines}{mm}
{
\int_step_function:nnnN { 1 } { 1 } { #1 } #2
}
\ExplSyntaxOff
\NewDocumentCommand{\abcdeline}{m}{%
#1.
& \encircle{a}
& \encircle{b}
& \encircle{c}
& \encircle{d}
& \encircle{e}
\\
\hline
}
\begin{document}
\renewcommand{\arraystretch}{1.25}
\begin{tabular}{|c|c|c|c|c|c|}
\hline
\maketabularlines{10}{\abcdeline}
\end{tabular}
\end{document}
您可以使用不同的宏来代替,\abcdeline
只要宏的参数是循环中的当前索引即可。