Como aplicar a correção do manual Memoir para permitir \MakeTextUppercase em toc com hyperref

Como aplicar a correção do manual Memoir para permitir \MakeTextUppercase em toc com hyperref

Existe um conflito conhecido entre a memoirclasse e o hyperrefpacote. hyperrefnão é possível processar títulos do Índice que incluem a \MakeTextUppercasemacro.

O memoirmanual ( texdoc memoir) fornece um trecho de código que deveria resolver o problema, mas não consigo fazê-lo funcionar.

Estou usando a solução do manual incorretamente ou é necessária outra solução?

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

Compilando este MWE recebo o seguinte erro:

! Argument of \contentsline has an extra }.
<inserted text> 
                \par 
l.2 \contentsline
                  {chapter}{\chapternumberline {1}A Tale}{5}

Outras soluções foram propostas:

Mas o ideal é que a solução do manual da aula seja a correta.

Responder1

Acho que você está entendendo mal memoiro manual.

Diz que ao carregar hyperrefvocê não pode definir uma fonte maiúscula para as partes do ToC com

\renewcommand*{\cftpartfont}{\MakeTextUppercase}

Diz que você pode usar \settocpreprocessordesta maneira:

\makeatletter
\settocpreprocessor{part}{%
    \let\tempf@rtoc\f@rtoc%
    \def\f@rtoc{%
        \texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}%
}
\makeatother

Então, simplesmente remover a linha ofensiva do seu MWE dá o resultado desejado

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

insira a descrição da imagem aqui

informação relacionada