我正在尝试使用考试类为我的学生创建一个学习指南,该指南的所有答案都位于文档的末尾。
我希望答案能够自动按问题编号和部分进行标记,但我不知道如何将问题和部分计数器传递给我用来构建结束注释的命令。
我尝试这样做,但最终却用最新的问题和零件计数器值标记了所有答案。我的问题似乎与这问题,但我无法弥合它们之间的差距。我尝试阅读一些关于扩展参数的帖子,但我对 TeX 的深层方面了解不够,无法理解发生了什么。
这是一个(相对最小的)工作示例。同样,我希望输出数字答案,例如“1:5、2(a):9、2(b):30、3:2 个苹果”。
\documentclass{exam}
\usepackage[utf8]{inputenc}
\usepackage{endnotes}
\def\enotesize{\normalsize}
\def\makeenmark{\relax}
\def\notesname{\normalsize Answers}
\def\answer#1{\endnotetext{#1\\}}
\def\theanswers{\theendnotes}
\begin{document}
\noindent\textbf{Practice Problems}
\begin{questions}
\question How many sides does a pentagon have?
\answer{\thequestion: $5$}
\question Calculate the following:
\begin{parts}
\part $2+7$
\answer{\thequestion(\thepartno): $9$}
\part $5\cdot 6$
\answer{\thequestion(\thepartno): $30$}
\end{parts}
\question If I have four apples and I eat two, how many are left?
\answer{\thequestion: $2$ apples}
\end{questions}
\theanswers
\end{document}
答案1
您可能已经明白,您之所以看到这个问题,是因为您需要在使用时扩展\thequestion
和的值。正如您所写的,只使用最终值。thepartno
由于扩展是 TeX/LaTeX 中最复杂的领域之一,我通常发现这expl3
是最直观的解决方案。在下文中,我重写了您的\answer
宏,以使用该expl3
方法完全扩展您传递给它的所有内容。
\documentclass{exam}
\usepackage[utf8]{inputenc}
\usepackage{endnotes}
\usepackage{xparse}
\renewcommand{\enotesize}{\normalsize}
\renewcommand{\makeenmark}{\relax}
\def\notesname{\normalsize Answers}
\def\theanswers{\theendnotes}
\ExplSyntaxOn
\cs_new:Nn \aegis_answer:n
{
\endnotetext{#1\par}
}
\cs_generate_variant:Nn \aegis_answer:n {x}
\NewDocumentCommand{\answer}{m}
{
\aegis_answer:x {#1}
}
\ExplSyntaxOff
\begin{document}
\noindent\textbf{Practice Problems}
\begin{questions}
\question How many sides does a pentagon have?
\answer{\thequestion: $5$}
\question Calculate the following:
\begin{parts}
\part $2+7$
\answer{\thequestion(\thepartno): $9$}
\part $5\cdot 6$
\answer{\thequestion(\thepartno): $30$}
\end{parts}
\question If I have four apples and I eat two, how many are left?
\answer{\thequestion: $2$ apples}
\end{questions}
\theanswers
\end{document}
结果:
更新:
如果你觉得expl3
不舒服,这里有一个方法\edef
。坦率地说,我发现这个不太透明,但你的里程可能会有所不同:
\newcommand{\answer}[1]{%
\begingroup
\edef\x{%
\endgroup
\noexpand\endnotetext{#1\par}}%
\x%
}