\AtEndDocument 在考试中导致虚假分页符

\AtEndDocument 在考试中导致虚假分页符

请参阅下面的 MWE。这相当简单。\AtEndDocument在执行之前会导致虚假的分页符。但是,当直接执行相同的代码时,不会导致此分页符。

\documentclass{exam}

\AtEndDocument{%
  \vfill
  \begin{center}
    \textsc{== End of Questions ==}
  \end{center}}

\begin{document}


\begin{questions} 

  \question Test question 1 

  \question Test question 2

\end{questions}

% When inserted directly, it will not cause the page break

% \vfill
% \begin{center}
%   \textsc{== End of Questions ==}
% \end{center}

\end{document}

答案1

正如 Werner 所写,考试也会插入代码\AtEndDocument。使用当前的 LaTeX,您可以定义一条规则,以便您的enddocument代码位于类中的代码之前:

\documentclass{exam}

\AddToHook{enddocument}[myhook]{%
  \vfill
  \begin{center}
    \textsc{== End of Questions ==}
  \end{center}}

\DeclareHookRule{enddocument}{myhook}{before}{exam}
\begin{document}


\begin{questions}

  \question Test question 1

  \question Test question 2

\end{questions}

% When inserted directly, it will not cause the page break

% \vfill
% \begin{center}
%   \textsc{== End of Questions ==}
% \end{center}

\end{document}

答案2

exam班级已经添加了\clearpagevia\AtEndDocument作为类加载的一部分(从第 1737 行开始exam.cls):

1737: \AtEndDocument{%
1738:   \clearpage
1739:   ...

虽然它不打印任何内容,但它\clearpage用于刷新任何剩余页面,以便计算适当的页面引用/计数。由于您发出了\AtEndDocument添加的附加集合\clearpage 打印内容,它将要驻留在新的/单独的页面上。

相关内容