
Ich verwende das Paket hyperref
in Kombination mit benutzerdefinierten Basisklassen und habe Probleme, die Fehlermeldungen zu verstehen:
Undefined control sequence. <recently read> \Hy@colorlink
und 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.
\AtBeginDocument
Diese verwaltet Dinge wie Titelseite, Abstract, Inhaltsverzeichnis etc.
Antwort1
Ihr Problem erfordert keine spezielle Klasse, sondern nur, dass der Hyperref hinter Ihrem \AtBeginDocument
Aufruf geladen wird:
\documentclass{report}
\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
\AtBeginDocument
sollte 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}