
Estoy usando el paquete hyperref
en combinación con clases base personalizadas y tengo problemas para entender los mensajes de error:
Undefined control sequence. <recently read> \Hy@colorlink
y Undefined control sequence. \close@pdflink ->\Hy@endcolorlink
. Sólo aparecen cuando el paquete está declarado en el documento. Funciona como se esperaba cuando se declara en la clase base.
Considere la siguiente configuración mínima:
\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}
Fondo
Tengo que escribir una serie de informes para la universidad con la misma estructura y me gustaría subcontratar todas las páginas sin contenido en una clase de documentos.
\AtBeginDocument
maneja cosas como página de título, resumen, tabla de contenido, etc.
Respuesta1
Su problema no necesita una clase especial, solo esa hiperreferencia se carga detrás de su \AtBeginDocument
llamada:
\documentclass{report}
\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
\AtBeginDocument
no debe usarse para comenzar a escribir. Muchos paquetes agregan allí su código de inicialización.
Con un nuevo látex 01/10/2020, que actualmente se puede probar usando la versión -dev (por ejemplo, pdflatex-dev), puede hacerlo así:
\documentclass{report}
\AddToHook{begindocument/end}{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
Con látex más antiguo puedes usar etoolbox:
\documentclass{report}
\usepackage{etoolbox}
\AfterEndPreamble{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}