
Estou usando o pacote hyperref
em combinação com classes base personalizadas e tenho problemas para entender as mensagens de erro:
Undefined control sequence. <recently read> \Hy@colorlink
e 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.
\AtBeginDocument
lida 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 \AtBeginDocument
chamada:
\documentclass{report}
\AtBeginDocument{\tableofcontents}
\usepackage{hyperref}
\begin{document}
\section{One}
hello
\section{Two}
goodbye
\end{document}
\AtBeginDocument
nã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}