
Existe un conflicto conocido entre la memoir
clase y el hyperref
paquete. hyperref
No se pueden procesar encabezados de tabla de contenido que incluyan la \MakeTextUppercase
macro.
El memoir
manual ( texdoc memoir
) proporciona un fragmento de código que se supone soluciona el problema, pero no logro que funcione.
¿Estoy usando la solución del manual incorrectamente o se necesita otra solución?
\documentclass{memoir}
\renewcommand*{\cftpartfont}{\MakeTextUppercase}
% From Memoir manual p. 158
\makeatletter
\settocpreprocessor{part}{%
\let\tempf@rtoc\f@rtoc%
\def\f@rtoc{%
\texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}%
}
\makeatother
\usepackage{hyperref}
\begin{document}
\tableofcontents*
\part{A Whale}
\chapter{A Tale}
\section{A Sail}
\subsection{A Beachball}
\part{A Poodle}
\chapter{A Noodle}
\section{A Doodle}
\end{document}
Al compilar este MWE me sale el siguiente error:
! Argument of \contentsline has an extra }.
<inserted text>
\par
l.2 \contentsline
{chapter}{\chapternumberline {1}A Tale}{5}
Se han propuesto otras soluciones:
- Escriba cftchapfont en mayúsculas
- Error al intentar utilizar \MakeTextUppercase para personalizar la tabla de contenido
Pero lo ideal sería que la solución del manual de clase fuera la correcta.
Respuesta1
Creo que estás entendiendo mal memoir
el manual.
Dice que al cargar hyperref
no se puede establecer una fuente en mayúsculas para las partes en el ToC con
\renewcommand*{\cftpartfont}{\MakeTextUppercase}
Dice que en su lugar puedes usar \settocpreprocessor
de esta manera:
\makeatletter
\settocpreprocessor{part}{%
\let\tempf@rtoc\f@rtoc%
\def\f@rtoc{%
\texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}%
}
\makeatother
Entonces, simplemente eliminar la línea ofensiva de su MWE obtendrá el resultado deseado.
\documentclass{memoir}
%\renewcommand*{\cftpartfont}{\MakeTextUppercase}
% From Memoir manual p. 158
\makeatletter
\settocpreprocessor{part}{%
\let\tempf@rtoc\f@rtoc%
\def\f@rtoc{%
\texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}%
}
\makeatother
\usepackage{hyperref}
\begin{document}
\tableofcontents*
\part{A Whale}
\chapter{A Tale}
\section{A Sail}
\subsection{A Beachball}
\part{A Poodle}
\chapter{A Noodle}
\section{A Doodle}
\end{document}