本页介绍页面上下的页眉(headers)与页脚(footers),以及页码的设置方法。先看 LaTeX 内置的四种 页面样式(empty、plain、headings、myheadings),再介绍可细致控制的标准宏包 fancyhdr,最后说明设置页码格式并重置计数器的 \pagenumbering。
内置页面样式
页眉和页脚的基本外观由 页面样式 决定。在导言区写 \pagestyle{...} 是一个声明,会从该处起应用到所有页面。若只想让某一页使用不同样式,在正文中使用 \thispagestyle{...}。标准提供以下四种样式:
| 样式 | 作用 |
|---|---|
empty | 页眉和页脚都为空;不显示页码 |
plain | 页眉为空;页脚中央仅页码。article / report 的默认值 |
headings | 页脚为空;页眉显示节/章标题和页码(运行页眉)。book 的默认值 |
myheadings | 布局类似 headings,但运行页眉文字由 \markboth / \markright 自行指定 |
默认样式取决于文档类:article 和 report 使用 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]。如果一开始不清空,文档类提供的默认运行页眉可能会残留。
\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 即可隐藏横线。
\renewcommand{\headrulewidth}{0.4pt} % ヘッダー罫線(既定)
\renewcommand{\footrulewidth}{0pt} % フッター罫線を消す(既定)在运行页眉中放入章/节标题(\leftmark / \rightmark)
要把“当前章/节标题”放入运行页眉,使用 \leftmark 和 \rightmark。在 book / report 类中,\leftmark 保存 当前章标题,\rightmark 保存 当前节标题。每次处理章或节命令时它们会自动更新,因此每页都能显示“当前所在章/节”。
需要注意,标准类会把这些内容 全部转为大写。如果想保留原来的大小写,用 fancyhdr 提供的 \nouppercase 包起来。不过 \nouppercase 会取消内部所有大写化,因此可能影响页眉中的大写罗马数字等内容。
% 左に章名(大文字化を解除)、右にページ番号
\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,最好在那里指定。
% どちらか一方でよい
\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}{...} 直接设置计数器。
\frontmatter % book クラスなら前付け(これも roman に切替)
\pagenumbering{roman} % i, ii, iii … (カウンタも 1 に戻る)
% 目次・序文など
\mainmatter % 本文
\pagenumbering{arabic} % 1, 2, 3 … (再び 1 から)实际设置示例
下面是用 fancyhdr 构造常见双面版式的例子:页码在外侧,章/节标题在内侧,页眉下方有一条细线。为了避免 \headheight 警告,也稍微增大了页眉高度。
\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 样式本身。