关于 Beamer 的整理笔记,假定读者有一定的 LaTeX 基础。

注意到 Beamer 虽然属于 LaTeX 的一部分,但是与标准的 LaTeX 文档有很多的不同,部分 LaTeX 宏包和命令可能无法在 Beamer 上呈现正常的效果,这也意味着 Beamer 的编译错误更难改正。

笔记主要参考 latex-beamer.com 的英文在线教程和若干博客。

笔者目前使用的模板的两种风格效果如下,对应的 Github 仓库:latexzero

极简示例

从一个最简单的例子开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\documentclass{beamer}

% Theme choice:
\usetheme{AnnArbor}

% Title page details:
\title{My First \LaTeX{} Presentation}
\subtitle{A subtitle}
\author{Author}
\date{\today}

\begin{document}

% Title page frame
\begin{frame}[plain]
\titlepage
\end{frame}

\begin{frame}
Hello, world!
\end{frame}

\end{document}

效果如下

在示例中使用了一个名为 AnnArbor 的 Beamer 主题,添加了作者和日期,并以此生成了标题页面。

标题页被包裹着 frame 环境中,frame 环境是 Beamer 的核心环境,作用相当于 PPT 中的一页。
在 frame 外的内容可能会被 LaTeX 用奇怪的方法排版到幻灯片上,影响效果,因此尽可能将所有正文分别放在不同的 frame 中。

为了避免不同主题的干扰,下面的效果图通常是基于默认主题的,此时对应的设置主题命令需要改为 \usetheme{default} 或直接删除。

文档类选项

下面是几个常见的导入 Beamer 文档类时指定的选项:

  • 10pt: 指定正文的基本字体大小为 10pt,Beamer 支持的字号包括:8pt、9pt、10pt、11pt、12pt、14pt、17pt、20pt,默认为 11pt。
  • aspectratio=43: 指定演示文稿的纵横比,默认比例为 4:3,即传统屏幕纵横比,还可以改为 16:9 的屏幕纵横比 aspectratio=169
  • mathserif: 在数学模式中指定使用衬线字体,保持与 article 相同,而不是采用默认的无衬线字体;
  • table: 加载与表格相关的宏包,以增强表格的功能;
  • compress:压缩导航栏的排版,使导航栏上的这些信息更紧凑,例如从多行压缩为单行。
  • notes:是 Beamer 支持演讲者视图,在每一页之后添加 note,但是问题是很多 PDF 浏览器在放映时不支持。

文档结构

Beamer 使用\section{}\subsection{}(或\section*{}\subsection*{})来划分结构,
注意:

  • Beamer 不支持\chapter
  • 与 LaTeX 标准文档不同,这些命令不会在对应位置显示章节标题;
  • 必须在 frame 外部使用这些章节命令,否则可能有排版错误。

标题页

标题页的设置包括填写基本信息,以及在一个 frame 中使用 \titlepage 命令

1
2
3
\begin{frame}[plain]
\titlepage
\end{frame}

或者也可以直接使用通常的 \maketitle 命令,此时不用包裹在 frame 之中。(两者的效果大致等价,但是可能略有区别)

1
\maketitle

标题页会显示的基本元素包括:

  • \title{},主标题
  • \subtitle{},子标题
  • \author{},多个作者可以使用 \and 命令连接
  • \date{},当前日期使用 \date{\today}
  • \institute{},机构

对于作者,可以使用 ~ 连接姓名确保姓和名不会被换行符分开

1
2
3
\author{First~Author \and
Second~Author \and
Third~Author}

如果多个作者分别属于不同的机构,可以参考下面的代码

1
2
3
4
\author{First~Author\inst{1} \and Second~Author\inst{2}}

\institute{\inst{1} Affiliation of the 1st author \and
\inst{2} Affiliation of the 2nd author}

可以通过 \thanks{} 添加作者的邮箱,和其他 LaTeX 文档类一样,邮箱会在脚注中显示,例如

1
\author{Author\thanks{\texttt{xxx@gmail.com}}}

在某些模板中,作者和单位、演示文稿标题和日期等信息会默认显示在每一页底部的脚注中,有时信息过长无法显示,可以在添加信息时加入简称,例如

1
2
3
\title[<short one>]{<long title>}
\author[<short one>]{<authors names>}
\institute[<short one>]{authors affiliation}

也可以设置简称为空,从而取消脚注,例如 \title[]{Presentation title}

在演示文稿中添加徽标是一个很常见的需求,可以在导言区添加如下代码

1
2
3
\logo{
\includegraphics[width=1cm]{logo.jpg}
}

徽章会出现在每一页的固定位置,默认位置由主题决定,可能出现在右下角,更改徽章位置可以使用 tikz 等宏包完成。

一个更常见的需求是只在标题页中呈现标志,可以改为

1
2
3
\titlegraphic{
\includegraphics[width=2cm]{logo.jpg}
}

此时标志图片只会在标题页出现,默认位置通常为正中偏下的位置。

目录页

使用下面的命令可以创建目录页

1
2
3
\begin{frame}{Outline} % or Contents
\tableofcontents
\end{frame}

