So wenden Sie den Fix des Memoir-Handbuchs an, um \MakeTextUppercase im Inhaltsverzeichnis mit Hyperref zuzulassen

So wenden Sie den Fix des Memoir-Handbuchs an, um \MakeTextUppercase im Inhaltsverzeichnis mit Hyperref zuzulassen

Es besteht ein bekannter Konflikt zwischen der memoirKlasse und dem hyperrefPaket. hyperrefInhaltsverzeichnisüberschriften, die das \MakeTextUppercaseMakro enthalten, können nicht verarbeitet werden.

Im memoirHandbuch ( texdoc memoir) steht ein bisschen Code, der das Problem beheben soll, aber ich bekomme ihn nicht zum Laufen.

Verwende ich die Lösung im Handbuch falsch oder ist eine andere Lösung erforderlich?

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

Beim Kompilieren dieses MWE erhalte ich die folgende Fehlermeldung:

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

Es wurden andere Lösungen vorgeschlagen:

Im Idealfall wäre aber die Lösung im Kurshandbuch die richtige.

Antwort1

Ich glaube, Sie verstehen memoirdas Handbuch falsch.

Es heißt, dass Sie beim Laden hyperrefkeine Großbuchstaben für Teile des Inhaltsverzeichnisses festlegen können mit

\renewcommand*{\cftpartfont}{\MakeTextUppercase}

Dort heißt es, dass Sie stattdessen \settocpreprocessorFolgendes verwenden können:

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

Das einfache Entfernen der störenden Zeile aus Ihrem MWE führt zum gewünschten Ergebnis

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

Bildbeschreibung hier eingeben

verwandte Informationen