exam.cls 的分页问题

exam.cls 的分页问题

有一段时间,版本 2.01考试文件类已在我的部门使用。将来我们将使用最新版本(目前为 2.4),并且必须对其进行自定义,以便现有论文的排版与以前一样。在下面的示例中,新版本exam.cls添加了一个额外的分页符。

\documentclass{exam}
\setlength{\textheight}{8.8in} %set \textheight as in the old version
\extraheadheight[.7in]{-.2in}
%
\begin{document}
\hrule
\newpage
\showthe\textheight
\hrule
\vskip408pt
\hrule
\begin{center}
\rule{0.5\textwidth}{212pt}
\end{center}
\end{document}

我们现有的试卷包含\extraheadheight此处显示的命令。我期望设置\textheight为 8.8in( 2.01 版使用的值exam.cls),然后包括\extraheadheight以重现旧版本的行为,但在这种情况下却没有。

为什么会发生这种情况?

答案1

经过漫长的探索source2e.pdf和两个版本的尝试之后exam.cls(其中大部分都是不必要的),我为您带来了以下修复:

\usepackage{etoolbox}
\makeatletter
 \patchcmd\@setheadheight{\endgroup}{\global\vsize=\textheight\endgroup}{}{}
\makeatother

也许需要做一些解释。根据exam.cls2.4 版,2.307beta 版(2009/03/28)中引入了一个错误修复:

% We fixed a bug that arose only when the user used a figure or
% table environment that floated to the top of a page.  If that
% happened, then a full page's worth of text was placed below
% the figure or table, makeing the text run over the footline and off
% the bottom of the page.
%
% We fixed this by commenting out several lines at the end of
% \@setheadheight and @setfootheight.

注释掉的行包括设置的那一行\vsize。如果你想要全部,它们是:

\global\@colroom=\textheight
\global\vsize=\textheight
\global\pagegoal=\textheight

除了代码结构的细微变化外,这是\extraheadheightv2.4 和 v2.01 之间的唯一区别,正如您所见,它解释了您的错误:

\documentclass{exam}
% Comment out the next four lines to get 3 pages instead of 2 in v2.4
\usepackage{etoolbox}
\makeatletter
 \apptocmd\@setheadheight{\global\vsize=\textheight}{}{}
\makeatother
\extraheadheight[.7in]{-.2in}
\begin{document}
 \hrule
 \newpage
 \hrule
 \vskip408pt
 \hrule
 \begin{center}
  \rule{0.5\textwidth}{212pt}
 \end{center}
\end{document}

实际上,您观察到的旧行为被认为是不正确的,您可以通过重新插入三年前删除的错误来恢复它!

相关内容