Usando hiperref con clases base

Usando hiperref con clases base

Estoy usando el paquete hyperrefen combinación con clases base personalizadas y tengo problemas para entender los mensajes de error: Undefined control sequence. <recently read> \Hy@colorlinky 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. \AtBeginDocumentmaneja 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 \AtBeginDocumentllamada:

\documentclass{report}

\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}


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

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

información relacionada