\MakeTextUppercase
当我尝试使用自定义目录时出现以下错误:
! Undefined control sequence.
\find@pdflink ...ode \protected@edef \Hy@testname
{#2}\ifx \Hy@testname \@em...
l.2 ...entsline {chapter}{Contents}{1}{section*.1}
知道发生了什么吗?我在下面提供了一个最小示例以供测试。
\documentclass[a4paper, 10pt, english]{memoir}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{textcase}
\usepackage{lipsum}
\usepackage{hyperref}
\renewcommand{\cftchapterfont}{\MakeTextUppercase}
\begin{document}
\tableofcontents
\chapter{Test}
\lipsum
\end{document}
答案1
我记得\MakeUppercase
并且\MakeTextUppercase
可以轻易打破,也可以使用超链接。
在尝试修复此问题之前,我建议考虑使用小写字母形状。从排版角度来看,这比全部大写字母要好得多。此声明有效:
\renewcommand{\cftchapterfont}{\scshape}
如果确实需要,可以通过重新定义\l@chapter
负责打印章节目录条目的回忆录来解决,使用\uppercase
(\MakeTextUppercase
并且\Makeuppercase
在这里也会中断):
\makeatletter
\renewcommand*{\l@chapter}[2]{%
\l@chapapp{\uppercase{#1}}{#2}{\cftchaptername}}
\makeatother
(这次带有超链接边框,可以通过选项删除。)
答案2
这是我最终得到的这个问题来自四月份(可能想将其作为重复项关闭,或者不关闭)。在我的特定情况下,我只需要将章节标题设为大写,而保留附录标题不变。我不想保留\@chapter
或相关命令的完整副本,但如果您的代码存在多年,则无论哪种方式都有可能造成长期破坏(要么我使用的补丁会失败,要么您的旧副本\@chapter
或相关命令将无法按照新版本预期的方式工作):
\documentclass{memoir}
\usepackage{etoolbox}
\makeatletter
\ifpatchable*{\@chapter}{\typeout{Chapter can be patched}}{\typeout{Chapter cannot be patched}}
\patchcmd{\@chapter}%
{\addcontentsline{toc}{chapter}}%
{\let\f@rtocold\f@rtoc \def\f@rtoc{\uppercase\expandafter{\f@rtocold}} \addcontentsline{toc}{chapter}}%
{\typeout{Succeeded}}%
{\typeout{Failed}}
\makeatother
\usepackage{hyperref}
\begin{document}
\tableofcontents*
\chapter{One}
\chapter{Two}
\appendix \appendixpage
\chapter{Alpha}
\end{document}
由于我仍然有一些使用 PC-TeX 的用户默认没有获得 e-TeX 支持,因此我使用该ted
软件包时也有此选项。
\documentclass{memoir}
\usepackage{ted}
\makeatletter
\Substitute*[{\gdef\@chapter[##1]##2}]{\@chapter[#1]{#2}}%
{\addcontentsline{toc}{chapter}}%
{\let\f@rtocold\f@rtoc%
\def\f@rtoc{\texorpdfstring{\uppercase\expandafter{\f@rtocold}}{\f@rtocold}}%
\addcontentsline{toc}{chapter}}
\makeatother
\usepackage{hyperref}
\begin{document}
\tableofcontents*
\chapter{One}
\chapter{Two}
\appendix \appendixpage
\chapter{Alpha}
\end{document}