我正在尝试将 etoolbox 与文档类一起使用exam
。我成功地将 etoolbox 与该类一起使用article
,但我无法让它在环境中工作question
。这是一个最小的例子:
\documentclass[12pt]{exam}
\usepackage{etoolbox}
\def\QuizKey{\newpage }
\newcommand{\answer}[2][0 pt]{
\eappto{\QuizKey}{\noexpand\par\arabic{question}.\ \unexpanded{#2}}
\vspace{#1}
}
\begin{document}
\appto{\QuizKey}{Opening Code}
\begin{questions}
\question When did the Internet first begin?\answer{1985}
\appto{\QuizKey}{Something else to test}
\end{questions}
\appto{\QuizKey}{Ending Code}
\QuizKey
\end{document}
我的最终结果是,\QuizKey
打印输出执行了文档中要求的所有操作,除了问题环境中的部分。我猜想\eappto
和\appto
命令无法到达钩子,或者它们可能不允许在环境内使用,但它似乎也没有导致任何错误。有什么办法可以解决这个问题吗?
答案1
\QuizKey
环境构成一个组,因此一旦环境结束,对 的更改就会丢失,除非更改是全局的。使用\xappto
和\gappto
。
\documentclass[12pt]{exam}
\usepackage{etoolbox}
\newcommand\QuizKey{\newpage}
\newcommand{\answer}[2][0pt]{% <-- don't forget
\xappto{\QuizKey}{\arabic{question}.\ \unexpanded{#2\par}}% <-- don't forget
\vspace{#1}%
}
\begin{document}
\gappto{\QuizKey}{Opening Code\par}
\begin{questions}
\question When did the Internet first begin?\answer{1985}
\gappto{\QuizKey}{Something else to test\par}
\end{questions}
\gappto{\QuizKey}{\par Ending Code}
\QuizKey
\end{document}