如何改变“listof”标题的外观?

如何改变“listof”标题的外观?

我是 LaTeX 的业余用户,我正在使用在以下位置找到的模板撰写我的博士论文:PhD模板LATEX

查看 Classes/CUEDthesisPSnPDF.cls,我发现它用于fancyhdr自定义页眉和页脚。具体来说:

\pagestyle{fancy} 
\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\thechapter. #1 }}{}}    
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}   
\fancyhf{}    
\fancyhead[RO]{\bfseries\rightmark}    
\fancyhead[LE]{\bfseries\leftmark}    
\fancyfoot[C]{\thepage}    
\renewcommand{\headrulewidth}{0.5pt}    
\renewcommand{\footrulewidth}{0pt}    
\addtolength{\headheight}{0.5pt}    
\fancypagestyle{plain}{    
  \fancyhead{}    
  \renewcommand{\headrulewidth}{0pt}    
}

我已经改变了它,因为我想要具有“小型大写字母”样式和“scriptsize”大小的页眉和页脚。

问题出现在前言的页眉中(页脚没有问题),我的意思是:目录、图片列表和表格列表。在这种情况下,页眉以粗体大写字母显示,我希望文档的其余部分也采用相同的格式。

我尝试通过以下方式引入“markboth”命令来改变它:

\frontmatter    
\setcounter{secnumdepth}{3} % organisational level that receives a numbers    
\setcounter{tocdepth}{3}    % print table of contents for level 3    

\tableofcontents            % print the table of contents    
\markboth{\sc {\scriptsize \contentsname}}{\sc {\scriptsize \contentsname}}    

\listoffigures  % print list of figures    
\markboth{\sc {\scriptsize \listfigurename}}{\sc {\scriptsize \listfigurename}}

\listoftables  % print list of tables    
\markboth{\sc {\scriptsize \listtablename}}{\sc {\scriptsize \listtablename}}

... 如果列表有两页,它就可以正常工作。如果列表有两页以上,则最后两页具有所需格式,但其余页面具有原始格式。例如,如果目录有六页,则第一页没有页眉(没问题),第 2-4 页具有原始格式,第 5-6 页具有所需格式。目录和图表列表都出现这种情况(对于表格列表,我还没有遇到问题,因为目前它只有两页)。

那么...我能做什么?

我将非常感激您的帮助。谢谢。

- - - - - - - - - - - - - - - - - - - 编辑 - - - - - - - - - - - - - - - - - - - -

好的,我尝试了@Johannes_B 的建议,我的文档有所改善,但问题并没有完全解决。

具体来说,我已经修改了(使用包etoolbox):

\frontmatter
\patchcmd{\tableofcontents}{%
  {\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
}{
{\scriptsize {\sc \contentsname}}{\scriptsize {\sc \contentsname}}%
}
{}{}

\patchcmd{\listoffigures}{%
  {\MakeUppercase\listfigurename}{\MakeUppercase\listfigurename}%
}{
{\scriptsize {\sc \listfigurename}}{\scriptsize {\sc \listfigurename}}%
}
{}{}

\patchcmd{\listoftables}{%
  {\MakeUppercase\listtablename}{\MakeUppercase\listtablename}%
}{
{\scriptsize {\sc \listtablename}}{\scriptsize {\sc \listtablename}}%
}
{}{}

\setcounter{secnumdepth}{3} % organisational level that receives a numbers
\setcounter{tocdepth}{3}    % print table of contents for level 3

\tableofcontents
\listoffigures
\listoftables

对于目录,标题完全符合我的要求:字体大小和小写字母,这是一个很大的改进。但是,对于图表列表和表格列表,我没有做任何更改:标题仍然是正常大小和粗体大写字母。

有什么建议吗?谢谢。

答案1

经过一点福尔摩斯的推理能力,整个事情归结为一个非常基本的例子和一个非常直接的解决方案。模板文件使用包tocbibind将 s 和参考书目打印 \listof到目录中。 tocbibind提供了一个钩子,我们可以重新定义它而无需修补任何东西。

我定义了一个新的宏来定义外观,称为 \listheaderfont。它现在是红色的,只是为了演示。这有一个巨大的优势,所有实例都使用此宏,因此更改它会以更一致的方式更改文档。

\documentclass{book}
\usepackage{tocbibind}
\usepackage{xcolor}
%defining the apperance of the listheaders
\newcommand{\listheaderfont}{\scriptsize\normalfont\scshape\color{red}}
\renewcommand{\tocetcmark}[1]{
\markboth{\listheaderfont #1}{\listheaderfont #1}}
\usepackage{pgffor}
\begin{document}

\tableofcontents
\listoffigures
\listoftables

\begin{table}\foreach \n in {1,...,70} {\caption{}}
\end{table}
\begin{figure}\foreach \n in {1,...,70} {\caption{}}
\end{figure}

\nocite{aristotle:physics}
\bibliographystyle{plain}
\bibliography{biblatex-examples}
\clearpage Look at the header
\end{document}

我们也可以对标准类执行此操作,同样使用辅助宏。这次,没有方便的包提供我们可以使用的钩子。我们必须手动修补这些东西。

\documentclass{book}
%defining the apperance of the listheaders
\newcommand{\listheaderfont}{\scriptsize\normalfont\scshape\color{red}}

\usepackage{etoolbox}
\usepackage{xcolor}
\patchcmd{\tableofcontents}{%
    {\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
}{
    {\listheaderfont \contentsname}{\listheaderfont \contentsname}%
}
{}{}

\patchcmd{\listoffigures}{%
    {\MakeUppercase\listfigurename}{\MakeUppercase\listfigurename}%
}{
    {\listheaderfont \listfigurename}{\listheaderfont \listfigurename}%
}
{}{}

\patchcmd{\listoftables}{%
    {\MakeUppercase\listtablename}{\MakeUppercase\listtablename}%
}{
    {\listheaderfont \listtablename}{\listheaderfont \listtablename}%
}
{}{}
\usepackage{pgffor}
\begin{document}

\tableofcontents
\listoffigures
\listoftables

\begin{table}\foreach \n in {1,...,70} {\caption{}}
\end{table}
\begin{figure}\foreach \n in {1,...,70} {\caption{}}
\end{figure}


\end{document}

答案2

不涉及任何附加包的简单解决方案如下:只需重新定义\contentsname\listtablename使其包含\lowercase命令。

要获取标准名称同时保留小写标题,请使用以下定义:

\renewcommand\contentsname{C\lowercase{ontents}}
\renewcommand\listtablename{L\lowercase{ist of} T\lowercase{ables}}

当传递给 small-caps 命令时,小写字符将被接受。

相关内容