Verwenden von Hyperref mit Basisklassen

Verwenden von Hyperref mit Basisklassen

Ich verwende das Paket hyperrefin Kombination mit benutzerdefinierten Basisklassen und habe Probleme, die Fehlermeldungen zu verstehen: Undefined control sequence. <recently read> \Hy@colorlinkund Undefined control sequence. \close@pdflink ->\Hy@endcolorlink. Sie erscheinen nur, wenn das Paket im Dokument deklariert ist. Es funktioniert wie erwartet, wenn es in der Basisklasse deklariert ist.

Beachten Sie die folgende Minimalkonfiguration:

\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}

Hintergrund

Ich muss für die Uni eine Reihe von Berichten mit gleicher Struktur schreiben und möchte dabei alle Seiten ohne Inhalt in eine Dokumentklasse auslagern. \AtBeginDocumentDiese verwaltet Dinge wie Titelseite, Abstract, Inhaltsverzeichnis etc.

Antwort1

Ihr Problem erfordert keine spezielle Klasse, sondern nur, dass der Hyperref hinter Ihrem \AtBeginDocumentAufruf geladen wird:

\documentclass{report}

\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}


\begin{document}
  \section{One}
  hello
  \section{Two}
  goodbye
\end{document}

\AtBeginDocumentsollte nicht zum Starten des Schriftsatzes verwendet werden. Viele Pakete fügen dort ihren Initialisierungscode hinzu.

Mit einem neuen Latex 2020/10/01, das derzeit mit der -dev-Version (z. B. pdflatex-dev) getestet werden kann, können Sie dies folgendermaßen tun:

\documentclass{report}

\AddToHook{begindocument/end}{\tableofcontents}
\usepackage{hyperref}


\begin{document}
  \section{One}
  hello
  \section{Two}
  goodbye
\end{document}

Mit älterem Latex können Sie etoolbox verwenden:


\documentclass{report}

\usepackage{etoolbox}
\AfterEndPreamble{\tableofcontents}


\usepackage{hyperref}


\begin{document}
  \section{One}
  hello
  \section{Two}
  goodbye
\end{document}

verwandte Informationen