LaTeX 有一个类叫做exam
。使用这个类,可以为考试写问题和答案。答案显示在每个问题的下面(后面)。我的目标是将所有答案放在文档的单独部分(所有问题之后)。为此,我尝试创建如下新环境:
\newenvironment{answer}{\def\answertext\begingroup}{\endgroup}
我希望收集答案文本\answertext
并在所有问题之后转储它。我相信,一个可靠的 TeX 包/类编写者可以立即完成此操作...请给我一些提示。
答案1
我们将所有答案累积在 中\vbox
,然后在适当的时候将内容从 和 转储\vbox
到页面上。(因此,当答案真正到达页面时,它们不在 内\vbox
,因此不会干扰分页符。)
下面是一个完整的 LaTeX 文件,它演示了这个想法:
\documentclass{exam}
\newbox\allanswers
\setbox\allanswers=\vbox{}
\newenvironment{answer}
{%
\global\setbox\allanswers=\vbox\bgroup
\unvbox\allanswers
}%
{%
\bigbreak
\egroup
}
\newcommand{\showallanswers}{\par\unvbox\allanswers}
%--------------------------------------------------------------------
\begin{document}
\begin{questions}
\question Why is there air?
\begin{answer}
Answer to Question \thequestion:
There's air so that we can blow up volleyballs and basketballs.
\end{answer}
\question Who's buried in Grant's tomb?
\begin{answer}
Answer to Question \thequestion:
What's his name.
\end{answer}
\question What was the color of George Washington's white horse?
\begin{answer}
Answer to Question \thequestion:
Blue. (No; Yellow!!)
\end{answer}
\end{questions}
\bigskip
\begin{center}
Here are the answers:
\end{center}
\showallanswers
\end{document}
答案2
宏\def
不接受\begingroup
...\endgroup
而不是{ }
。没有宏接受。有些宏(如\hbox
)接受\bgroup
和 ,\egroup
它们是隐式括号,即使用\let\bgroup={
和创建\let\egroup=}
(=
是可选的)。
要存储环境的内容,请使用environ
为此目的创建的包。内容显示为 ,\BODY
可复制到\answertext
。请记住,代码是在环境内部执行的,即在组中,因此必须使用\global\let\answertext\BODY
或\xdef\answertext{\BODY}
。但是,这只允许存储一个答案文本。如果您想累积答案,请使用\g@addto@macro<macro>{<code>}
,例如\expandafter\g@addto@macro\expandafter\answertext\expandafter{\BODY}
或包\xappto
的宏etoolbox
。
一些例子(不包括exam
类别):
\documentclass{article}
\usepackage{environ}
\newcommand{\answertext}{}
\NewEnviron{answer}{\global\let\answertext\BODY}
% or
\makeatletter
\NewEnviron{answer}{\expandafter\g@addto@macro\expandafter\answertext\expandafter{\BODY}}%
\makeatother
% or
\usepackage{etoolbox}
\NewEnviron{answer}{\xappto\answertext{\expandonce{\BODY}}}%
\begin{document}
The question
\begin{answer}
The answer text
\end{answer}
\newpage
% Some time later
\answertext
\end{document}
答案3
我的文件 ans.sty 在http://www.cwru.edu/artsci/math/wells/pub/mytex.html虽然很旧,但直到今天我仍经常使用它。毫无疑问,它可以被修改来做你想做的事情。