“单独”显示问题的解决方案

“单独”显示问题的解决方案

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虽然很旧,但直到今天我仍经常使用它。毫无疑问,它可以被修改来做你想做的事情。

相关内容