下面是一个 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}