\setbox 的内容不遵守分页符

\setbox 的内容不遵守分页符

以下 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在打印答案时更好地使用。

相关内容