![hyperref 的正确加载顺序是什么](https://linux22.com/image/315417/hyperref%20%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%8A%A0%E8%BD%BD%E9%A1%BA%E5%BA%8F%E6%98%AF%E4%BB%80%E4%B9%88.png)
我遇到了 egreg 的错误解决方案加载时hyperref
可以生成以下 MWE 来演示这一点:
\documentclass{article}
\AtBeginDocument{\bgroup}
\AtEndDocument{\egroup}
\usepackage{hyperref}
\begin{document}a\end{document}
加载时,hyperref
我尝试按照 hyperref 文档进行操作,因此it comes last of your loaded packages
,我将其读为load as late as possible
。然而,如果没有 aux 文件,我会收到以下错误:
! LaTeX Error: Can be used only in preamble.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.4 \HyperFirstAtBeginDocument
{\ifx\hyper@anchor\@undefined
? H
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.
继续后,错误消失。如果删除辅助文件,错误会再次出现。
但是,尽早加载 hyperref 可以避免出现此错误:
\documentclass{article}
\usepackage{hyperref}
\AtBeginDocument{
\bgroup
}
\AtEndDocument{
\egroup
}
\begin{document}
a
\end{document}
那么正确的顺序是什么?这是预期的行为吗?我做错了什么吗?
使用的是最新的 hyperref 版本 (6.83m)。本文使用的是 1.4h 版本。\listfiles
如果有帮助的话,我可以提供完整的输出。
答案1
从 Werner 的评论中可以看出,在使用钩子之前应该先加载 hyperref。或者,正如 Peter Grill 提到的,可以使用其他钩子。
在 Werner 的另一条评论中有一个推荐的包加载顺序列表。不幸的是,似乎没有列出钩子和包之间的顺序。这似乎是 LaTeX 在设计上存在缺陷的另一个领域,而且几乎没有可用的文档。但至少对于这个问题的具体情况,答案现在已经记录下来了。