精美的包装和内容标题

精美的包装和内容标题

我使用以下包和命令来更改论文的标题,以删除默认的大写字母并使它们看起来美观:

\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。例如,以下是\tableofcontentsfrom的定义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\...nameetoolbox提供\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。

相关内容