有一段时间,版本 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.cls
2.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
除了代码结构的细微变化外,这是\extraheadheight
v2.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}
实际上,您观察到的旧行为被认为是不正确的,您可以通过重新插入三年前删除的错误来恢复它!