![如何改变“listof”标题的外观?](https://linux22.com/image/299232/%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E2%80%9Clistof%E2%80%9D%E6%A0%87%E9%A2%98%E7%9A%84%E5%A4%96%E8%A7%82%EF%BC%9F.png)
我是 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 命令时,小写字符将被接受。