Lastpage 和 \enddocumenthook:创建了额外的页面

Lastpage 和 \enddocumenthook:创建了额外的页面

下面是一个 MWE,在我的 Mac(MacTeX,已有几个月了)上产生了预期的一页输出(在早期版本的 MikTeX 上也发生过这种情况),但在最新版本的 MikTeX(21.1)上产生了两页输出:

\documentclass{article}
\usepackage{lastpage}

\makeatletter
\let\@oldenddochook\@enddocumenthook
\def\@enddocumenthook{%
END
\@oldenddochook}
\makeatother

\begin{document}
START

\end{document}

如果我注释掉\usepackage{lastpage},那么我会在两个系统上得到一页输出。

MikTeX 上的版本lastpage是 2015 年的,所以不是对的更改lastpage导致了问题。这是新版 MikTeX 中的错误,还是对某些本不应该起作用的东西的修复?无论如何,有人能解释一下发生了什么吗?

答案1

使用钩子的游戏一直以来都是被弃用的。

代码中的想法是在\@enddocumenthook处理之前添加“END”,但是这种钩子的管理已经发生了变化。

因此,你会发现代码lastpage被执行了您的添加显然会产生在新页面上排版的内容(在最后之后\clearpage)。

lastpage包应更新为使用\AddToHook{enddocument/afterlastpage}而不是\AtEndDocument,因此通过添加的代码\AtEndDocument将在它之前执行。

与此同时,您可以使用zref,它总是比更强大lastpage

\documentclass{article}
\usepackage[user,lastpage]{zref}

\AtEndDocument{END}

\begin{document}

\zpageref{LastPage}

START

\end{document}

在此处输入图片描述

相关内容