我想在使用特定定制包文件生成的所有文档末尾输出一行文本。我以为这样做\AtEndDocument
可以解决问题,因为我以前用过它来做诸如关闭在文档开始时自动打开的环境等事情。所以我尝试了以下方法:
\AtEndDocument{%
\textit{my note here}
}
但这似乎输出后文档中已运行final\clearpage
或类似程序,并且该行出现在其自己的页面上。这就是我现在想要的。
令我惊讶的是,当我尝试搜索这个问题时,这个网站和网络上的几个问题似乎都在问相反的问题:如何发出命令后清除页面。看来我看到的行为是其他人想要的,反之亦然。
如何在文档末尾添加与其余内容在同一页面上结束的片段?
答案1
这个问题本身并没有什么关系\AtEndDocument
,问题出在一个与那个钩子混淆的包上。
就我而言,我使用的是包lastpage
. 将\usepackage{lastpage}
声明移至包文件的末尾后我已经声明了我想要的钩子可以让我的片段出现在正确的页面上。
答案2
在https://ctan.org/pkg/lastpagelastpage 包的手册已经可用。
本文发布时的版本是v2.0a,其手册内容如下:
第 3.1 节
\AtEndDocument
\AtEndDocument
lastpage 软件包的 lastpagemodern.sty 版本不使用它,需要 LaTeX 格式 2022-11-01 或更新版本。相反,\AddToHook{enddocument/afterlastpage}
使用它,问题就不会出现。lastpageclassic.sty 使用
\AtEndDocument
并且 lastpage209.sty 重新定义\enddocument
。最后两种情况是有问题的:LaTeX2e 运行的输出与包的加载顺序不是独立的。通常情况下,必须将表格和图形放在末尾的格式与需要尾注的格式相同。如果想要\AtEndDocument
在这里也使用(就像对 所做的那样\pageref{LastPage}
),那么很容易得到 的三种不同用法\AtEndDocument
(假设也将其用于尾注)。显然,对于任何包编写者或用户来说,假设他们放入 中的内容不会有任何材料跟随都是不安全的\AtEndDocument
。因此,每次使用 时都会包含一条以 AED 开头的消息\AtEndDocument
。lastpage 使用\AtEndDocument{...\clearpage...}
,因此\usepackage{lastpage}...\AtEndDocument{something}
会在 之后放置一些内容\clearpage
。要将其放在更前面,请使用\AtEndDocument{something}...\usepackage{lastpage}
。如果 之前不知道 某些内容\usepackage{lastpage}
,您可以使用例如
...
\def\beforeLastpageClearpage{\relax}
\AtEndDocument{\beforeLastpageClearpage}
\usepackage{lastpage}
\begin{document}
...
\def\beforeLastpageClearpage{\textit{something}}%
...
\end{document}
(可能需要受保护和/或扩展
\def
)。当\clearpage
导致某些输出时,可能需要\clearpage\textit{something}
而不是。\textit{something}
总结
要么使用 LaTeX 格式 2022-11-01 或更新版本(\usepackage{lastpage}
自动加载甚至不使用\AtEndDocument
但的现代风格\AddToHook{enddocument/afterlastpage}
)
或者在何时何地关注\AtEndDocument
你的事情。