资源
本文介绍了如何使用 fancyhdr 宏包来设定文章的页眉页脚。本文以 \LoadClass[a4paper,twoside,openright]{ctexrep}
模板为例( A4 纸张,双面排版,章节在奇数页开始),介绍了页眉页脚的设置过程。在本例中共设计了三种样式的页眉页脚,分别应用到正文之前、正文和附录中。
1 LaTeX 预定义页面风格介绍
在介绍 fancyhdr 宏包的使用之前,我们先了解一下 LaTeX 预定义的页面风格(page style)。Latex 预定义了以下几种页眉页脚的页面风格:
- empty 没有页眉页脚;
- plain 没有页眉,页脚是居中的页码;
- heading 没有页脚,页眉是章节名称的页码;
- myheading 没有页脚,页眉是页码和用户自定义的内容。
可以使用 \pagestyle{<风格>}
设置整体页面风格,也可以用 \thispagestyle{<风格>}
单独设置当前页的风格。book 类默认使用 heading 风格,report 和 article 默认使用 plain 风格,中文的几个 ctex 文档类则都默认使用 heading 风格。
LaTex 已经对一些必要的地方自动设置好了页面风格。如在标题页(包括手工或自动由 \maketitle
生成的 titlepage 环境),会使用 empty 风格禁用所有页眉页脚;而在不单独成页的 \maketitle
,单独成页的 \part
,以及 \chapter
命令所在的一页,则使用 plain 风格。
上面内容引自刘海洋——《LaTeX入门》。
2 基本应用
fancyhdr 宏包提供了新的页面风格 fancy ,我们可以通过 fancy 风格来设置我们的页眉页脚。页眉页脚的设置一般都放在导言区或文档类模板中。本文的例子中所有的代码都是放置到自定义的文档类模板中,因此使用的包加载命令为 \RequirePackage
,但效果和 \usepackage
是一样的。首先我们先使用 \RequirePackage{fancyhdr}
或 \usepackage{fancyhdr}
命令引入 fancyhdr 宏包。
fancyhdr 将页面布局分成如下几个部分:
可以看到由页面页脚左中右共6个部分组成,考虑到双面文档的奇数页和偶数页则共有12个部分。另外还有2个装饰性的分割线。下面是一个常用的使用示例:
\pagestyle{fancy}
\fancypagestyle{preContent}{
\fancyhead{}
\renewcommand\headrulewidth{0pt}
\fancyfoot[C]{\thepage}
}
fancyhdr 提供了多个命令都可以达到相同的设置效果。上面使用的是较为方便和常用的命令。首先设定了页面风格为 fancy,然后定义了一种名为 preContent 的页面风格:
-
\fancyhead{}
由于里面没有任何参数,所以这条命令用来清空所有的页眉设置。 -
\renewcommand\headrulewidth{0pt}
取消页眉中的装饰分割线。 -
\fancyfoot[C]{\thepage}
在页脚居中位置添加页码。
定义好 pagestyle 之后,我们就可以在任何需要的位置使用 preContent 风格了,如下代码表示使用 preContent 风格并使用罗马数字设置页码。
\pagestyle{preContent}
\pagenumbering{Roman}
这也是常用在正文之前的页面风格。
2 命令介绍及高级应用
2.1 命令介绍
前面通过一个简单的序言页面风格设置我们应该已经大体的了解到了 fancyhdr 宏包的使用。下面对其中常用的命令和参数进行介绍。
前面我们用
\fancyhead{}
命令清除页眉设置,如果想清除页脚设置可以使用\fancyfoot{}
命令,如果想同时清除页眉页脚设置可以使用\fancyhf{}
。前面我们用
\renewcommand\headrulewidth{0pt}
来清除页眉中的分割线,如果想清除页脚中的分割线可以使用\renewcommand\footrulewidth{0pt}
。前面设置页脚时,使用到了
C
可选参数,完整的可选参数如下:
参数 | 意义 | 分组 |
---|---|---|
E | 偶数页 | 1 |
O | 奇数页 | 1 |
L | 左区域 | 2 |
C | 中间区域 | 2 |
R | 右区域 | 2 |
H | 页眉 | 3 |
F | 页脚 | 3 |
这些参数应用在 \fancyhead{},\fancyfoot
{} 和 \fancyhf{}
命令中。其中第三组参数只应用在 \fancyhf{}
命令中。通常我们只用 \fancyhf{}
命令来清空页眉页脚,而真正的设置都是使用带前两组参数的 \fancyhead{}
和 \fancyfoot{}
来完成。
下面的代码用来设置正文的页面样式:
\fancypagestyle{mainFancy}{
\fancyhf{}
\renewcommand\headrulewidth{.5pt} % 页眉横线
\renewcommand\footrulewidth{0pt}
\fancyhead[OC]{\fzkai{\leftmark}} % 页眉章标题
\fancyhead[EC]{\fzkai{\@title}} % 页眉文章题目
\fancyhead[OR,EL]{\thepage} % 页眉编号
\fancyfoot[r]{\thumb} % 将拇指放到没有被使用的页眉或页脚处
}
可以看到不同组的参数在使用过程中可以进行组合,如 OR
表示奇数页右区域,EL
表示偶数页左区域。而 \fancyhead[OR,EL]{\thepage}
表示页眉的奇数页右侧和偶数页左侧放置页码。
2.2 附加说明
最后一行在页脚的右侧放置了一个拇指索引,这个拇指索引的定义参考了 《LaTeX入门》的拇指索引 的内容。拇指的定义应该放到上面的代码前面,定义如下:
\RequirePackage{fancyhdr}
\RequirePackage{zhnumber}
\RequirePackage{titlesec, titletoc}
\RequirePackage{tikz,pgf}
\usetikzlibrary{shapes,calc}
% 参考:http://www.latexstudio.net/archives/8967.html
% 拇指
\newcommand\thumb{%
\if@mainmatter
\begingroup
\catcode`\$=3
\tikzpicture[remember picture,overlay] % thumb index
\ifodd\value{page}
\node[fill=gray,text=black,anchor=north east,xshift=2mm,
yshift=-22mm-\arabic{chapter}*20mm,
shape=semicircle,shape border rotate=90,
minimum height=10mm,minimum width=5mm,
font=\normalfont\sffamily\bfseries\Huge]
at (current page.north east)
{\llap{\arabic{chapter}\hspace{1mm}}};
\else
\node[fill=gray,text=black,anchor=north west,xshift=-2mm,
yshift=-22mm-\arabic{chapter}*20mm,
shape=semicircle,shape border rotate=270,
minimum height=10mm,minimum width=5mm,
font=\normalfont\sffamily\bfseries\Huge]
at (current page.north west)
{\rlap{\hspace{1mm}\arabic{chapter}}};
\fi
\endtikzpicture
\endgroup
\fi}
这个拇指会自动的在非装订侧产生(奇数页右侧,偶数页左侧),并且每一章会依次向下错开。就像我们可以在字典的侧面定位到不同首字母一样,通过这个拇指我们可以从侧面定位到指定的章节。效果如下:
事实上这个拇指我们可以放到任何未被使用的页眉页脚区域,效果是一样的。这里放到页脚的右侧是因为这个区域没有被使用。
这个拇指的设置不属于本文所讨论的内容,因此不会使用也没有关系,可以直接跳过这个部分。
2.3 文档中页面风格切换
最后我们再定义一个附录的页眉页脚样式如下:
\fancypagestyle{appendixFancy}{
\fancyhf{}
\renewcommand\headrulewidth{.5pt}
\renewcommand\footrulewidth{0pt}
\fancyhead[OC]{\fzkai{\leftmark}} % 页眉章标题
\fancyhead[EC]{\fzkai{\@title}} % 页眉文章题目
\fancyhead[OR,EL]{\thepage} % 页眉编号
}
附录的页眉页脚样式和正文中的基本一样,只是去掉了页面中的拇指。这是因为我们在附录章节一般会使用 \appendix
命令来清除章节编号,如果这时候使用拇指的话会出现章节为0的拇指,这并不符合我们的需求。
在文档中进行风格切换依然使用的是 \pagestyle{}
命令,如文档的开始使用 \pagestyle{preContent}
设置前言的页面风格,正文之前使用 \pagestyle{mainFancy}
设置正文页面风格,附录之前使用 \pagestyle{appendixFancy}
设置附录的页面风格。一般情况下我们会同时修改附录的标题样式,所以更常用的做法是将 \pagestyle{appendixFancy}
和标题样式的设置组合到一个新的命令中,如下所示:
%% Appendix Chapter 标题及页眉页脚样式
\newcommand{\AppendixChapter}{
\pagestyle{appendixFancy} % 附录页眉页脚格式
\titleformat{\chapter}
[display]
{\CJKfamily{fzkai}\Large \filcenter}
{}
{1ex}
{\Huge}
[{\titlerule[2pt]}]
}
这样在正文中使用 \AppendixChapter
命令就可以同时切换页面风格和标题样式了,关于 \titleformat{}
命令设置标题样式可以参考 latex 标题、段落及行距 。
3 附加说明
- 前面第一节我们提到了,在单独成页的 chapter 这一页。会自动应用
plain
风格。因此如果希望改变章首页的样式,则应该定义plain
样式。这部分内容请参考 fancyfoot different on first page of new chapter 。如:
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[C]{\sffamily\thepage}
\renewcommand{\headrulewidth}{0pt}
}
- 如果我们想在页眉或页脚上只显示节编号而不显示章编号,如显示
3 软件介绍
而不是1.3 软件介绍
则可以参考 Get sectionmark in fancyhdr without chapter number 。如:
\documentclass{book}
\usepackage[a6paper]{geometry}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\arabic{section}.\ #1}}
\lhead[\thepage]{\leftmark}
\rhead[\nouppercase{\rightmark}]{\thepage}
\begin{document}
\chapter{Test chapter}
\section{Test section}
\lipsum[1-4]
\end{document}
效果如下:
可以看到图中页眉右侧显示的是 1.Test section
而不是 1.1 Test section
。