页眉、页脚与页码

本页介绍页面上下的页眉(headers)与页脚(footers),以及页码的设置方法。先看 LaTeX 内置的四种 页面样式emptyplainheadingsmyheadings),再介绍可细致控制的标准宏包 fancyhdr,最后说明设置页码格式并重置计数器的 \pagenumbering

内置页面样式

页眉和页脚的基本外观由 页面样式 决定。在导言区写 \pagestyle{...} 是一个声明,会从该处起应用到所有页面。若只想让某一页使用不同样式,在正文中使用 \thispagestyle{...}。标准提供以下四种样式:

样式作用
empty页眉和页脚都为空;不显示页码
plain页眉为空;页脚中央仅页码。article / report 的默认值
headings页脚为空;页眉显示节/章标题和页码(运行页眉)。book 的默认值
myheadings布局类似 headings,但运行页眉文字由 \markboth / \markright 自行指定

默认样式取决于文档类:articlereport 使用 plain(页码在下方居中),book 使用 headings(带运行页眉)。需要记住一个例外:包含 \maketitle\part\chapter 的页面会自动应用 \thispagestyle{plain}。因此即使设置了 \pagestyle{empty},章开始页仍会在下方居中显示页码;若也想去掉它,在 \chapter 后立即写 \thispagestyle{empty}

headings 运行页眉的内容也由类决定。在 book / report(双面)中,左页显示章标题,右页显示节标题;在 article(单面)中,每页显示节标题和页码。选择 myheadings 后,可以用 \markboth{左页}{右页}(双面)或 \markright{右页} 自行提供这些字符串。

这些内置样式很方便,但无法实现“左侧文档名、右侧页码”这样的自由布局。此时就使用下面的 fancyhdr

fancyhdr 宏包

fancyhdr 是自由构造页眉和页脚的标准宏包(Piet van Oostrum 编写)。加载宏包并声明 \pagestyle{fancy} 后,页眉和页脚各有 左(L)、中(C)、右(R)三个位置,总共六个槽位 可用。

常用写法是先用 \fancyhf{} 清空六个槽位,然后只设置需要的位置。页眉用 \fancyhead[L]{...} / [C] / [R],页脚用 \fancyfoot[L]{...} / [C] / [R]。如果一开始不清空,文档类提供的默认运行页眉可能会残留。

latex
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}                 % 6 つのスロットを全消去
\fancyhead[L]{文書のタイトル}  % ヘッダー左
\fancyhead[R]{\thepage}      % ヘッダー右にページ番号
\fancyfoot[C]{\today}       % フッター中央に日付

在双面(twoside)文档中,为了让跨页版式对齐,会把位置与 偶数页(E)/ 奇数页(O) 组合。[LE,RO] 表示“偶数页左侧、奇数页右侧”,是把页码放在外侧(小口侧)的经典指定。不带 E/O[L] 等,即使在双面文档中也会在两种页面上放同样内容。

页眉下方和页脚上方横线的粗细由 \headrulewidth\footrulewidth 控制。默认值是页眉线 0.4pt,页脚线 0pt(无线)。可用 \renewcommand 改变粗细,设为 0pt 即可隐藏横线。

latex
\renewcommand{\headrulewidth}{0.4pt}  % ヘッダー罫線(既定)
\renewcommand{\footrulewidth}{0pt}    % フッター罫線を消す(既定)

在运行页眉中放入章/节标题(\leftmark / \rightmark)

要把“当前章/节标题”放入运行页眉,使用 \leftmark\rightmark。在 book / report 类中,\leftmark 保存 当前章标题\rightmark 保存 当前节标题。每次处理章或节命令时它们会自动更新,因此每页都能显示“当前所在章/节”。

需要注意,标准类会把这些内容 全部转为大写。如果想保留原来的大小写,用 fancyhdr 提供的 \nouppercase 包起来。不过 \nouppercase 会取消内部所有大写化,因此可能影响页眉中的大写罗马数字等内容。

latex
% 左に章名(大文字化を解除)、右にページ番号
\fancyhead[L]{\nouppercase{\leftmark}}
\fancyhead[R]{\thepage}

“headheight is too small” 警告

使用 fancyhdr 时,可能出现 Package fancyhdr Warning: \headheight is too small 警告。这表示容纳页眉的盒子高度 \headheight 对你放入的内容(横线、多行页眉等)来说不够。结果可能导致页眉过于靠近正文,甚至侵入正文区域。

修正方法有两种,任选其一即可。可以用 \setlength{\headheight}{...} 直接增大,也可以通过 geometry 宏包的 headheight= 选项设置。后者会与整体版面计算保持一致,因此如果已经使用 geometry,最好在那里指定。

latex
% どちらか一方でよい
\setlength{\headheight}{15pt}        % 直接広げる
% または geometry 側で
\usepackage[headheight=15pt]{geometry}

页码格式(\pagenumbering)

页码的 格式\pagenumbering{...} 切换。主要可用参数如下。默认是阿拉伯数字(arabic),从 1 开始。

参数输出
arabic阿拉伯数字:1, 2, 3 …(默认)
roman小写罗马数字:i, ii, iii …
Roman大写罗马数字:I, II, III …
alph小写字母:a, b, c …(最多 26 页)
Alph大写字母:A, B, C …(最多 26 页)

关键在于,\pagenumbering 在改变格式时 也会把页码计数器重置为 1。书籍常利用这一点:前置部分用小写罗马数字从 i 开始编号,正文开始时切换到 \pagenumbering{arabic} 并从 1 重新计数。当前页码本身可用 \thepage 取得;若要强制指定某个页码,可用 \setcounter{page}{...} 直接设置计数器。

latex
\frontmatter % book クラスなら前付け(これも roman に切替)
\pagenumbering{roman}    % i, ii, iii … (カウンタも 1 に戻る)
% 目次・序文など
\mainmatter  % 本文
\pagenumbering{arabic}   % 1, 2, 3 … (再び 1 から)

实际设置示例

下面是用 fancyhdr 构造常见双面版式的例子:页码在外侧,章/节标题在内侧,页眉下方有一条细线。为了避免 \headheight 警告,也稍微增大了页眉高度。

document.tex
\documentclass[twoside]{book}
\usepackage[headheight=15pt]{geometry}
\usepackage{fancyhdr}

\pagestyle{fancy}
\fancyhf{}                              % まず全消去
\fancyhead[LE,RO]{\thepage}             % 外側にページ番号
\fancyhead[RE]{\nouppercase{\leftmark}}  % 偶数ページ右=章名
\fancyhead[LO]{\nouppercase{\rightmark}} % 奇数ページ左=節名
\renewcommand{\headrulewidth}{0.4pt}    % ヘッダー罫線
\renewcommand{\footrulewidth}{0pt}     % フッター罫線なし

\begin{document}
\chapter{はじめに}
\section{背景}
本文がここに入ります。柱に章・節名とページ番号が出ます。
\end{document}

在这个例子中,章开始页(含 \chapter 的页面)会如前所述自动变成 plain,因此只有那一页没有运行页眉,并在下方居中显示页码。若也想让该页符合 fancy 外观,可用 fancyhdr\fancypagestyle{plain}{...} 重新定义 plain 样式本身。