带有回忆录和超链接的小写目录

带有回忆录和超链接的小写目录

使用时memoirhyperref无法将目录中的章节改为小写,否则会出现各种错误。

以下是 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

来自memoir 用户手册(第 158 页):

关于大写或小写 TOC 条目

有些设计要求 TOC 条目为大写(或小写)。这是可能的,但解决方案取决于hyperref包裹是否使用。

如果没有 hyperref,可以简单地\cftKfont以 say结尾\MakeTextUppercase,并且K-type 条目将大写。

可能性有限hyperref。解释:大写/小写宏不是那么强大,需要内容简单——对于简单的一些定义。当hyperref使用时,超链接在\cftKfont访问条目之前会包裹在条目周围,因此通常太复杂了,无法\MakeTextUppercase处理。以下解决方法从中汲取了灵感hyperref破坏了我全部大写的目录条目

\settocpreprocessor{<type>}{<code>}

这是、或<type>之一。如果需要,我们将尝试向其余分段类型添加类似的功能,请写信给维护者。并且可以是这样的:chapterpartbook<code>

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

其中 、和是\f@rtoc占位符,用于保存在访问实际目录文件之前要写入的内容。这样,大写字母就会潜入目录文件中,而 的书签部分就不会抱怨数据中的 。当然,书签列表中不会有大写字母的标题。\chapter\part\bookhyperrefhyperref\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}

答案2

尝试这个

\documentclass{memoir}
\usepackage{lmodern}

\renewcommand{\cftchapterfont}[1]{\scshape\lowercase{#1}}

\usepackage{hyperref}

\begin{document}
  \tableofcontents*

  \chapter{One}
  \clearpage
  \chapter{Two}
\end{document}

在此处输入图片描述

相关内容