Cómo aplicar la solución del manual de Memoir para permitir \MakeTextUppercase junto con hyperref

Cómo aplicar la solución del manual de Memoir para permitir \MakeTextUppercase junto con hyperref

Existe un conflicto conocido entre la memoirclase y el hyperrefpaquete. hyperrefNo se pueden procesar encabezados de tabla de contenido que incluyan la \MakeTextUppercasemacro.

El memoirmanual ( 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:

Pero lo ideal sería que la solución del manual de clase fuera la correcta.

Respuesta1

Creo que estás entendiendo mal memoirel manual.

Dice que al cargar hyperrefno 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 \settocpreprocessorde 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} 

ingrese la descripción de la imagen aquí

información relacionada