我刚刚发现,如果 fancyhdr 必须提及位于 \backmatter 中的章节,它会通过使用最后一章的编号来对其进行编号来实现。
例如,这个:
\documentclass[11pt, a4paper, oneside]{book}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\begin{document}
\mainmatter
\chapter{asd}
\lipsum
\chapter{asd2}
\lipsum
\chapter{asd3}
\lipsum
\backmatter
\chapter{conclusions}
\lipsum
\end{document}
最终在最后一页的右上角写上了“第 3 章:结论”。首先,这是第四章,但由于我们在 \backmatter 中,所以本章根本不应该被编号。
所以我想要做的是纠正这个问题,以便 fancyhdr 仅针对 \backmatter 中的章节,不会写“CHAPTER X:”,而只写章节的名称。
我发现这其他解决方案,但提出的两个选项都以正常字体而不是大写字体结尾。我尝试在第一个提出的代码的各个地方使用 \MakeUppercase 和 \textsc 将所有内容设置为大写,但我到处都遇到错误,所以我仍然想知道如何做到这一点。
感谢所有帮助过我的人 ;)
答案1
粗略地说,fancyhdr
定义\chaptermark
使用
\def\chaptermark#1{\markboth {\MakeUppercase{\ifnum \c@secnumdepth>\m@ne
\@chapapp\ \thechapter. \ \fi #1}}{}}:
仅检查 的值secnumdepth
以决定是否将“章节号”添加到标记。然后,您需要执行额外的测试并在章节中使用此定义\mainmatter
,并执行另一项测试,删除不在该\mainmatter
部分中的章节的“章节号”:
\makeatletter
\renewcommand\chaptermark[1]{
\markboth{\MakeUppercase{%
\ifnum\c@secnumdepth>\m@ne\if@mainmatter
\@chapapp\ \thechapter. \ \fi\fi #1}}{}%
}
\makeatother
使用小型大写字母的完整示例:
\documentclass[11pt, a4paper, oneside]{book}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\makeatletter
\renewcommand\chaptermark[1]{
\markboth{\textsc{%
\ifnum\c@secnumdepth>\m@ne\if@mainmatter
\@chapapp\ \thechapter. \ \fi\fi #1}}{}%
}
\makeatother
\begin{document}
\mainmatter
\chapter{asd}
\lipsum
\chapter{asd2}
\lipsum
\chapter{asd3}
\lipsum
\backmatter
\chapter{Conclusions}
\lipsum
\end{document}
最后一页的页眉图像: