使用时memoir
我hyperref
无法将目录中的章节改为小写,否则会出现各种错误。
以下是 MWE:
\documentclass{memoir}
\usepackage{lmodern}
% \renewcommand{\cftchapterfont}{\scshape} % WORKS
\renewcommand{\cftchapterfont}{\scshape\MakeLowercase} % DOESN'T WORK
\usepackage{hyperref} % Without hyperref it's all good
\begin{document}
\tableofcontents*
\chapter{One}
\clearpage
\chapter{Two}
\end{document}
知道发生了什么事以及如何解决吗?
答案1
关于大写或小写 TOC 条目
有些设计要求 TOC 条目为大写(或小写)。这是可能的,但解决方案取决于
hyperref
包裹是否使用。如果没有 hyperref,可以简单地
\cftKfont
以 say结尾\MakeTextUppercase
,并且K
-type 条目将大写。可能性有限
hyperref
。解释:大写/小写宏不是那么强大,需要内容简单——对于简单的一些定义。当hyperref
使用时,超链接在\cftKfont
访问条目之前会包裹在条目周围,因此通常太复杂了,无法\MakeTextUppercase
处理。以下解决方法从中汲取了灵感hyperref
破坏了我全部大写的目录条目:
\settocpreprocessor{<type>}{<code>}
这是、或
<type>
之一。如果需要,我们将尝试向其余分段类型添加类似的功能,请写信给维护者。并且可以是这样的:chapter
part
book
<code>
\makeatletter \settocpreprocessor{chapter}{% \let\tempf@rtoc\f@rtoc% \def\f@rtoc{% \texorpdfstring{\MakeTextUppercase{\tempf@rtoc}}{\tempf@rtoc}}% } \makeatother
其中 、和是
\f@rtoc
占位符,用于保存在访问实际目录文件之前要写入的内容。这样,大写字母就会潜入目录文件中,而 的书签部分就不会抱怨数据中的 。当然,书签列表中不会有大写字母的标题。\chapter
\part
\book
hyperref
hyperref
\MakeTextUppercase
考虑到以上情况,您可以使用
\documentclass{memoir}
\makeatletter
\settocpreprocessor{chapter}{%
\let\temp@f@rtoc\f@rtoc
\def\f@rtoc{\texorpdfstring{\MakeTextLowercase{\temp@f@rtoc}}{\temp@f@rtoc}}
}
\makeatother
\renewcommand{\cftchapterfont}{\normalfont\scshape}% Formatting the \chapter ToC entries
\usepackage{hyperref}
\begin{document}
\tableofcontents*
\chapter{First}
\chapter{Second}
\end{document}