
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}
也提出了其他解決方案:
但理想情況下,課堂手冊中的解決方案應該是正確的。
答案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}