除了目录中的大写章节和小节 因为这个对我来说不太好用。可以用 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
),最好\MakeTextUppercase
从textcase
包中使用:
\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
就没有必要了。