LaTeX
LaTeX 页眉和页脚
在 LaTeX 中,“页面样式”通常指的是文档中的运行页眉和页脚。这些页眉通常包含文档标题、章节或节标题以及页码。
标准页面样式
在普通的 LaTeX 中,修改页眉的可能性其实是相当有限的。可用的命令有两个:
-
\pagestyle{style}
:此命令会将指定的样式应用于当前页面及所有后续页面。 -
\thispagestyle{style}
:此命令仅影响当前页面。
可以使用以下样式:
-
empty
:清空页眉和页脚。 -
plain
:页眉为空,页脚在中间显示页码。 -
headings
:页脚为空,页眉根据文档类显示信息(例如章节名),并在右上角显示页码。 -
myheadings
:页码位于右上角,可以控制页眉的其余部分。
使用 \markright
和 \markboth
可以手动设置页眉的内容。以下代码会将所有页面(单面)页眉设置为 "John Smith" 左对齐,"On page styles" 居中,页码右对齐:
\pagestyle{myheadings}
\markright{John Smith\hfill On page styles\hfill}
LaTeX 提供了几种特别的命令来显示文档当前页面的内容:
-
\thepage
:当前页面的页码。 -
\leftmark
:当前章节名称,例如 "CHAPTER 3. THIS IS THE CHAPTER TITLE"。 -
\rightmark
:当前节名称,例如 "1.6. THIS IS THE SECTION TITLE"。 -
\chaptername
:当前语言中的“章节”名称,如果是英文,将显示 "Chapter"。 -
\thechapter
:当前章节编号。 -
\thesection
:当前节编号。
需要注意的是,\leftmark
和 \rightmark
会将章节和节名称转换为大写字母。如果你希望它们不转换为大写字母,可以使用以下命令:
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{#1}{}}
现在,\leftmark
和 \rightmark
将仅显示章节和节名称,不带数字且不改变格式。
标准的书籍格式中,\chaptermark
的定义是:
\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\chaptername\ \thechapter.\ #1}}{}}
页眉和页脚的线条定制
你还可以定义页眉和页脚装饰性线条的粗细:
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
这设置了页眉和页脚线条的粗细。将其设置为零意味着没有线条。
简单页面问题
需要注意的是,主要的章节命令(如 \part
、\chapter
或 \maketitle
)会自动设置 \thispagestyle{plain}
。因此,如果你在文档开头插入 \pagestyle{empty}
,每个章节的样式命令将覆盖初始规则,仅对那些页面生效。为实现预期的效果,你可以在章节命令后加上 \thispagestyle{empty}
。然而,\part
命令不能这样修复,因为它会设置页面样式并跳转到下一页,因此无法应用 \thispagestyle{}
。
有两种解决方案:
-
在文档导言中添加
\usepackage{nopageno}
。这个包会使\pagestyle{plain}
的效果与\pagestyle{empty}
相同,从而有效地抑制页码显示。 -
使用
fancyhdr
包,如下所述。
使用 fancyhdr
自定义页眉和页脚
为了更好地控制页眉,可以使用由 Piet van Oostrum 编写的 fancyhdr
包。该包提供了几个命令,可以让你自定义文档的页眉和页脚。有关更完整的指南,请参考该包的文档。
开始使用时,首先在导言中添加以下代码:
\usepackage{fancyhdr}
\setlength{\headheight}{15.2pt}
\pagestyle{fancy}
现在你可以观察到文档中应用了新的页面样式。
需要注意的是,\headheight
必须大于等于 13.6pt,否则会出现警告并可能导致格式问题。页眉和页脚包括每个元素(左、中、右)的三个部分。
LaTeX 中的页面样式
fancyhdr
提供的样式:
-
支持四种标准的 LaTeX 样式;
-
fancy
为所有页面定义了一个新的页眉样式,但排除掉 plain-style 页面(如章节页和标题页); -
fancyplain
与fancy
类似,但适用于所有页面(这个样式已经不推荐使用,建议使用fancy
与\fancypagestyle
的组合,具体可以参考手册第26节)。
样式自定义
fancyhdr
提供了几个命令来定制页眉和页脚样式。fancy
和 fancyplain
样式可以直接进行配置,而对于 LaTeX 标准样式,您需要使用 \fancypagestyle
命令。
要设置页眉和页脚样式,fancyhdr
提供了三种接口,功能相同,只是使用方式不同。您可以选择最喜欢的一种。
使用的命令(这些命令已被弃用,推荐使用下文定义的新命令):
\lhead[<even output>]{<odd output>}
\chead[<even output>]{<odd output>}
\rhead[<even output>]{<odd output>}
\lfoot[<even output>]{<odd output>}
\cfoot[<even output>]{<odd output>}
\rfoot[<even output>]{<odd output>}
这些命令的行为应该是直观的:如果命令中包含 head
,则影响页眉,依此类推。显然,l
, c
和 r
分别表示左、中和右。
您还可以使用 \fancyhead
(页眉)和 \fancyfoot
(页脚)命令,它们的工作方式相同,因此这里仅解释 \fancyhead
的语法:
\fancyhead[selectors]{output you want}
您可以选择多个选择器,并用逗号分隔。以下是选择器的含义:
-
E
:偶数页 -
O
:奇数页 -
L
:左侧 -
C
:居中 -
R
:右侧
例如,CE, RO
会指代偶数页的居中位置和奇数页的右侧。
\fancyhf
是 \fancyhead
和 \fancyfoot
的合并,因此可以设置页眉和页脚。如果省略 H
和 F
,则会同时设置页眉和页脚的内容。
这些命令仅适用于 fancy
和 fancyplain
样式。如果需要自定义 LaTeX 的默认样式,则需要使用 \fancyplainstyle
命令。更多例子如下。
为了清晰的自定义,我们建议从零开始。为此,您可以先清除当前的页面样式。提供空值会使相应字段为空。例如:
\fancyhf{}
这将删除当前的页眉和页脚配置,您可以自定义它们。
Plain 页
有两种方法可以更改章节和标题页等“plain”页面的样式。
首先,可以使用 fancyplain
样式。如果使用该样式,您可以在 fancyhdr
命令中使用 \fancyplain{...}{...}
:
\pagestyle{fancyplain}
\fancyhf{}
\lhead{ \fancyplain{}{Author Name} }
\rhead{ \fancyplain{}{\today} }
\rfoot{ \fancyplain{}{\thepage} }
当 LaTeX 创建一个空白样式页面时,它会插入 \fancyplain
的第一个参数;在其他情况下,它将使用第二个参数。
另一种方法是重新定义 plain
样式。例如,您可以在需要时将 plain
页面设置为完全无样式。使用以下命令:
\pagestyle{fancy}
\fancypagestyle{plain}{ %
\fancyhf{} % 清空所有内容
\renewcommand{\headrulewidth}{0pt} % 移除线条
\renewcommand{\footrulewidth}{0pt}
}
这样您可以使用任何样式,但不能使用 fancyplain
,因为它会覆盖您的重新定义。
示例
对于双面打印,通常会将对页的样式进行镜像处理,通常考虑内部和外部。因此,双面文档中的示例如下:
\lhead[Author Name]{}
\rhead[]{Author Name}
\lhead[]{\today}
\rhead[\today]{}
\lfoot[\thepage]{}
\rfoot[]{\thepage}
使用 fancyhdr
自定义页眉页脚
自定义页面样式
fancyhdr
包支持的样式:
-
四种 LaTeX 样式;
-
fancy
为所有页面定义了新的页眉样式,但排除了章节页和标题页; -
fancyplain
与fancy
类似,但适用于所有页面(这个样式已被废弃,建议使用fancy
和\fancypagestyle
的组合,见手册第26节)。
样式自定义
fancyhdr
提供了特定的命令来定制页眉和页脚样式。这些样式可以直接配置,而对于 LaTeX 标准样式,您需要使用 \fancypagestyle
命令。
要设置页眉和页脚样式,fancyhdr
提供了三种接口,它们的功能相同,只是使用方式不同。您可以选择最适合的方式。
样式自定义命令(已弃用)
以下命令已被弃用,推荐使用新的命令。
\lhead[<even output>]{<odd output>}
\chead[<even output>]{<odd output>}
\rhead[<even output>]{<odd output>}
\lfoot[<even output>]{<odd output>}
\cfoot[<even output>]{<odd output>}
\rfoot[<even output>]{<odd output>}
命令的行为直观易懂:head
用于页眉,foot
用于页脚,l
, c
, 和 r
分别表示左、中和右。
您还可以使用 \fancyhead
(页眉)和 \fancyfoot
(页脚)命令,它们的工作方式相同,因此这里只解释 \fancyhead
的语法:
\fancyhead[selectors]{output you want}
您可以选择多个选择器,使用逗号分隔。选择器含义如下:
-
E
:偶数页 -
O
:奇数页 -
L
:左侧 -
C
:居中 -
R
:右侧
例如,CE, RO
表示偶数页的居中位置和奇数页的右侧。
\fancyhf
是 \fancyhead
和 \fancyfoot
的合并,可以同时设置页眉和页脚。如果省略 H
和 F
,则会同时设置页眉和页脚的内容。
修改 plain
页
有两种方法可以更改章节页和标题页等“plain”页面的样式。
-
第一种方法是使用
fancyplain
样式。如果使用该样式,您可以在fancyhdr
命令中使用\fancyplain{...}{...}
:
\pagestyle{fancyplain}
\fancyhf{}
\lhead{ \fancyplain{}{Author Name} }
\rhead{ \fancyplain{}{\today} }
\rfoot{ \fancyplain{}{\thepage} }
-
第二种方法是重新定义
plain
样式。例如,您可以将plain
页面设置为没有任何样式:
\pagestyle{fancy}
\fancypagestyle{plain}{ %
\fancyhf{} % 清空所有内容
\renewcommand{\headrulewidth}{0pt} % 移除线条
\renewcommand{\footrulewidth}{0pt}
}
示例
对于双面打印,常常会对页眉页脚进行镜像处理。以下是双面文档中的示例:
\lhead[Author Name]{}
\rhead[]{Author Name}
\lhead[]{\today}
\rhead[\today]{}
\lfoot[\thepage]{}
\rfoot[]{\thepage}
使用 scrlayer-scrpage
包自定义样式
scrlayer-scrpage
包是 KOMA-script 套件的一部分,推荐在每个 KOMA-script 类中使用此包来定制页眉和页脚。此包也可以与标准类一起使用。
\documentclass{book}
\usepackage{scrlayer-scrpage}
\usepackage{mwe}
\begin{document}
\chapter{Manta Ray}
\blindtext
\section{Taxonomy}
\blindtext[10]
\chapter{Mobula}
\blindtext
\section{Life style}
\blindtext[10]
\end{document}
加载此包后,默认行为不会改变。章节标题位于左页,节标题位于右页,页码显示在外侧页眉。
自定义页眉和页脚的命令
scrlayer-scrpage
包提供了以下命令来定制页眉和页脚:
\ohead{}% 清空外侧页眉
\cfoot*{\pagemark}% 页码居中显示,且适用于 plain 页面
自定义页面内内容
例如,将姓名和论文标题放置在页脚的内部:
\documentclass{book}
\usepackage{mwe}
\usepackage[markcase=noupper% remove the uppercasing
]{scrlayer-scrpage}
\ohead{}% 清空外侧页眉
\ofoot*{\pagemark}% 页码显示在页脚外侧
\ifoot*{Walter Wombat\\ Is life on Mars possible?}% 姓名和论文标题显示在内侧页脚
\setlength{\footheight}{24.0pt}
\begin{document}
\chapter{Manta Ray}
\blindtext
\section{Taxonomy}
\blindtext[10]
\chapter{Mobula}
\blindtext
\section{Life style}
\blindtext[10]
\end{document}
总结
这些方法提供了非常灵活的自定义选项来定制 LaTeX 文档的页眉、页脚、页面样式等,从而适应不同的需求和格式要求。
如何更改页眉和页脚的字体样式?
这个包提供了一个类似于 KOMA-script 类的接口。你可以将字体属性添加到页眉和页脚,页码也可以单独设置。
\documentclass{book}
\usepackage{mwe}
\usepackage{xcolor}
\usepackage[markcase=noupper]{scrlayer-scrpage}
\ohead{} % 清空外侧页眉
\addtokomafont{pagehead}{\sffamily} % 设置页眉字体为无衬线
\addtokomafont{pagefoot}{\tiny} % 将页脚字体设置为超小
\addtokomafont{pagenumber}{\large\bfseries\color{red!80!black}} % 设置页码字体为大号加粗红色
\ofoot*{\pagemark} % 页码显示在页脚外侧,适用于普通页面
\ifoot*{Walter Wombat\\ Is life on Mars possible?} % 在内侧页脚显示姓名和标题
\setlength{\footheight}{24.0pt} % 设置页脚高度
\begin{document}
\chapter{Manta Ray}
\blindtext
\section{Taxonomy}
\blindtext[10]
\chapter{Mobula}
\blindtext
\section{Life style}
\blindtext[10]
\end{document}
显示“Page n of m”
有些人喜欢在页脚显示当前页码和总页数。LaTeX 仅提供当前页码的访问权限。但是,你可以使用 lastpage
包来找到总页数,如下所示:
\usepackage{lastpage}
...
\cfoot{\thepage\ of \pageref{LastPage}}
注意大写字母。还要在 \thepage
后面加上反斜杠,以确保页码和“of”之间有足够的空格。并且需要注意,当使用引用时,必须额外运行一次 LaTeX 来解析交叉引用。
使用 titleps
自定义页面样式
titleps
提供了一种单阶段的方法,无需使用 \leftmark
或 \rightmark
。
例如:
\newpagestyle{main}{
\sethead[\thepage][\chaptertitle][(\thesection)] % 偶数页
{\thesection)}{\sectiontitle}{\thepage} % 奇数页
}
\pagestyle{main}
这定义了一个名为 main
的页面样式,在偶数页的左侧显示页码,右侧显示章节标题;在奇数页的右侧显示页码,左侧显示节标题,其他内容居中。
自定义页眉和页脚的样式与颜色
以下示例展示了如何使用 titleps
来设置带有颜色的页面样式:
\usepackage[dvipsnames,usenames]{color}
\usepackage{titleps}
\newpagestyle{main}[\small]{
\setheadrule{.55pt} % 设置页眉规则的宽度
\sethead[\colorbox{black}{\color{white}{\thepage}}] % 偶数页左侧页码
[\chaptertitle] % 偶数页居中章节标题
[\colorbox{CornflowerBlue}{\thesection}] % 偶数页右侧节号
{\colorbox{CornflowerBlue}{\thesection}} % 奇数页左侧节号
{\sectiontitle} % 奇数页居中节标题
{\colorbox{black}{\color{white}{\thepage}}} % 奇数页右侧页码
}
这些命令将允许你创建具有自定义样式和颜色的页眉页脚,以便更加个性化地设计文档。