我正在将包hyperref
与自定义基类结合使用,我无法理解错误消息:
Undefined control sequence. <recently read> \Hy@colorlink
和Undefined control sequence. \close@pdflink ->\Hy@endcolorlink
。它们仅在文档中声明包时出现。在基类中声明时,它可以按预期工作。
考虑以下最小设置:
\ProvidesClass{base}
\LoadClass{report}
% declare option 1: works
% \RequirePackage{hyperref}
\AtBeginDocument{
\tableofcontents
}
\documentclass{base}
% declare option 2: does not work
% \usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
背景
我必须为大学撰写一系列具有相同结构的报告,并希望将所有非内容页面外包到文档类中。
\AtBeginDocument
处理诸如标题页、摘要、目录等内容。
答案1
您的问题不需要特殊的类,只需要在您的\AtBeginDocument
调用后面加载 hyperref:
\documentclass{report}
\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
\AtBeginDocument
不应用它来开始排版。许多软件包都在那里添加它们的初始化代码。
使用新的 latex 2020/10/01,目前可以使用 -dev 版本(例如 pdflatex-dev)进行测试,您可以这样做:
\documentclass{report}
\AddToHook{begindocument/end}{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
对于较旧的 Latex,您可以使用 etoolbox:
\documentclass{report}
\usepackage{etoolbox}
\AfterEndPreamble{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}