如何使目录中的章节名称大写?

如何使目录中的章节名称大写?

除了目录中的大写章节和小节 因为这个对我来说不太好用。可以用 tocloft 包来完成吗?

答案1

更新:有关使用 hyperref 的解决方案,请参见下文。

一个选项,修补\l@section

\documentclass{article}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\l@section}{#1}{\MakeUppercase{#1}}{}{}
\makeatother

\begin{document}

\tableofcontents
\section{A test section}
\section{Another test section}

\end{document}

在此处输入图片描述

如果您的章节标题包含数学或命令(例如\label),最好\MakeTextUppercasetextcase包中使用:

\documentclass{article}
\usepackage{textcase}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\l@section}{#1}{\MakeTextUppercase{#1}}{}{}
\makeatother

\begin{document}

\tableofcontents
\section{A test section $a=b$}\label{sec:test}
\section{Another test section with a reference:~\protect\ref{sec:test}}

\end{document}

在此处输入图片描述

hyperref如果使用该包,上述解决方案将不起作用。在这种情况下,可以篡改\contentsline(这借用了海科·奥伯迪克的回答这个问题comp.text.tex):

\documentclass{article}
\usepackage{textcase}
\usepackage{hyperref}

\makeatletter
\let\oldcontentsline\contentsline
\def\contentsline#1#2{%
  \expandafter\ifx\csname l@#1\endcsname\l@section
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {%
    \oldcontentsline{#1}{\MakeTextUppercase{#2}}%
  }{%
    \oldcontentsline{#1}{#2}%
  }%
}
\makeatother
\begin{document}

\tableofcontents
\section{A test section $a=b$}\label{sec:test}
\section{Another test section with a reference:~\ref{sec:test}}

\end{document}

在此处输入图片描述

上述方法也可以使用\MakeUppercase而不是\MakeTextUppercase;如果是这样,那么textcase就没有必要了。

相关内容