将 hyperref 与基类一起使用

将 hyperref 与基类一起使用

我正在将包hyperref与自定义基类结合使用,我无法理解错误消息: Undefined control sequence. <recently read> \Hy@colorlinkUndefined 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}

相关内容