可以使用 \section*{References} 将章节从目录中隐藏,可以添加 hideallsubsections 选项在目录中隐藏所有的子章节

1
\tableofcontents[hideallsubsections]

使用下面的命令可以在进入每一个 section 和 subsection 时复现一次目录

1
2
3
4
5
6
7
8
9
10
\AtBeginSection[]{
\begin{frame}<beamer>{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
\AtBeginSubsection[]{
\begin{frame}<beamer>{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}

默认情况下,Beamer 对自动生成的目录页也会记入页码并在页脚中显示,如果希望其不计入页码和显示页码,可以加上选项 noframenumberingplain,例如

1
2
3
4
5
6
7
\AtBeginSection[]
{
\begin{frame}<beamer>[noframenumbering,plain]{Outline}
\tableofcontents[currentsection,currentsubsection,
hideothersubsections,sectionstyle=show/shaded]
\end{frame}
}

frame 环境

frame 的基本使用如下,可以设置主标题,副标题以及额外选项,它们都是可选的。

1
2
3
4
% Frame environment
\begin{frame}[options]{<Frame Title>}{<Frame subtitle>}
content
\end{frame}

也可以使用单独命令添加主标题和副标题

1
2
3
4
5
6
\begin{frame}
\frametitle{<Frame Title>}
\framesubtitle{<Frame subtitle>}

content
\end{frame}

frame 环境还支持如下的用法,即使用 \frame 命令

1
2
3
4
5
6
\frame{
\frametitle{<Frame Title>}
\framesubtitle{<Frame subtitle>}

content
}

frame 的选项例如 [t][c][b] 指定文本在页面中竖直方向的对齐方式:向上,居中或向下,默认是竖直居中的,可以进行如下修改

1
2
3
\begin{frame}[b]
content
\end{frame}

可以使用 [plain] 选项来移除当前 frame 的顶部和底部细节,通常用于标题页展示纯净的页面

1
2
3
\begin{frame}[plain]
\titlepage
\end{frame}

columns 环境

演示文稿的一个常见需求是:对单个页面进行竖向拆分得到左右两列,分别添加不同的文字或者图文进行对比,也可以用来并列两个图片,
这些需求都可以通过 columns 环境实现,在使用中需要为每一列指定宽度,通常取为 \textwidth 的一个比例长度,各列长度和不超过 \textwidth

有两种具体用法,第一种是直接使用 \column{0.6\textwidth} 命令,第二种是使用 column 环境

1
2
3
\begin{column}{0.6\textwidth}
...
\end{column}

例如按照 6:4 的比例拆分,分别排版不同的文字

1
2
3
4
5
6
7
8
9
10
\begin{frame}{Columns in beamer}
\begin{columns}
\column{0.6\textwidth}
% \centering
This is column one with 0.6 text width.
\column{0.4\textwidth}
% \centering
This is column two with 0.4 text width.
\end{columns}
\end{frame}

效果如下

可选\centering保持在每一部分居中对齐。

或者一列排版文字,另一列放置图片

1
2
3
4
5
6
7
8
9
10
11
12
\begin{frame}{Text and Image in beamer}
\begin{columns}
\column{0.4\textwidth}
This is an example of text and image in the same slide using columns environment.
\column{0.6\textwidth}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Neural-Network.jpg}
\caption{Neural Network with 5 neurons in the hidden layer. }
\end{figure}
\end{columns}
\end{frame}

效果如下

示例中使用的图片:https://latex-beamer.com/wp-content/uploads/2021/07/Neural-Network.jpg

可以通过在 columns 环境之后分别添加 [T][b][c] 选项进行顶部、底部和中心对齐,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\begin{frame}{Vertical alignment}
\begin{columns}[T]

% Column 1
\begin{column}{0.5\textwidth}
This is a neural network with two inputs and two outputs. It has the following parameters:
\begin{itemize}
\item Input layer: 2 neurons.
\item Hidden layer: 5 neurons.
\item Output layer: 2 neurons.
\end{itemize}
\end{column}

% Column 2
\begin{column}{0.5\textwidth}
\includegraphics[width=\textwidth]{Neural-Network.jpg}
\end{column}

\end{columns}
\end{frame}

block/定理类环境

Beamer 预定义了很多诸如定理和证明的定理类环境,还有一般的 block 环境,这些环境的默认表现与主题非常相关,例如默认主题 default 显示的效果非常简单,默认主题 Madrid 呈现的效果具有数学风格。

这部分的示意图都采用了 Madrid 主题。

下面是常见的 block 环境和定理类环境:

  1. block 环境
    • 通用/标准 block:\begin{block}...\end{block}
    • 示例 block(exampleblock):\begin{exampleblock} ... \end{exampleblock}
    • 警告 block(alertblock):\begin{alertblock}...\end{alertblock}
  2. 定理类环境
    • 定理 theorem:\begin{theorem} ... \end{theorem}
    • 定义 definition:\begin{definition} ... \end{definition}
    • 证明 proof:\begin{proof} ... \end{proof},默认含有证毕符号
    • 引理 lemma:\begin{lemma} ... \end{lemma}
    • 推论 corollary:\begin{corollary} ... \end{corollary}
    • 示例 example:\begin{example} ... \end{example}

其中定理类环境有默认标题,可以使用 [] 添加可选的额外标题,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\begin{frame}
\begin{example}[Demo]
content-1
\end{example}

\begin{example}
content-2
\end{example}

\begin{definition}[Demo]
content-3
\end{definition}

\begin{definition}
content-4
\end{definition}
\end{frame}

效果如下

block 环境的标题参数是必选参数,否则会自动将内容的第一个字母提升为标题,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\begin{frame}
\begin{block}{title-1}
content-1
\end{block}

\begin{exampleblock}{title-2}
content-2
\end{exampleblock}

\begin{alertblock}{title-3}
content-3
\end{alertblock}

\begin{block}
content-4
\end{block}
\end{frame}

效果如下(注意最后一个 block 因为缺少标题,第一个字母被提升为标题)

列表环境

相比于大段文字的堆砌,演示文稿中更推荐的是呈现关键信息的列表。
Beamer 直接支持 LaTeX 的有序列表,无序列表和描述列表,并且支持嵌套和列表配置的宏包等,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\begin{frame}{Nested Lists in Beamer}
\begin{enumerate}
\item One
\begin{itemize}
\item Sub-category
\end{itemize}
\item Two
\item Three
\begin{description}
\item[A] apple able
\item[B] ban banana
\end{description}
\end{enumerate}
\end{frame}

对于演示文稿中的列表,有下面几种常见问题以及对应的处理。

有时列表的每一项之间的行间距过小,但是只有两三个项,导致排版非常不美观,下面的做法可以局部调整某个列表各项之间的竖直间距:(不建议进行全局设置,因为 Beamer 需要单独考虑每一页中列表的拥挤程度进行调整)

1
2
3
4
5
6
\begin{itemize}
\setlength{\itemsep}{1em}
\item First item
\item Second item
\item Third item
\end{itemize}

也可以使用 \vspace{} 手动调整列表项之间的竖直间距,例如

1
2
3
4
5
6
7
\begin{itemize}
\item First item
\vspace{1em}
\item Second item
\vspace{1em}
\item Third item
\end{itemize}

调整间距的前后效果对比如下

列表过长可能需要分页展示,此时需要考虑的是列表计数器的设置,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
% Define a counter
\newcounter{currentenumi}

\begin{frame}{Lists in multiple frames}{Frame 1}
\begin{enumerate}
\item Item 1
\item Item 2
\item Item 3
% Store the actual item number
\setcounter{currentenumi}{\theenumi}
\end{enumerate}
\end{frame}

\begin{frame}{Lists in multiple frames}{Frame 2}
\begin{enumerate}
% Use the previous stored item number
\setcounter{enumi}{\thecurrentenumi}
\item Item 4
\item Item 5
\end{enumerate}
\end{frame}

这里的配置包括三部分:

  • 在导言区定义了计数器;
  • 前一页的列表最后设置了计数器的值;
  • 在后一页的列表中使用了计数器的值。

内部排版

记录一下关于页面内部排版的几个细节需求。

默认的分段在演示文稿中是不明显的,我们可以在段尾添加 \\~\\ 产生更明显的分段效果,实质上是加了一个空行,例如

1
2
3
4
5
6
7
8
\begin{frame}
Hello, world! 1.
Hello, world! 2. \\~\\

Hello, world! 3.

Hello, world! 4.
\end{frame}

此时会在 12 和 3 之间产生明显的宽度为一个空行的分段效果,效果如下

如果需要更精细地控制竖直间距,可以使用 \vspace{} 命令(接受 cm、pt、em 等长度单位),例如 \vspace{0.5cm} 在当前位置插入 0.5cm 的竖直间距。

\vspace{} 也接收负值,例如 \vspace{-0.5em} 可以压缩原本的竖直间距,适合少量微调,但压缩过大会导致内容重叠。

除了 \vspace{},还可以使用预定义的间距命令:

1
2
3
\smallskip    % 小空白(~3pt)
\medskip % 中空白(~6pt)
\bigskip % 大空白(~12pt)

还可以使用 \linespread{xxx} 改变全局的行间距倍数。

虽然 LaTeX 本身提供了粗体斜体等排版命令,但是 Beamer 可以通过一个 ulem 宏包达到更丰富的效果(除了数学公式中,那里仍然需要 bm 宏包)。
示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\usepackage{ulem}

\begin{frame}{Text decorations provided by the \texttt{ulem} package}

\uline{Underlined that breaks at the end of lines if
they are too too long because the author won’t stop
writing.} \\~\\

\uuline{Double-Underlined text} \\~\\

\uwave{Wavy-Underlined text} \\~\\

\sout{Strikethrough text} \\~\\

\xout{Struck with Hatching text} \\~\\

\dashuline{Dashed Underline text} \\~\\

\dotuline{Dotted Underline text}

\end{frame}

各个命令的解释如下:

  • \uline{}:下划线
  • \uuline{}:双层下划线
  • \uwave{}:波浪下划线
  • \dashuline{}:下划虚线
  • \dotuline{}:点下划线
  • \sout{}:删除横线
  • \xout{}:删除斜线

效果如下

改变颜色仍然可以使用 xcolor 宏包,Beamer 默认已经导入这个宏包,因此可以直接使用,例如

1
2
{\color{blue} This is a blue block.}
{\color{red} And this is a red one.}

参考文献

Beamer 对于参考文献的使用与 LaTeX 文档有很大的不同,面向对象不是读者而是观众,需要在引用位置立刻告诉观众——这里的文献是什么,而不是留在最后一页给一份参考文献列表,通常有两种方法:

  • 在引用位置使用脚注展示参考文献;
  • 用作者名和年份展示参考文献,因为提供作者+年份通常就足够让观众定位对应的文献,尤其是报告还会给观众提供一些额外信息,例如科研领域或关键词。

建议使用 biblatex,通常使用作者+年份样式而非编号样式

1
2
\usepackage[style=authoryear,backend=biber]{biblatex}
\addbibresource{references.bib}

下面的例子都基于 biblatexauthoryear 样式,使用的 bib 文件为 references.bib

文献引用

在引用位置中用脚注展示参考文献有两种方式:

  • \footcite{}:以脚注形式显示引用条目的作者和年份
  • \footfullcite{}:在脚注中显示引用条目的详细信息

效果如下:

\footcite{}

\footfullcite{}

但是依赖脚注的方式有严重的问题:只适合当前页面只提到一两个参考文献的情景,而且会大幅占用本就不充裕的页面空间,影响其他内容的排版。

直接使用 \cite{} 命令引用参考文献也是可以的。

默认效果如下:

这里显示的作者+年份和其他文本的区别不明显,可读性很差。
可以通过重定义 \cite 命令的方式让引用内容的样式更加清晰:
先使用 \let 定义一个新命令保存原始的 \cite 命令,再重新封装一层作为新的 \cite 命令,这样可以保留原本的引用格式和超链接功能,只是在外侧调整细节。

例如调整字号并加上中括号

1
2
\let\oldcite\cite
\renewcommand{\cite}[1]{{\small[\oldcite{#1}]}}

也可以进一步加上颜色

1
2
\let\oldcite\cite
\renewcommand{\cite}[1]{{\color{red}\small[\oldcite{#1}]}}

注意:\cite{} 命令的超链接只对年份部分的文本有效,对作者名的文本无效,因此只有年份被视作超链接,如果使用 hyperref 宏包的 citecolor 进行颜色设置,会只对年份生效。

参考文献列表

在最后可以使用单独的参考文献列表,例如

1
2
3
\begin{frame}{References}
\printbibliography[heading=none]
\end{frame}

这里使用 heading=none 选项是为了避免自动创建一个名为 References 的 section。

效果如下

如果有一些需要展示的文献在前面没有引用,默认不会展示,可以使用 \nocite{} 补充。

有时需要展示的文献实在太多了,Beamer 默认排版展示非常不美观,多余的内容会溢出到页面下方,而不是自动跨页,需要给 frame 环境添加 allowframebreaks 选项以允许自动将多余内容排版到下一页。

对于文献太多的情况,更好的做法是只展示其中一部分重要文献,例如

1
2
3
\begin{frame}{Selected References}
\printbibliography[keyword=important,heading=none]
\end{frame}

此时需要手动给希望展示的条目加上 keywords = {important} 字段。

效果如下

结束页

某些情景下需要有专门的结束页,通常一个谢谢即可。此时页面文字很少,需要注意排版让文字居中,例如可以使用 \centerlinecenter 环境或者其他命令。

1
2
3
4
5
6
7
8
9
10
11
\begin{frame}
\Huge\centerline{\textbf{Thank You!}}
\end{frame}

\begin{frame}
\Huge\centerline{\textbf{Thank You for your attention!}}
\end{frame}

\begin{frame}
\Huge\centerline{\textbf{谢谢!}}
\end{frame}

相比于一般的汇报展示,学位答辩等重要场合可能需要更礼貌一些,例如

1
2
3
4
5
6
7
\begin{frame}
\vfill
\centering
{\LARGE 谢谢观看 \\~\\
敬请各位老师批评指正}
\vfill
\end{frame}

注意:

  • 某些人喜欢抠字眼,觉得 “感谢聆听” 中的聆听是谦词而不是敬词,不够礼貌,避免使用即可。
  • 在学术交流时,也可以在最后一页的谢谢旁边补上个人的主页/联系方式等。
  • 还有一些情景中不推荐用单独的谢谢作为一个结束页,此时结束页的内容可以是总结和展望,也可以是列举主要参考文献,也可以在结束页顺便加上谢谢。

动态效果

在汇报用的演示文稿中加入花哨的动态效果是极其不推荐的,但是 Beamer 仍然支持一些简单的效果,就像 PowerPoint 一样,这里简单了解一下。
在很多 Beamer 环境中,允许使用 <...> 添加与动态效果相关的参数,这里全部略去。

下面的例子使用 \pause 暂停命令,这意味着演讲者需要手动确认一次才会继续展示列表的下一项,直至完全呈现。

1
2
3
4
5
6
7
8
9
\begin{frame}{Creating Overlays in Beamer}{Pause command}
\begin{itemize}
\item Shown from the first slide on.
\pause
\item Shown from the second slide on.
\pause
\item Shown from the third slide on.
\end{itemize}
\end{frame}

\pause 也可以使用在段落中。

更常见的是下面这种做法,可以精确调控每一帧显示哪些项

1
2
3
4
5
6
7
8
9
10
11
12
\begin{frame}
\frametitle{Sample frame title}
This is a text in second frame.
For the sake of showing an example.

\begin{itemize}
\item<1-> Text visible on slide 1,2,3,4
\item<2-> Text visible on slide 2,3,4
\item<3> Text visible on slide 3
\item<4-> Text visible on slide 4
\end{itemize}
\end{frame}

除了上面在 \item 后加 <n> 的写法,Beamer 还提供了几个更灵活的 overlay 命令:

命令 效果
\only<n>{...} 仅在指定 slide 出现,不占位(隐藏时后续内容自动上移)
\onslide<n>{...} 仅在指定 slide 可见,但始终占位(隐藏时保留空白)
\uncover<n>{...} \onslide 效果相同,语义上更偏向”揭开”
\visible<n>{...} 仅在指定 slide 显示,其余 slide 透明但占位
\invisible<n>{...} 在指定 slide 隐藏,其余 slide 正常显示
\alt<n>{A}{B} 指定 slide 显示 A,其余显示 B

这些命令可以包裹任意内容(文字、列表项、图片等),例如:

1
2
3
4
5
6
7
8
9
\begin{frame}{Overlay commands}
\only<1>{Only on slide 1.}

\onslide<2>{On slide 2, with reserved space.}

\uncover<3>{Uncovered on slide 3.}

\alt<4>{Slide 4 shows this.}{Other slides show this.}
\end{frame}

主题

整体主题

通常在导言区的第二行立刻声明使用的整体主题,例如

1
2
3
4
\documentclass{beamer}
\usetheme{default}

...

Beamer 内置了 29 个整体主题,可以按照导航栏进行简单分类:

  • Without Navigation Bars: default, boxes, Bergen, Boadilla, Madrid, AnnArbor, CambridgeUS, EastLansing, Pittsburgh, Rochester
  • With a Tree-Like Navigation Bar: Antibes, JuanLesPins, Montpellier
  • With a Table of Contents Sidebar: Berkeley, PaloAlto, Goettingen, Marburg, Hannover
  • With a Mini Frame Navigation: Berlin, Ilmenau, Dresden, Darmstadt, Frankfurt, Singapore, Szeged
  • With Section and Subsection Tables: Copenhagen, Luebeck, Malmoe, Warsaw

效果如下

default
default
boxes
boxes
Bergen
Bergen
Boadilla
Boadilla
Madrid
Madrid
AnnArbor
AnnArbor
CambridgeUS
CambridgeUS
EastLansing
EastLansing
Pittsburgh
Pittsburgh
Rochester
Rochester
Antibes
Antibes
JuanLesPins
JuanLesPins
Montpellier
Montpellier
Berkeley
Berkeley
PaloAlto
PaloAlto
Goettingen
Goettingen
Marburg
Marburg
Hannover
Hannover
Berlin
Berlin
Ilmenau
Ilmenau
Dresden
Dresden
Darmstadt
Darmstadt
Frankfurt
Frankfurt
Singapore
Singapore
Szeged
Szeged
Copenhagen
Copenhagen
Luebeck
Luebeck
Malmoe
Malmoe
Warsaw
Warsaw

一个整体主题实际上主要是下面四种细分主题的组合搭配(加上一些细节调整),例如 default 主题实质为

1
2
3
4
\usefonttheme{default}
\usecolortheme{default}
\useinnertheme{default}
\useoutertheme{default}

Boadilla 主题实质为

1
2
3
4
\usefonttheme{rose}
\useinnertheme[shadow]{rounded}
\usecolortheme{dolphin}
\useoutertheme{infolines}

如果需要定制整体主题,基于 default 主题进行修改是一个非常好的选择。

细分主题

Beamer 将主题拆分为了下面四个部分:

  • 字体主题:\usefonttheme{}
  • 颜色主题:\usecolortheme{}
  • 内部主题:\useinnertheme{}
  • 外部主题:\useoutertheme{}

Beamer 字体主题支持全局地设置字体风格,\usefonttheme{} 命令支持如下选项:

  • default:(默认)各种标题和文本字体均为无衬线的等线体,数学式中的字体为等斜线体。为标题、标题和页脚等元素使用不同的字体大小,但不使用粗体或斜体进行突出显示。
  • serif:使所有文本都使用默认衬线字体(直立罗马体)进行排版。
  • structurebold:通常的文本是无衬线字体,但是标题、脚线和各种导航条中的标题和文本变更为粗体。
  • structureitalicserif:与 structurebold 类似,但是标题、脚线和各种导航条中的标题和文本变更为斜罗马体。
  • structuresmallcapsserif:与 structurebold 类似,但是标题、脚线和各种导航条中的标题和文本变更为小型大写字体。
  • professionalfonts:(专业字体选项)这个选项抑制了 Beamer 对字体的自动修改,将其留给其它宏包进行处理。

值得注意的是,与 article 等文档不同,Beamer 需要考虑投影后的内容辨识度,默认全局采用了无衬线字体,这看起来有些奇怪,尤其是在数学公式中的符号。

颜色主题设定演示文稿的各部分各结构各元素的配色,\usecolortheme{} 命令支持如下选项:

  • 基本颜色:defaultsidebartabstructure
  • 完整颜色:albatrossbeaverbeetlecranedoveflyseagullwolverine
  • 内部颜色:lilyorchidrose
  • 外部颜色:dolphinseahorsewhale

外部主题设定演示文稿是否有顶栏、底栏和侧栏,以及它们的结构,\useoutertheme{} 命令支持如下选项:

  • default
  • infolines
  • miniframes
  • sidebar
  • smoothbars
  • split
  • shadow
  • tree
  • smoothtree

主要是导航条的位置和样式细节,建议采用 miniframes,加上 subsection=false 选项取消在顶边导航条中显示当前小节标题

1
\useoutertheme[subsection=false]{miniframes}

内部主题设定演示文稿正文内容(例如标题、列表、定理等)的样式,\useinnertheme{} 命令支持如下选项:

  • default:默认值,其定义了论文题名、作者姓名、各种列表、插图以及表格标题、各种模块、摘要、脚注以及参考文献等文本元素的样式;
  • circles:将 itemize item 中的小三角改为小圆盘,排序列表 enumerate items 添加背景小圆盘,目录中每个条目前加一个小圆盘;
  • rectangle:将 itemize item 中的小三角改为小方块,排序列表 enumerate items 添加背景小方块,目录中每个条目前加一个小方块;
  • rounded:将 itemize item 中的小三角改为小圆,排序列表 enumerate items 添加背景小圆,目录中每个条目前加一个小圆,题名和各种模块的背景框由直角变更为圆弧,其有下列参数:shadow 给各种木块添加阴影,以满足立体感。

定制主题

Beamer 各部分的样式都可以自己定制和修改,并且不需要使用 LaTeX 较低层的命令,Beamer 已经提供了丰富的定制命令接口。
通常从下面几个角度来定制自己的主题:

  1. 选择基础主题,\usetheme{}, \usefonttheme{}, \usecolortheme{}, \useoutertheme{}, \useinnertheme{}
  2. 定制模板,\setbeamertemplate{}
  3. 定制颜色,\setbeamercolor{}
  4. 定制字体,\setbeamerfont{}

例如选择下面的基础主题

1
2
3
4
5
\usetheme{default}
\usecolortheme{default}

% 应用一个外部主题,选项表示不显示 subsection 层面的导航信息
\useoutertheme[subsection=false]{miniframes}

下面是一些涉及定制样式的常见代码。

标题页样式

代码和作用如下

1
2
3
4
5
6
7
8
9
% Beamer 用于定义标题页样式的模板命令。
% [default]: 表示使用默认的标题页样式作为基础。
% [colsep=-4bp]: 设置列之间的间距为 -4bp(负值表示列之间的重叠)。
% [rounded=true]: 启用标题页元素的圆角效果。
% [shadow=true]: 启用标题页元素的阴影效果。
\setbeamertemplate{title page}[default][colsep=-4bp,rounded=true,shadow=true]

% 设置标题的颜色,背景为 structure 颜色,文本为白色
\setbeamercolor*{title}{use=structure,fg=white,bg=structure.fg}

head/foot 样式

代码和作用如下

1
2
% 设置 head/foot 的颜色,背景为 structure 颜色,文本为白色
\setbeamercolor{section in head/foot}{fg=white, bg=structure}

修改证明环境

证明环境的默认提示词为 Proof,有时希望修改为中文,可以使用下面的代码

1
\renewcommand{\proofname}{证明}

在证明环境中默认以空心方框表示证明结束,可以用下面的代码删除或修改证毕符号

1
2
3
4
5
% 删除
\def\qedsymbol{}

% 修改为实心矩形
\setbeamertemplate{qed symbol}{$\blacksquare$}

删除导航按钮

Beamer 默认在每一个页面的最底层添加了一行可以跳转到不同页面的按钮,但是通常没人会使用这些,可以用下面的代码禁用它们,使页面显得更加干净

1
\setbeamertemplate{navigation symbols}{}

底栏显示页码

使用下面的配置可以在底栏(底部导航栏的下面)的右下角显示页码,例如 11/22

1
\setbeamertemplate{footline}[frame number]{}

修改文献列表图标

默认的文献列表的图标很丑,可以修改一下,例如

1
2
\usepackage{fontawesome5}
\setbeamertemplate{bibliography item}{\faFile*[regular]}

效果如下

但是这种做法因为字体原因会产生一些无关紧要的警告。

目录样式

默认情况下,Beamer 不会给 section 和 subsection 编号,下面的代码可以开启编号:

1
2
\setbeamertemplate{section in toc}[sections numbered]
\setbeamertemplate{subsection in toc}[subsections numbered]

block 样式

我们可以通过 \setbeamertemplate{blocks}[Options] 修改 block 环境的形状(会影响所有 block 和定理类环境),常见预定义选项有 [rounded](圆角矩形)和 [shadow=true](添加阴影)。例如:

1
\setbeamertemplate{blocks}[rounded][shadow=true]

block 的颜色也可以通过 \setbeamercolor 定制,可以具体到每一种 block 环境(blockalertblockexampleblock),分别调整 title 和 body 的前景色和背景色:

1
2
3
4
5
6
7
8
9
10
11
% 标准 block
\setbeamercolor{block title}{bg=cyan, fg=white}
\setbeamercolor{block body}{bg=cyan!10}

% 警告 block
\setbeamercolor{block title alerted}{fg=white, bg=orange}
\setbeamercolor{block body alerted}{bg=orange!25}

% 示例 block
\setbeamercolor{block title example}{fg=white, bg=teal}
\setbeamercolor{block body example}{bg=teal!25}

也可以基于主题色进行深浅调整:

1
2
\setbeamercolor{block body}{bg=structure!10}
\setbeamercolor{block title}{bg=structure!20}

这里 !20 表示在基础颜色上以 20% 的 RGB 数值混合白色,得到更淡的颜色。定理类环境相当于标准 block 的具体实现,样式与标准 block 一致,Beamer 不直接支持对各个定理类环境分别设置样式。

列表样式

默认主题的列表样式比较简陋(无序列表一级为三角形,有序列表默认编号也不够美观)。Beamer 提供了自己的模板接口来修改这些样式,不建议使用 enumitem 宏包(二者都有列表深度定制,容易冲突)。例如修改无序列表符号:

1
2
3
4
% 无序列表符号
\setbeamertemplate{itemize item}{\textbullet} % 一级:实心圆点
\setbeamertemplate{itemize subitem}{--} % 二级:短横线
\setbeamertemplate{itemize subsubitem}{*} % 三级:星号

也可以使用 Beamer 预设的样式组,一次性设置所有层级的符号:

1
2
3
4
\setbeamertemplate{itemize items}[circle]       % 所有层级用圆点
\setbeamertemplate{itemize items}[triangle] % 所有层级用三角
\setbeamertemplate{itemize items}[square] % 所有层级用方块
\setbeamertemplate{itemize items}[ball] % 所有层级用反色圆

对于有序列表,同样支持预设样式和自定义:

1
2
3
4
5
6
7
8
9
% 使用预设
\setbeamertemplate{enumerate items}[default] % 默认数字编号
\setbeamertemplate{enumerate items}[circle] % 带圆盘的数字
\setbeamertemplate{enumerate items}[square] % 带方块的数字
\setbeamertemplate{enumerate items}[ball] % 带反色圆的数字

% 自定义编号格式(类似于 \renewcommand{\labelenumi} 等)
\setbeamertemplate{enumerate item}{\alph{enumi})} % a) b) c)
\setbeamertemplate{enumerate subitem}{\roman{enumii}.} % i. ii. iii.

开启图表编号

默认 Beamer 不会给图表编号,下面的代码可以开启

1
\setbeamertemplate{caption}[numbered]

如果只想给图片添加说明文字,但不希望生成编号,可以使用 \caption*{} 替换 \caption{}

修改字体大小

默认情况下 \institute{} 的字体很小,在机构名称很长时看不清,下面的代码可以调整为正常大小

1
\setbeamerfont{institute}{size=\normalsize}

下面是对脚注字体大小的设置

1
\setbeamerfont{footnote}{size=\tiny}

Beamer 常用宏包

Beamer 常用宏包如下,提供对数学,图表,链接,还有算法和代码环境的基础支持。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
% fonts
\usepackage[T1]{fontenc}
\usepackage{mathrsfs}
\usepackage{calligra}
\usepackage{bm}

% math
\usepackage{amsmath,amsthm,amsfonts,amssymb}

\usepackage{extarrows}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{multicol}

\usepackage{hyperref}
\hypersetup{
colorlinks=true,linkcolor=,urlcolor=cyan
}

\usepackage{graphicx}
\graphicspath{
{./figure/}{./figures/}{./image/}{./images/}{./graphic/}{./graphics/}{./picture/}{./pictures/}
}
\usepackage{subcaption}

\usepackage[ruled,linesnumbered,noline]{algorithm2e}

\usepackage{listings}

补充

中文支持

对于 Beamer 的中文支持,有两种选择:第一种是直接使用 ctexbeamer,第二种是导入 ctex 宏包。

1
2
3
4
\documentclass{beamer}
\usepackage[UTF8]{ctex}

...

这些与普通的 LaTeX 文档没有区别,因此不作详细讨论。

手稿模式

Beamer 提供了 handout 模式用于呈现不同的演示文稿版本。

第一个作用是在 PDF 中只呈现页面的最终效果,以含有动态效果的一个页面为例,默认 PDF 会将动态效果变化过程的每一帧呈现出来,
但是加入 handout 选项只会呈现最终结果的页面,这使得生成的 PDF 适合阅读而非放映

第二个作用是我们可以在某些 frame 中标记 <handout:0>,则 handout 模式下不会显示。

1
2
3
4
5
\documentclass[handout]{beamer}

\begin{frame}<handout:0>
This frame will be ignored in handout.
\end{frame}

这个标记在非 handout 模式下无效,frame 会正常显示。

打印讲稿

我们可能需要在 A4 纸中提前打印讲稿的内容,并且为了节约纸张,需要将多张幻灯片排布在单面 A4 纸中,可以使用 pgfpages 宏包以及下面的配置

1
2
3
4
5
6
7
\usepackage{pgfpages}

\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]
% or
\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm, landscape]
% or
\pgfpagesuselayout{4 on 1}[a4paper,border shrink=5mm, landscape]

这里 2 on 1 代表一面有两个幻灯片,4 on 1 代表一面有四个幻灯片,landscape 代表横向排列。

block 中嵌入表格

一个可能的需求是如何在 block 环境中嵌入表格,与通常的 table 环境包裹 tabular 环境不同,在 block 中应该直接使用 tabular 环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
\begin{frame}{Tables in Beamer Blocks}
\begin{alertblock}{Table inside an alert block}
A very important table.

\centering
\begin{tabular}{|c|c|}
\hline
\multicolumn{2}{|c|}{Meals} \\ \hline
Breakfast & Spam \\ \cline{2-2}
& Eggs \\ \hline
\end{tabular}
\end{alertblock}
\end{frame}

效果如下(基于 Madrid 主题)

使用算法环境

如果需要在 frame 中加入算法,例如使用 algorithm2e 宏包,必须在算法环境中加上 H 选项否则会编译报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\usepackage{algorithm2e}

\begin{frame}
\begin{algorithm}[H]
\caption{Euclid's algorithm}
\KwData{Two nonnegative integers $a$ and $b$}
\KwResult{Their greatest common divisor $d = \gcd(a, b)$}
\While{$b \neq 0$}{
$r \leftarrow a \bmod b$\;
$a \leftarrow b$\;
$b \leftarrow r$\;
}
$d \leftarrow a$\;
\end{algorithm}
\end{frame}

使用抄录环境

在 Beamer 的 frame 中使用 \verb 命令可能需要给 frame 加上额外的选项,否则会编译错误。

1
2
3
\begin{frame}[fragile]
Demo: \verb!\frame{hellobeamer}!。
\end{frame}

这个选项将导致 Beamer 将该 frame 环境的全部内容先写在一个名为 filename.vrb 的临时文件里再处理。

对于 listings 宏包的使用,也需要对 frame 加上 [fragile] 选项。

长度单位

为了进行尺寸的微调,有必要了解 LaTeX 中的长度单位,分为绝对单位和相对单位两种,后者随字体和字号变化。

绝对单位如下:

单位 含义 换算关系
pt TeX point 1 pt = 1/72.27 in
bp big point,常用于 PDF 图形尺寸 1 bp = 1/72 in
in 英寸 1 in = 72.27 pt = 72 bp
cm 厘米 1 cm = 28.45 pt
mm 毫米 1 mm = 2.845 pt
pc pica 1 pc = 12 pt

相对单位如下:

单位 含义 换算关系
em 当前字体中一个 M 的宽度,常近似为当前字号 随字体和字号变化
ex 当前字体中小写 x 的高度 随字体和字号变化,通常约为 0.5em
\baselineskip 当前行基线之间的距离 随字号和行距设置变化,通常略大于当前字号

其中 ptcmmm 等适合指定固定尺寸,emex\baselineskip 等会随当前字体环境变化,更适合局部排版微调。

演讲者备注

Beamer 的 note 功能用于添加演讲者备注,方便演讲时查看但不显示给观众,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{beamer}

\setbeameroption{show notes}

\begin{document}

\begin{frame}{Example Slide}
This is the main slide content.

\note{Here is a note.}
\end{frame}

\end{document}

默认情况下不会显示备注,但是可以通过如下命令开启,也可以在 Beamer 文档类选项中加入 notes 选项。

1
\setbeameroption{show notes}

此时会在 frame 后面创建一个单独的 frame 展示备注,效果如下

演讲者可以用不带备注的版本展示,带备注的版本则用于参考。

编写进度标记

在编写 Beamer 的过程中,可以先搭建好整体框架:

  • 包括几个部分
  • 每个部分有几个 frame
  • 每一个 frame 的标题

然后完成 frame 的内容,可以在每一个 frame 的标题中添加特殊标记表示当前 frame 的编写进度,便于查看,例如

1
2
3
4
5
6
7
8
9
10
11
\newcommand{\todo}{\textcolor{white}{\colorbox{red}{\textbf{TODO}}}}
\newcommand{\draft}{\textcolor{white}{\colorbox{orange}{\textbf{DRAFT}}}}
\newcommand{\done}{\textcolor{white}{\colorbox{green}{\textbf{DONE}}}}

\begin{frame}{XXX \todo}

\end{frame}

\begin{frame}{XXX \draft}

\end{frame}