Usando hiperref com classes base

Usando hiperref com classes base

Estou usando o pacote hyperrefem combinação com classes base personalizadas e tenho problemas para entender as mensagens de erro: Undefined control sequence. <recently read> \Hy@colorlinke Undefined control sequence. \close@pdflink ->\Hy@endcolorlink. Eles só aparecem quando o pacote é declarado no documento. Funciona conforme o esperado quando declarado na classe base.

Considere a seguinte configuração 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}

Fundo

Tenho que escrever uma série de relatórios para a universidade com a mesma estrutura e gostaria de terceirizar todas as páginas sem conteúdo em uma documentclass. \AtBeginDocumentlida com coisas como página de título, resumo, índice, etc.

Responder1

Seu problema não precisa de uma classe especial, apenas que o hyperref seja carregado atrás da sua \AtBeginDocumentchamada:

\documentclass{report}

\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}


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

\AtBeginDocumentnão deve ser usado para iniciar a composição. Muitos pacotes adicionam seu código de inicialização lá.

Com um novo látex 2020/10/01, que atualmente pode ser testado usando a versão -dev (por exemplo, pdflatex-dev), você pode fazer assim:

\documentclass{report}

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


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

Com látex mais antigo você pode usar o etoolbox:


\documentclass{report}

\usepackage{etoolbox}
\AfterEndPreamble{\tableofcontents}


\usepackage{hyperref}


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

informação relacionada