以下 MWE 演示了累积到框中的答案列表在打印时不遵守分页符(代码改编自考试包中的多项选择题答案位于文档末尾:
\documentclass[answers]{exam}
\usepackage{pgffor}
\newbox\allanswers
\setbox\allanswers=\vbox{}
\newenvironment{answer}
{%
\global\setbox\allanswers=\vbox\bgroup %
\unvbox\allanswers%
\thequestion. \thechoice\\
}%
{%
\egroup%
}
\newcommand{\CC}{\CorrectChoice \leavevmode\begin{answer}\end{answer}}
\newcommand{\showallanswers}{%
\ifprintanswers \centering Here are the answers: \par \usebox\allanswers \fi}
\begin{document}
\begin{questions}
\foreach \i in {1,...,50}{
\question[5] Important Question 1
\begin{choices}
\CC 100
\end{choices}
}
\end{questions}
\newpage
\showallanswers
\end{document}
我怎样才能格式化框的内容,以便它保留在文档边距内(理想情况下,它应该在多色环境中打印,但我似乎无法做到这一点)?
答案1
一个框不能跨页面拆分,它是一个不可分割的单元。
但是,你可以对其进行“拆箱”:
\newcommand{\showallanswers}{%
\ifprintanswers
{\centering Here are the answers: \par}
\unvbox\allanswers
\fi
}
这会将 vbox 的垂直列表附加到当前垂直列表。请注意,“未使用 vbox 的框”两端均未添加行间粘连,因此间距可能需要进行一些调整。
不过,我会使用不同的方法。
\documentclass[answers]{exam}
\usepackage{environ,pgffor}
\newtoks\allanswers
\NewEnviron{answer}
{%
\edef\temp{%
\the\allanswers % the previous ones
\thequestion. \thechoice
\noexpand\par % maybe \par has been redefined
\unexpanded\expandafter{\BODY}%
}
\global\allanswers=\expandafter{\temp}
}
\newcommand{\CC}{\CorrectChoice \leavevmode\begin{answer}\end{answer}}
\newcommand{\showallanswers}{%
\ifprintanswers {\centering Here are the answers: \par} \the\allanswers \fi}
\begin{document}
\begin{questions}
\foreach \i in {1,...,50}{
\question[5] Important Question 1
\begin{choices}
\CC 100
\end{choices}
}
\end{questions}
\newpage
\showallanswers
\end{document}
这样就避免了提前排版答案,以便multicols
在打印答案时更好地使用。