使用 scrbook 和 fancyhdr 进行页码控制

使用 scrbook 和 fancyhdr 进行页码控制

我是否错过了指定文档类scrbook将页码放在书籍每章首页的何处的说明?


在一本包含多个章节、涉及多种复杂格式的书中,我使用scrbook,因为它支持\multiplefootmarker。我还使用fancyhdr,以便控制标题内容。

scrbookfancyhdr共存时,我遇到无法让页码在每章第一页居中显示的问题。fancyhdr将页码按需要在章节第一页后居中显示。但似乎scrbook默认将页码放在每章第一页的右下角,这似乎覆盖了fancyhdr\fancyfoot命令。下面是 MWE(\multiplefootmarker不需要实际使用 来说明问题)。


\documentclass[12pt]{scrbook} % needed for use of \multiplefootmarker (not shown)

% Fancy *headers* are only needed on pages after first of chapter.
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[RO]{Right header only needed on pages after chapter's first.}
\fancyhead[LE]{Left header only needed on pages after chapter's first.}
\fancyhead[RE,LO]{}

% But page number should be centered at bottom of every page.
\fancyfoot[C]{\thepage}

% For MWE content
\usepackage{lipsum}

\title{Book Title}

\begin{document}
  \maketitle
  \chapter{Chapter Title}
    \markboth{Right Header Text}{Left Header Text}
    \lipsum[1-12]
  \chapter{Another Chapter Title}
    \markboth{Right Header Text}{Left Header Text}
    \lipsum[1-12]
\end{document}

编辑:根据@Ulrike_Fisher的评论,我添加了一个命令

\newcommand\headrulecontrol{
  \fancypagestyle{plain}{
    \renewcommand{\headrulewidth}{0pt}\fancyhf{}\cfoot{\thepage}}
  \renewcommand{\headrulewidth}{1pt}
  }

然后对每一章进行修改,例如:

  \chapter{Chapter Title}
    \markboth{Right Header Text}{Left Header Text}
    \headrulecontrol
    \lipsum[1-12]

这很有效——页码居中,但章节第一页没有页眉规则。

答案1

正如@Ulrike 提到的,你必须plain在序言中重新定义样式:

\fancypagestyle{plain}{
    \fancyhf{}% remove all entries in header and footer
    \fancyfoot[C]{\thepage}% centred page numbers in footer
    \renewcommand{\headrulewidth}{0pt}% no headsepline on plain pages
}

设置\headrulewidth0pt页面样式plain仅影响页面上的标题规则plain

例子:

\documentclass[12pt]{scrbook} % needed for use of \multiplefootmarker (not shown)

% Fancy *headers* are only needed on pages after first of chapter.
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RO]{\rightmark}
\fancyhead[LE]{\leftmark}

% But page number should be centered at bottom of every page.
\fancyfoot[C]{\thepage}

\fancypagestyle{plain}{
    \fancyhf{}
    \fancyfoot[C]{\thepage}
    \renewcommand{\headrulewidth}{0pt}
}

\usepackage{lipsum}% For MWE content
\title{Book Title}

\begin{document}
  \maketitle
  \chapter{Chapter Title}
    \markboth{Left Header Text}{Right Header Text}
    \lipsum[1-12]
  \chapter{Another Chapter Title}
    \markboth{Left Header Text}{Right Header Text}
    \lipsum[1-12]
\end{document}

请注意,我已更改页眉条目。现在在左页(偶数页码)\leftmark使用,在右页(奇数页码)使用\rightmark。因此,您的\markboth命令可以更改页眉条目。但该\chapter命令也会设置标记。


也许你想使用包scrlayer-scrpage它是 KOMA-Script 包的一部分:

\documentclass[12pt]{scrbook} % needed for use of \multiplefootmarker (not shown)

\usepackage[
    headsepline,
    manualmark% because of your manual usage of \markboth
]{scrlayer-scrpage}
\clearpairofpagestyles
%\rohead{Right header only needed on pages after chapter's first.}
%\lehead{Left header only needed on pages after chapter's first.}
\ohead{\headmark}
\cfoot*{\pagemark}
\addtokomafont{pageheadfoot}{\normalfont}

\usepackage{lipsum} %For MWE content

\title{Book Title}
\begin{document}
  \maketitle
  \chapter{Chapter Title}
    \markboth{Left Header Text}{Right Header Text}
    \lipsum[1-12]
  \chapter{Another Chapter Title}
    \markboth{Left Header Text}{Right Header Text}
    \lipsum[1-12]
\end{document}

但您真的想手动设置标记吗?如果\chapter\section自动设置标记,请将选项更改manualmarkautomark并删除您的\markboth命令。

相关内容