Fancyhdr 弄乱了 \backmatter

Fancyhdr 弄乱了 \backmatter

我刚刚发现,如果 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}

最后一页的页眉图像:

在此处输入图片描述

相关内容