LATEX 下的页面布局∗
Piet van Oostrum†
Dept. of Computer Science
Utrecht University
2001 年 8 月 12 日
摘 要
该篇文章主要描述了如何在你的 LATEX 文档中调整页面布局,也就是如何改变页边距和页面
大小、页眉页脚,以及图片或表格(统称浮动对象)的适当位置。
本文原来为 fancyheadings 宏包的文档。当然也包括其他信息,比如标记(marks)的高级使用
方法,以及处理浮动对象的方法。附带在 fancyheadings 宏包中的文档已经升级为版本2。考虑到各
个操作系统间的兼容性,宏包的名字已经改成了 fancyhdr。
使用许可:本宏包内的所有文件都可以在 LATEX Project Public License,由 LATEX 基本发行
中的 lppl.txt 文件描述,版本1或者后续版本都可以。
目 录
1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 页眉和页脚 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 fancyhdr 是什么? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 fancyhdr 的简单应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 举个简单的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 双面打印的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 重新定义 plain 样式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 默认布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 深入理解 LATEX 的标记 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 字典样式的页眉 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 Fancy 布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
4
4
5
5
6
7
7
8
11
11
12 两个书本的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
∗译者:ifuleyou,bbs.ctex.org。希望大家不吝指正,排版翻译上的错误我都要!
†这份文档中的相当一部分是由 George Gr¨atzer (University of Manitoba) 在Notices Amer. Math. Soc.撰写。
13
谢谢你,George!
1
13 浮动页面的特殊布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14 那些空白的页面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 N of M 样式的页码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16 相对于章节的页码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17 什么时候改变页眉和页脚的定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 由文本引入的页眉和页脚 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19 小电影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 书边索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 浮动对象的放置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22 多页的浮动对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
§22.1 表格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
§22.2 图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 联系信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
15
15
16
16
17
20
20
20
24
24
24
25
1 简介
在 LATEX 文档中,页面是由各种不同的元素组合而成,如插图1 所示。 Body 中包含了文
档的正文以及浮动对象(表格和图片)。
整个页面是由 LATEX 的输出过程 (Output Routine) 来构造的,该输出过程很复杂,因此不
宜对其进行修改。本文中所描述的一些宏包对输出过程进行了少许的修改以便达到一些其他方
法所无能为力的效果。你最好使用这些宏包而尽量避免自己去盲目修改输出过程。
有些东西必须在这里向你说明一下:
1. 左边距不叫 \leftmargin,而是 \evensidemargin(偶数页面中)和 \oddsidemargin (奇
数页面中)。在单面的文档中,\oddsidemargin就代表了两种边距。\leftmargin 也是个
LATEX 命令,但它有不同的含义(就是列表的缩进距离)。
2. 大部分参数不适合在文档中间进行修改,而另一些修改可能在分页的时候有效果。如果你
只想改变该页的高度,你可以使用 \enlargethispage命令。
边注区(margin notes area)包含了一小段由命令 \marginpar 所生成的文本。在双开面的
文档中,边注区交替出现在左右两边。边注区的位置并不根据页面大小而固定不变,而是和边
注所在的段落具有差不多的高度。由于计算边注区位置的算法的关系,在双开面的文档中,如
果边注比较靠近分页的地方,那么它很可能会出现在错误的那一边。如果你想在特定的地方放
置你的边注,你可以参考 19 节或是 20 节中的内容。
本文的第一部分将描述如何改变页眉以和页脚区,而最后一部分将描述如何将你的浮动对
象放置在想要的地方。
2
i4
?
6
i5
?
6
Header
?i6
6
Body
i8
Footer
-i3
i1 -
i11
?
6
6
i7
i2
6
?
Margin
Notes
-i9
i10 -
-
?
1
3
5
7
9
one inch + \hoffset
\oddsidemargin = 18pt
\headheight = 12pt
\textheight = 663pt
2
4
6
8
one inch + \voffset
\topmargin = 0pt
\headsep = 25pt
\textwidth = 424pt
\marginparsep = 11pt
10
\marginparwidth = 54pt
11
\footskip = 30pt
\marginparpush = 5pt (not shown)
\hoffset = 0pt
\voffset = 0pt
\paperwidth = 597pt
\paperheight = 845pt
图 1: 页面元素。这些数值仅仅反映本文档中的元素,并不代表默认的值。
3
2 页眉和页脚
在 LATEX 中,页眉和页脚的样式是由命令 \pagestyle 和 \pagenumbering 来定义的。
\pagestyle命令定义了页眉和页脚的基本内容(如页码出现在哪里),而 \pagenumbering 则
定义了页码的显示方式。LATEX 本身包含四种标准的页面样式。
empty
plain
没有页眉也没有页脚
没有页眉,页脚包含一个居中的页码
没有页脚,页眉包含章/节或者子节的名字和页码
headings
myheadings 没有页脚,页眉包含有页码和用户提供的其他信息
尽管这些样式相当有用,但功能比较有限。其他页面样式可以通过 \ps@xxx这些命令来定
义。当文档中遇到命令 \pagestyle{xxx}时,这些定义被执行。命令 \ps@xxx 应该为页眉和页
脚定义如下命令:
\@oddhead 双开面文档中,奇数页面的页眉(单开面中为所有页面的页眉)
\@evenhead 双开面文档中,偶数页面的页眉
\@oddfoot 双开面文档中,奇数页面的页脚(单开面中为所有页面的页脚)
\@evenfoot 双开面文档中,偶数页面的页脚
这些并不是命令,而是 LATEX 的输出过程所使用的“变量”。这些含有字符 ‘@’ 的命令或变
量最好只出现在宏包中,或者位于命令 \makeatletter 和 \makeatother 之间。
命令 \pagenumbering 定义了页码的形式。它带有一个参数,为以下几种之一:
arabic 阿拉伯数字
roman 小写的罗马数字
Roman 大写的罗马数字
alph
小写字母
大写字母
Alph
命令 \pagenumbering{xxx} 定义了另外一个命令 \thepage ,使得该命令扩展之后成为
xxx 的形式。然后 \pagestyle 命令便将 \thepage 放在适当的位置。另外,\pagenumbering
命令同时也将把页码重置为1。\pagestyle 和 \pagenumbering 将影响到当前正在构建的页面,
因此最好将它们放在想要它们起作用的页面的位置上(参考 17 节)。
3 fancyhdr 是什么?
宏包 fancyhdr 可以让你方便地调整 LATEX 文档中的页眉和页脚。你可以定义:
• 三部分组成的页眉和页脚
• 页眉和页脚中的修饰线
• 可以比正文更宽的页眉和页脚
• 多行的页眉和页脚
• 对应于奇数和偶数页面不同的页眉和页脚
• 章节起始页的页眉和页脚可以和其他页面不同
• 包含浮动对象的页面其页眉和页脚可以和其他页面不同
当然,你完全可以对字体、大小写等进行控制。
4
4 fancyhdr 的简单应用
在 LATEX 2ε 文档中使用该宏包,你必须将文件fancyhdr.sty 放在 TEX 可以找到的目录或
文件夹内(通常在输入目录),然后在你的导言区
\documentclass{...}
后加入命令1:
\usepackage{fancyhdr}
\pagestyle{fancy}
我们看到通过 fancyhdr 构造的页面如下:
LeftHeader
CenteredHeader
RightHeader
page body
LeftFooter
CenteredFooter
RightFooter
LeftHeader 和 LeftFooter 为居左对齐;CenteredHeader 和 CenteredFooter 居中;而 Right-
Header 和 RightFooter 居右对齐。
六个部分和两条修饰线可以各自单独定义。
5 举个简单的例子
K. Grant 正在给校长 A. Smith 写一份报告,是关于“新毕业学生的表现”,他采用了如下
的页面布局:
新毕业学生的表现
page body
From: K. Grant
To: Dean A. Smith
3
“3”是页码,标题“新毕业学生的表现”为黑体。
这些效果是由 \pagestyle{fancy}2 之后的这些命令所获得:
\lhead{}
\chead{}
\rhead{\bfseries 新毕业生的表现}
1对于LATEX2.09版本,你必须在命令 \documentstyle 中指定使用 [fancyhdr] 而不是用 \usepackage 命令。
2注意:在 fancyheadings 的版本1中,是通过 \setlength 来改变 \...rulewidth 参数的。
5
\lfoot{From: K. Grant}
\cfoot{To: Dean A. Smith}
\rfoot{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
(命令 \thepage 用于显示当前页码,而 \bfseries 是 LATEX 2ε 用于选择黑体的命令3)
看上去挺不错,但第一页显然不需要这些页眉和页脚。在 \begin{document} 之后而在
\maketitle 命令之前敲入下面的命令来去掉页眉和页脚中其他内容而只保留页码:
\thispagestyle{plain}
或者
\thispagestyle{empty}
如果你什么也不想要的话。
实际上,LATEX 命令 \maketitle 中已经定义了命令 \thispagestyle{plain}。因此,如果
你坚持要在 \maketitle 生成的页面上使用 fancy 的布局,你必须在 \maketitle 之后马上发
出\thispagestyle{fancy} 的指示。
6 双面打印的例子
一些文档类如 book.cls,默认为双面排版:单双数页面有不同的布局。另外一些文档类通
过选项 twosides 来取得双面效果。
现在我们用双面重新排版报告,上面一节中的布局留给奇数页面,而对于偶数页面(左页
面)采用如下布局:
新毕业生的表现
4
“4”为页码。
下面是相应的命令:
page body
From: K. Grant
To: Dean A. Smith
\fancyhead{} % clear all fields
\fancyhead[RO,LE]{\bfseries 新毕业生的表现}
\fancyfoot[LE,RO]{\thepage}
\fancyfoot[LO,CE]{From: K. Grant}
\fancyfoot[CO,RE]{To: Dean A. Smith}
\renewcommand{\headrulewidth}{0.4pt}
3译者:在 CJK 中可以直接用 \bfseries 来改变中文字体,而在 CCT 中则需要 \ziti 来完成。
6
E 偶数页
O 奇数页
L 居左内容
C 居中内容
R 居右内容
H 页眉
F 页脚
图 2: Selectors
\renewcommand{\footrulewidth}{0.4pt}
我们使用了更通用的命令 \fancyhead 和 \fancyfoot。这两个命令可以通过参数指定奇/偶
数页的页眉/页脚的哪个部分采用何种格式。其中,第一个命令忽略了这些参数,从而指定为针
对任何页眉。通常,这在覆盖默认或者之前定义的时候比较有用。方括号中的选择参数由图 2
列出。选择参数可以组合,比如 \fancyhead[LE,RO]{text} 就定义了偶数页的左页眉和奇数页
的右页眉。如果你没有给出 E 或 O 则将针对所有页面。对于 LRC 也是同样道理。因此前面的
\lhead 只是 \fancyheadd[L] 命令的缩写罢了。选择参数并不区分大小写。
更通用一点,通过选择参数H (header) 和 F (footer) 命令 \fancyhf 可以让你同时指定页眉
和页脚。实际上,\fancyhead 和 \fancyfoot 也不过是指定了 H 和 F 的 \fancyhf 命令而已。
再说一句,你可以通过 \thispagesytle{plain} 来定义第一页的简单布局。
7 重新定义 plain 样式
一些 LATEX 命令,像 \chapter,使用命令 \thispagestyle 来切换到 plain 样式,因此
你自己定义的样式不起作用。要调整这种页面的布局,你必须重新定义 plain 样式。正如开
头说的那样,你可以重新定义\ps@plain 命令,但 fancyhdr 提供了一种更简单的方法。命令
\fancypagestyle 可以重新定义现有的页面样式(如 plain)或者新的页面样式,它有两个参数:
第一个是定义的页面样式的名字,第二个参数包含了改变页眉页脚的那些命令,如 fancyhead
等。同样,\headrulewidth 和 \footrulewidth 也可以改变。举个例子,我们为 6节中的报告重
新定义 plain 样式,使得其页码为黑体:
\fancypagestyle{plain}{%
\fancyhf{} % clear all header and footer fields
\fancyfoot[C]{\bfseries \thepage} % except the center
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
8 默认布局
如果我们只使用 book.cls 文档类以及 fancyhdr 的默认设置,则只需要如下命令:
\usepackage{fancyhdr}
\pagestyle{fancy}
7
fancyhdr 将会包揽全部工作。在新的一章开始的页面上,页码出现在页脚的中间,没有页
眉也没有修饰线。
在偶数页面上,我们有如下布局:
1.2 EVALUATION
CHAPTER 1. INTRODUCTION
page body
4
在奇数页面上,我们得到:
CHAPTER 1. INTRODUCTION
1.2 EVALUATION
page body
3
页眉的文字大写并倾斜
默认的布局由下面的命令构成:
\fancyhead[LE,RO]{\slshape \rightmark}
\fancyhead[LO,RE]{\slshape \leftmark}
\fancyfoot[C]{\thepage}
修饰线则为如下的设置:
\headrulewidth
\footrulewidth
0.4pt
0 pt
在 book.cls 中,页眉的文字被转变成大写形式。
9 深入理解 LATEX 的标记
通常,对于 book 或者 report 来说,你可能会把章节的信息反映在页眉上(对于单面打印
可能只需要章次的信息),以及对于 article 文档类的节和子节(对于单面打印只需要节次的
信息)。LATEX 使用标记(mark)的机制来记录章节信息,在 LATEX Companion 4.3.1节中有详细
描述。
有两种方法可以改变高层的或低层4 的章节信息,下面两个命令 \leftmark (高层)和
\rightmark(低层)记录了 LATEX 所要处理的信息。你可以如 8 节中描述的那样直接使用这两
4译者:原文为 higher-level lower-level 是相对于章节的层次结构而言的,这里翻译得不到位(有点像法
轮功术语)
8