我正在创建考试,所以我需要制作(几乎)相同的考试版本,但会有几个字符不同。例如
\documentclass{article}
\begin{document}
Here I use the variable $x$
\newpage
Here I use the variable $y$
\end{document}
为了避免在尝试复制不同页面的编辑时出现错误,我想做的是
\documentclass{article}
\begin{document}
\page{Here I use the variable #1}
\pages{$x$,$y$}
\end{document}
关于如何高效地执行此操作,有什么建议吗?我知道如何创建宏,然后可以在每个页面上重复该宏。具体问题是如何使用可变参数执行命令,该命令遍历参数并将宏 \page 应用于每个参数。
答案1
根据以下详细信息如何迭代以逗号分隔的列表?,您可以按照以下方式定义\page
和的版本:\pages
\documentclass{article}
\usepackage[paper=a6paper]{geometry}% Just for this example
\usepackage{etoolbox}
\makeatletter
\newcommand{\page}{\long\def\@page##1}% \page defines \@page
\newcommand{\pages}[1]{%
\renewcommand{\do}{\@page}% Each element will be passed to \@page
\docsvlist{#1}% Iterate over CSV list
}
\makeatother
\begin{document}
\page{%
\newpage
Here I use the variable #1?%
}
\pages{$x$,$y$}
% ====================
\newcounter{mycounter}
\page{%
\newpage
\stepcounter{mycounter}\themycounter: \quad Solve #1
}
\pages{
$a^2 + b^2 ={} ?$,
$\displaystyle \sum_{i=1}^\infty \frac{1}{i} ={} ?$,
$1 + (-1) ={} ?$
}
\end{document}
\page
将其参数传递给\def
名为的初始化\@page
。\pages
遍历 CSV 列表,将每个项目传递给\@page
执行。