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{}

有两种解决方案:

  1. 在文档导言中添加 \usepackage{nopageno}。这个包会使 \pagestyle{plain} 的效果与 \pagestyle{empty} 相同,从而有效地抑制页码显示。

  2. 使用 fancyhdr 包,如下所述。

使用 fancyhdr 自定义页眉和页脚

为了更好地控制页眉,可以使用由 Piet van Oostrum 编写的 fancyhdr 包。该包提供了几个命令,可以让你自定义文档的页眉和页脚。有关更完整的指南,请参考该包的文档。

开始使用时,首先在导言中添加以下代码:

\usepackage{fancyhdr}
\setlength{\headheight}{15.2pt}
\pagestyle{fancy}

现在你可以观察到文档中应用了新的页面样式。

需要注意的是,\headheight 必须大于等于 13.6pt,否则会出现警告并可能导致格式问题。页眉和页脚包括每个元素(左、中、右)的三个部分。

LaTeX 中的页面样式

fancyhdr 提供的样式:

  • 支持四种标准的 LaTeX 样式;

  • fancy 为所有页面定义了一个新的页眉样式,但排除掉 plain-style 页面(如章节页和标题页);

  • fancyplainfancy 类似,但适用于所有页面(这个样式已经不推荐使用,建议使用 fancy\fancypagestyle 的组合,具体可以参考手册第26节)。

样式自定义

fancyhdr 提供了几个命令来定制页眉和页脚样式。fancyfancyplain 样式可以直接进行配置,而对于 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, cr 分别表示左、中和右。

您还可以使用 \fancyhead(页眉)和 \fancyfoot(页脚)命令,它们的工作方式相同,因此这里仅解释 \fancyhead 的语法:

\fancyhead[selectors]{output you want}

您可以选择多个选择器,并用逗号分隔。以下是选择器的含义:

  • E:偶数页

  • O:奇数页

  • L:左侧

  • C:居中

  • R:右侧

例如,CE, RO 会指代偶数页的居中位置和奇数页的右侧。

\fancyhf\fancyhead\fancyfoot 的合并,因此可以设置页眉和页脚。如果省略 HF,则会同时设置页眉和页脚的内容。

这些命令仅适用于 fancyfancyplain 样式。如果需要自定义 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 为所有页面定义了新的页眉样式,但排除了章节页和标题页;

  • fancyplainfancy 类似,但适用于所有页面(这个样式已被废弃,建议使用 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 的合并,可以同时设置页眉和页脚。如果省略 HF,则会同时设置页眉和页脚的内容。

修改 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}}}  % 奇数页右侧页码
}

这些命令将允许你创建具有自定义样式和颜色的页眉页脚,以便更加个性化地设计文档。


Last modified: Sunday, 20 April 2025, 1:13 PM