尝试使用tocloft
包来定制目录,但是在使用\MakeUppercase
或\uppercase
使用某些命令时遇到错误,即\cftsecfont
。
当我运行以下代码时,出现错误,提示缺少或多余}
s。当我\MakeUppercase
用替换时也会出现类似的错误\uppercase
。如果我完全删除该命令,它将运行而不会出现任何错误。
\documentclass{article}
\usepackage{tocloft}
\begin{document}
\renewcommand{\cftsecfont}{\bfseries\MakeUppercase}
\tableofcontents
\section{Section One}
\subsection{Subsection}
\section{Section Two}
\end{document}
使用等时会出现类似错误\cftsubsecfont
。我做错了什么?
答案1
您可以修补\l@section
(和朋友)宏 - 它们负责设置目录中的章节/小节标题 - 到\MakeUppercase
它收到的第一个参数(其中包括编号和标题):
\documentclass{article}
\usepackage{tocloft,etoolbox}% http://ctan.org/pkg/{tocloft,etoolbox}
\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\l@section}{#1}{\MakeUppercase{#1}}{}{}% Sections use UPPERCASE in ToC
\patchcmd{\l@subsection}{#1}{\MakeUppercase{#1}}{}{}% Subsections use UPPERCASE in ToC
\makeatother
\begin{document}
\tableofcontents
\section{Section One}
\subsection{Subsection}
\section{Section Two}
\end{document}
上述补丁是根据\l@section
(和朋友)的构造建议的(来自tocloft.dtx
):
\renewcommand*{\l@section}[2]{%
\ifnum \c@tocdepth >\z@
% <snip>
{\cftsecfont #1}\nobreak
\cftsecfillnum{#2}}%
\fi}
补丁之后,\l@section
类似于
\renewcommand*{\l@section}[2]{%
\ifnum \c@tocdepth >\z@
% <snip>
{\cftsecfont \MakeUppercase{#1}}\nobreak
\cftsecfillnum{#2}}%
\fi}
强制设置大写标题。