
Существует известный конфликт между memoir
классом и hyperref
пакетом. hyperref
Невозможно обработать заголовки оглавления, включающие \MakeTextUppercase
макрос.
В memoir
руководстве ( texdoc memoir
) представлен фрагмент кода, который должен решить эту проблему, но я не могу заставить его работать.
Я неправильно использую решение из руководства или требуется другое решение?
\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}
При компиляции этого MWE я получаю следующую ошибку:
! Argument of \contentsline has an extra }.
<inserted text>
\par
l.2 \contentsline
{chapter}{\chapternumberline {1}A Tale}{5}
Были предложены и другие решения:
- Наберите cftchapfont заглавными буквами
- Ошибка при попытке использования \MakeTextUppercase для настройки оглавления
Но в идеале правильным было бы решение, указанное в методическом пособии.
решение1
Я думаю, вы неправильно понимаете memoir
руководство.
Там написано, что при загрузке hyperref
нельзя установить заглавный шрифт для частей в оглавлении с
\renewcommand*{\cftpartfont}{\MakeTextUppercase}
Там говорится, что вместо этого можно использовать \settocpreprocessor
следующий способ:
\makeatletter
\settocpreprocessor{part}{%
\let\tempf@rtoc\f@rtoc%
\def\f@rtoc{%
\texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}%
}
\makeatother
Таким образом, простое удаление проблемной строки из вашего MWE дает желаемый результат.
\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}