当没有可用章节时,在 fancyhdr 中显示章节名称

当没有可用章节时,在 fancyhdr 中显示章节名称

以下代码仅显示标题中的部分名称。

\documentclass[12pt,a4paper,oneside]{report}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{\rightmark}

\begin{document}

\chapter{Uno}
\section{Ducks}
\lipsum

\chapter{Dos}
\lipsum

\chapter{Tres}
\section{Frogs}
\lipsum

\end{document}

但是我的一些短篇章(例如示例中的第 2 章)中没有章节。在这种情况下,页面上的标题是空的。如果没有章节,我希望章节名称出现在同一个位置。

我怎样才能实现这个目标?

请注意,我并不想同时显示章节和节。我希望优先显示节标题,如果它们不可用,则显示章节标题。

答案1

通常\chaptermark(由 调用\chapter) 仅设置\leftmark。您可以使其设置\rightmark;部分将优先于它。

\documentclass[12pt,a4paper,oneside]{report}

\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{\rightmark}
\setlength{\headheight}{14.5pt}

\makeatletter
\renewcommand{\chaptermark}[1]{%
  \markboth{}{\MakeUppercase{%
    \ifnum\c@secnumdepth>\m@ne \@chapapp \ \thechapter. \ \fi #1}}%
}
% if you don't want the word `Chapter', use the following
%\renewcommand{\chaptermark}[1]{%
%  \markboth{}{\MakeUppercase{%
%    \ifnum\c@secnumdepth>\m@ne \thechapter. \ \fi #1}}%
%}
\makeatother


\begin{document}

\chapter{Uno}
\section{Ducks}
\lipsum

\chapter{Dos}
\lipsum

\chapter{Tres}
\section{Frogs}
\lipsum

\end{document}

相关内容