hyperref 的正确加载顺序是什么

hyperref 的正确加载顺序是什么

我遇到了 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 在设计上存在缺陷的另一个领域,而且几乎没有可用的文档。但至少对于这个问题的具体情况,答案现在已经记录下来了。

相关内容