我使用以下包和命令来更改论文的标题,以删除默认的大写字母并使它们看起来美观:
\documentclass[12pt, a4paper]{book}
\usepackage{fancyhdr}
\pagestyle{fancy}\addtolength{\headwidth}{20pt}
\renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection \ #1}{}}
\cfoot{}
\begin{document}
\frontmatter
\tableofcontents
\listoffigures
\listoftables
\mainmatter
\chapter{Introduction}
\chapter{Second chapter}
\end{document}
在本例中,第 1 章的标题看起来不错;但是,这些命令不会影响目录标题(也不会影响图列表和表格列表部分的标题),目录标题仍然以大写字母书写。我该如何修复这个问题?
答案1
这是因为 ToC/LoF/LoT 都明确地在设置标题时发出 a \MakeUppercase
。例如,以下是\tableofcontents
from的定义book.cls
:
\newcommand\tableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}
\listofofigures
并\listoftables
具有类似的功能。您可以通过使这些宏更强大来\MakeUppercase
限制它们的运作(\MakeUppercase
\...name
etoolbox
提供\robustify
)。也就是说,将以下内容添加到您的序言中:
\usepackage{etoolbox}
\robustify\contentsname
\robustify\listfigurename
\robustify\listtablename
如果您正在加载\usepackage[<language>]{babel}
,以下内容可能是上述解决方案的可行替代方案:
\let\oldtableofcontents\tableofcontents
\renewcommand{\tableofcontents}{{%
\let\MakeUppercase\relax
\oldtableofcontents
}}
\let\oldlistoffigures\listoffigures
\renewcommand{\listoffigures}{{%
\let\MakeUppercase\relax
\oldlistoffigures
}}
\let\oldlistoftables\listoftables
\renewcommand{\listoftables}{{%
\let\MakeUppercase\relax
\oldlistoftables
}}
目的是设置在分组调用中\MakeUppercase
不执行任何操作(\relax
)来设置 ToC/LoF/LoT。