LaTeX Beamer 笔记
系统地整理一下 Beamer 的笔记,之前的使用只是基于某个模板的临时使用,当前的目标是整理一个简洁的自用 Beamer 模板。
注意到 Beamer 虽然属于LaTeX的一部分,但是与标准的 LaTeX 文档有很多的不同,部分 LaTeX 宏包和命令可能无法在 Beamer 上呈现正常的效果,这也意味着 Beamer 的编译错误更难改正。
笔记主要参考 latex-beamer.com 的英文在线教程和若干博客。
当前模板的两种风格效果如下图,模板存放在Github仓库:latexzero。
极简示例
从一个最简单的例子开始
1 | \documentclass{beamer} |
效果如下
在示例中使用了一个名为 AnnArbor 的 Beamer 主题,添加了作者和日期,并以此生成了标题页面。
标题页被包裹着 frame 环境中,frame 环境是 Beamer 的核心环境,作用相当于PPT中的一页。
在 frame 外的内容可能会被 LaTeX 用奇怪的方法排版到幻灯片上,影响效果,因此尽可能将所有正文分别放在不同的 frame 中。
为了避免不同主题的干扰,下面的效果图通常是基于默认主题的。
文档类选项
下面是几个常见的导入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 | \begin{frame}[plain] |
或者也可以直接使用通常的 \maketitle 命令,此时不用包裹在 frame 之中。(两者的效果大致等价,但是可能略有区别)
1 | \maketitle |
标题页会显示的基本元素包括:
\title{},主标题\subtitle{},子标题\author{},多个作者可以使用\and命令连接\date{},当前日期使用\date{\today}\institute{},机构
对于作者,可以使用 ~ 连接姓名确保姓和名不会被换行符分开
1 | \author{First~Author \and |
如果多个作者分别属于不同的机构,可以参考下面的代码
1 | \author{First~Author\inst{1} \and Second~Author\inst{2}} |
可以通过 \thanks{} 添加作者的邮箱,和其他 LaTeX 文档类一样,邮箱会在脚注中显示,例如
1 | \author{Author\thanks{\texttt{xxx@gmail.com}}} |
在某些模板中,作者和单位、演示文稿标题和日期等信息会默认显示在每一页底部的脚注中,有时信息过长无法显示,可以在添加信息时加入简称,例如
1 | \title[<short one>]{<long title>} |
也可以设置简称为空,从而取消脚注,例如 \title[]{Presentation title}。
在演示文稿中添加徽标是一个很常见的需求,可以在导言区添加如下代码
1 | \logo{ |
徽章会出现在每一页的固定位置,默认位置由主题决定,可能出现在右下角,更改徽章位置可以使用tikz等宏包完成。
一个更常见的需求是只在标题页中呈现标志,可以改为
1 | \titlegraphic{ |
此时标志图片只会在标题页出现,默认位置通常为正中偏下的位置。
目录页
使用下面的命令可以创建目录页
1 | \begin{frame}{Outline} % or Contents |
可以使用 \section*{References} 将章节从目录中隐藏,可以添加如下选项在目录中隐藏所有的子章节
1 | \tableofcontents[hideallsubsections] |
可以使用下面的命令,在进入每一个section和subsection时复现一次目录
1 | \AtBeginSection[]{ |
默认情况下,Beamer 对自动生成的目录页也会记入页码并在页脚中显示,如果希望其不计入页码和显示页码,可以加上选项 noframenumbering 和 plain,例如
1 | \AtBeginSection[] |
默认情况下,Beamer 可能不会给 section 和 subsection 编号,下面的代码可以开启编号
1 | \setbeamertemplate{section in toc}[sections numbered] |
frame 环境
frame 的基本使用如下,可以设置主标题,副标题以及额外选项,它们都是可选的。
1 | % Frame environment |
也可以使用单独命令添加主标题和副标题
1 | \begin{frame} |
frame 环境还支持如下的用法,即使用 \frame 命令
1 | \frame{ |
frame 的选项例如 [t][c][b] 指定文本在页面中竖直方向的对齐方式:向上,居中或向下,默认是竖直居中的,可以进行如下修改
1 | \begin{frame}[b] |
可以使用 [plain] 选项来移除当前 frame 的顶部和底部细节,通常用于标题页展示纯净的页面
1 | \begin{frame}[plain] |
columns 环境
演示文稿的一个常见需求是:对单个页面进行竖向拆分得到左右两列,分别添加不同的文字或者图文进行对比,也可以用来并列两个图片,
这些需求都可以通过 columns 环境实现,在使用中需要为每一列指定宽度,通常取为 \textwidth 的一个比例长度,各列长度和不超过 \textwidth。
有两种具体用法,第一种是直接使用 \column{0.6\textwidth} 命令,第二种是使用 column 环境
1 | \begin{column}{0.6\textwidth} |
例如按照6:4的比例拆分,分别排版不同的文字
1 | \begin{frame}{Columns in beamer} |
效果如下
可选\centering保持在每一部分居中对齐。
或者一列排版文字,另一列放置图片
1 | \begin{frame}{Text and Image in beamer} |
效果如下
有时需要在左右两列中间添加分隔线,一种实现方法为划分成三列,中间列的宽度极小,并且只包含一条竖线。
1 | \begin{frame}{Vertical line between columns} |
效果如下
可以通过在列环境之后分别添加 [T]、[b] 或 [c] 选项进行顶部对齐、底部对齐和中心对齐,实现不同列的内容对齐,例如
1 | \begin{frame}{Vertical alignment} |
block/定理类环境
Beamer 预定义了很多诸如定理和证明的定理类环境,还有一般的 block 环境,这些环境的默认表现与主题非常相关,例如默认主题 default 显示的效果非常简单,默认主题 Madrid 呈现的效果具有数学风格。
这部分的示意图都采用了
Madrid主题。
基本使用
下面是常见的block环境和定理类环境:
- block环境
- 通用/标准block:
\begin{block}...\end{block} - 示例block(exampleblock):
\begin{exampleblock} ... \end{exampleblock} - 警告block(alertblock):
\begin{alertblock}...\end{alertblock}
- 通用/标准block:
- 定理类环境
- 定理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}
- 定理theorem:
其中定理类环境有默认标题,可以使用 [] 添加可选的额外标题,例如
1 | \begin{frame} |
效果如下
block环境的标题参数是必选参数,否则会自动将内容的第一个字母提升为标题,例如
1 | \begin{frame} |
效果如下(注意最后一个block因为缺少标题,第一个字母被提升为标题)
下面考虑修改各种block环境和定理类环境的样式和颜色。
样式修改
我们可以通过使用命令来修改块的形状:\setbeamertemplate{blocks}[Options],这会影响上面所有的block环境样式。
常见预定义选项有:
[rounded]:使矩形变成圆角矩形[shadow=true]:如果阴影设置为 true,则在块后面描绘阴影。
例如在导言区添加
1 | \setbeamertemplate{blocks}[rounded][shadow=true] |
颜色修改
block 环境的颜色默认取决于主题,但是我们同样可以在不改变主题的基础上,改变 block 的颜色细节,并且可以具体到每一种 block 环境。
定理类环境相当于标准 block 环境的具体实现,因此通常情况下,定理类环境和标准 block 环境有相同的样式。
对每一种 block 环境,可以调整的颜色细节包括:
- title 的背景色
- title 的前景色
- body 的背景色
- body 的前景色
例如
1 | % 1- block title (background and text) |
再例如
1 | \setbeamercolor{block body}{bg=structure!10} |
注意:
- 这里
!20等代表在基础颜色的基础上进行颜色的深度调整,即 RGB 数值的百分比衰减,得到更淡的颜色; - Beamer 不直接支持对定理类环境的各个具体环境分别设置样式,当然这可以通过更底层的命令实现。
列表环境
相比于大段文字的堆砌,演示文稿中更推荐的是呈现关键信息的列表。
Beamer直接支持LaTeX的有序列表,无序列表和描述列表,并且支持嵌套和列表配置的宏包等,例如
1 | \begin{frame}{Nested Lists in Beamer} |
对于演示文稿中的列表,有下面几种常见问题以及对应的处理。
列表过长可能需要分页展示,此时需要考虑的是列表计数器的设置,例如
1 | % Define a counter |
这里的配置包括三部分:
- 在导言区定义了计数器;
- 前一页的列表最后设置了计数器的值;
- 在后一页的列表中使用了计数器的值。
有时列表的每一项之间的行间距过小,但是只有两三个项,导致排版非常不美观,可以用 \vspace{} 命令直接修改局部的行间距,不影响其它文本的行间距
1 | \begin{frame}{Add space between items} |
效果如下
可以使用
\linespread{xxx}改变全局的行间距的倍数。
除了使用 \vspace{} 命令插入指定数值的竖直间距,也可以使用下面的命令插入竖直间距
1 | \smallskip % 小空白(~3pt) |
默认主题的列表序号样式很丑,可以改成简单的数字或罗马字母等,配置与LaTeX一样,需要 enumitem 宏包支持(这个宏包的导入会破坏前面的计数器,原因不明)
1 | \usepackage{enumitem} |
Beamer本身也提供了关于列表的样式修改命令,例如
1 | \setbeamertemplate{itemize item}{\textbullet} |
内部排版
记录一下关于页面内部排版的几个细节需求。
默认的分段在演示文稿中是不明显的,我们可以在段尾添加 \\~\\ 产生更明显的分段效果,实质上是加了一个空行,例如
1 | \begin{frame} |
此时会在12和3之间产生明显的宽度为一个空行的分段效果,效果如下
虽然LaTeX本身提供了粗体斜体等排版命令,但是Beamer可以通过一个 ulem 宏包达到更丰富的效果(除了数学公式中,那里仍然需要 bm 宏包)。
示例如下
1 | \usepackage{ulem} |
各个命令的解释如下:
\uline{}:下划线\uuline{}:双层下划线\uwave{}:波浪下划线\dashuline{}:下划虚线\dotuline{}:点下划线\sout{}:删除横线\xout{}:删除斜线
效果如下
改变颜色仍然可以使用 xcolor 宏包,Beamer默认已经导入这个宏包,因此可以直接使用,例如
1 | {\color{blue} This is a blue block.} |
参考文献
Beamer对于参考文献的使用与LaTeX文档有很大的不同,不建议使用编号,在引用时通常使用作者+年份。
1 | \usepackage[style=authoryear]{biblatex} |
在引用的frame中可以通过脚注立刻显示对应参考文献条目,适合只有一两个参考文献的情形,过多时会影响排版美观。
例如
1 | \begin{frame} |
效果如下
注意:setspace这个调整间距的宏包可能导致脚注无法显示,在使用参考文献作为脚注时建议移除这个宏包;
对于参考文献较多的情况,可以只显示参考文献的作者名和年份(通常已经足够确定一篇文献),例如
1 | \begin{frame}{Reference} |
效果如下
可以通过重定义\cite的方式给它加上颜色(虽然 hyperref 宏包也支持给引用设置颜色,但是对于作者和年份,它居然蠢到只给年份部分加颜色,可以手动把作者部分也调整为一样的颜色,或者把 hpyerref 的 cite 颜色设置为空)
1 | \let\oldcite\cite |
效果如下
当然,也可以完全手动实现,例如
1 | \textnormal{\small[O. Koch and C. Lubich. 2007]} |
在最后可以使用单独的参考文献列表,例如
1 | \begin{frame}{References} |
这里heading=none是为了避免创建一个名为References的section。
有时参考文献太多了,beamer展示非常不美观,多余的内容会隐藏到下方,而不是自动跨页。
需要给frame环境添加allowframebreaks选项,允许自动将多余内容排版到下一页。
更好的做法是只展示其中重要的一部分文献,例如
1 | \begin{frame}{Selected References} |
此时需要手动给希望展示的条目加上keywords = {important}字段。效果如下
结束页
某些情景下需要有专门的结束页,通常一个谢谢即可。此时页面文字很少,需要注意排版让文字居中,例如可以使用 \centerline 或 center 环境或者其他命令。
1 | \begin{frame} |
相比于一般的汇报展示,学位答辩等重要场合可能需要更礼貌一些,例如
1 | \begin{frame} |
注意:
- 某些人喜欢抠字眼,觉得 “感谢聆听” 中的聆听不够礼貌,避免即可。
- 还有一些情景,反而不推荐用单独的谢谢作为一个结束页,此时最后一页的内容可以是总结展望,也可以是列举主要参考文献,或者其他内容,注意区分。
动态效果
在汇报用的演示文稿中加入花哨的动态效果是极其不推荐的,但是 Beamer 仍然支持一些简单的效果,就像 PowerPoint 一样,这里简单了解一下。
在很多Beamer环境中,允许使用<...>添加与动态效果相关的参数,这里全部略去。
下面的例子使用 \pause 暂停命令,这意味着演讲者需要手动确认一次才会继续展示列表的下一项,直至完全呈现。
1 | \begin{frame}{Creating Overlays in Beamer}{Pause command} |
\pause 也可以使用在段落中。更常见的是下面这种做法,可以精确调控每一帧显示哪些项
1 | \begin{frame} |
主题
整体主题
通常在导言区的第二行立刻声明使用的整体主题,例如
1 | \documentclass{beamer} |
Beamer内置了27个整体主题,可以按照导航栏进行简单分类:
- 无导航栏:default、boxes、Bergen、Pittsburgh、Rochester
- 带顶部导航栏:Antibes、Darmstadt、Frankfurt、JuanLesPins、Montpellier、Singapore
- 带底部导航栏:Boadilla、Madrid
- 带顶部和底部导航栏:AnnArbor、Berlin、CambridgeUS、Copenhagen、Dresden、Ilmenau、Luebeck、Malmoe、Szeged、Warsaw
- 带侧边栏:Berkeley、Goettingen、Hannover、Marburg、PaloAlto
一般很少有人使用带侧边栏的主题,顶部导航栏看起来更加自然。
一个整体主题实际上主要是下面四种细分主题的组合搭配(加上一些细节调整),例如default主题实质为
1 | \usefonttheme{default} |
而Boadilla主题实质为
1 | \usefonttheme{rose} |
如果需要定制整体主题,基于default进行修改是一个非常好的选择。
细分主题
Beamer将主题拆分为了下面四个部分:
- 字体主题,
\usefonttheme{} - 颜色主题,
\usecolortheme{} - 内部主题,
\useinnertheme{} - 外部主题,
\useoutertheme{}
Beamer字体主题支持全局地设置字体风格,\usefonttheme{}命令支持如下选项:
- default:(默认)各种标题和文本字体均为无衬线的等线体,数学式中的字体为等斜线体。为标题、标题和页脚等元素使用不同的字体大小,但不使用粗体或斜体进行突出显示。
- serif:使所有文本都使用默认衬线字体(直立罗马体)进行排版。
- structurebold:通常的文本是无衬线字体,但是标题、脚线和各种导航条中的标题和文本变更为粗体。
- structureitalicserif:与 structurebold 类似,但是标题、脚线和各种导航条中的标题和文本变更为斜罗马体。
- structuresmallcapsserif:与 structurebold 类似,但是标题、脚线和各种导航条中的标题和文本变更为小型大写字体。
- professionalfonts:(专业字体选项)这个选项抑制了Beamer对字体的自动修改,将其留给其它宏包进行处理。
值得注意的是,与article等文档不同,beamer考虑到投影后的辨识度,
默认全局采用了无衬线字体,这看起来有些奇怪,尤其是在数学公式中的符号。
颜色主题设定演示文稿的各部分各结构各元素的配色,\usecolortheme{} 命令支持如下选项:
- 基本颜色:default、sidebartab、structure;
- 完整颜色:albatross(信天翁)、beaver(海狸)、beetle(甲壳虫)、crane(鹤)、dove(鸽子)、fly(苍蝇)、seagull(海鸥)、wolverine(狼獾);
- 内部颜色:lily(百合)、orchid(兰花)、rose(玫瑰);
- 外部颜色:dolphin(海豚)、seahorse(海马)、whale(鲸鱼)。
外部主题设定演示文稿是否有顶栏、底栏和侧栏,以及它们的结构,\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已经提供了丰富的定制命令接口。
通常从下面几个角度来定制自己的主题:
- 选择基础主题,
\usetheme{},\usefonttheme{},\usecolortheme{},\useoutertheme{},\useinnertheme{} - 定制模板,
\setbeamertemplate{} - 定制颜色,
\setbeamercolor{} - 定制字体,
\setbeamerfont{}
例如选择下面的基础主题
1 | \usetheme{default} |
下面是一些涉及定制样式的常见代码。
标题页样式
代码和作用如下
1 | % Beamer用于定义标题页样式的模板命令。 |
head/foot 样式
代码和作用如下
1 | % 设置head/foot的颜色,背景为structure颜色,文本为白色 |
修改证明环境
proof环境的提示词为Proof,有时希望修改为中文,可以使用下面的代码
1 | \renewcommand{\proofname}{证明} |
在proof环境中默认以空心方框表示证明结束,可以用下面的代码删除或修改证毕符号
1 | % 删除 |
删除导航按钮
beamer默认在每一个页面的最底层添加了一行可以跳转到不同页面的按钮,但是通常没人会使用这些,可以用下面的代码禁用它们,使页面显得更加干净
1 | \setbeamertemplate{navigation symbols}{} |
底栏显示页码
使用下面的配置可以在底栏(底部导航栏的下面)的右下角显示页码,例如11/22
1 | \setbeamertemplate{footline}[frame number]{} |
优化列表样式
默认的无序列表和有序列表的样式可能很丑,例如无序列表一级默认是三角形,可以使用下面的代码修改
1 | % 设置无序列表的样式,小圆点 |
开启图表编号
默认Beamer不会给图表编号,下面的代码可以开启
1 | \setbeamertemplate{caption}[numbered] |
修改字体大小
默认情况下 \institute{} 的字体很小,在机构名称很长时看不清,下面的代码可以调整为正常大小
1 | \setbeamerfont{institute}{size=\normalsize} |
下面是对脚注字体大小的设置
1 | \setbeamerfont{footnote}{size=\tiny} |
Beamer 常用宏包
Beamer 常用宏包如下,设置正文字体(英文)为palatino,其它宏包提供对数学,图表,链接,还有算法和代码环境的基础支持。
1 | % fonts |
补充
中文支持
对于beamer的中文支持,有两种选择:第一种是直接使用ctexbeamer,第二种是导入ctex宏包。
1 | \documentclass{beamer} |
这些与普通的LaTeX文档没有区别,因此不作详细讨论。
手稿模式
Beamer提供了handout模式用于呈现不同的演示文稿版本。
第一个作用是在PDF中只呈现页面的最终效果,以含有动态效果的一个页面为例,默认PDF会将动态效果变化过程的每一帧呈现出来,
但是加入handout选项只会呈现最终结果的页面,这使得生成的PDF适合阅读而非放映。
第二个作用是我们可以在某些frame中标记 <handout:0>,则handout模式下不会显示。
1 | \documentclass[handout]{beamer} |
这个标记在非handout模式下无效,frame会正常显示。
打印讲稿
我们可能需要在A4纸中提前打印讲稿的内容,并且为了节约纸张,需要将多张幻灯片排布在单面A4纸中,可以使用 pgfpages 宏包以及下面的配置
1 | \usepackage{pgfpages} |
这里 2 on 1 代表一面有两个幻灯片,4 on 1 代表一面有四个幻灯片,landscape 代表横向排列。
block 中嵌入表格
一个可能的需求是如何在block环境中嵌入表格,与通常的table环境包裹tabular环境不同,在block中应该直接使用tabular环境。
1 | \begin{frame}{Tables in Beamer Blocks} |
使用算法环境
如果需要在 frame 中加入算法,例如使用 algorithm2e 宏包,必须在算法环境中加上H选项否则会编译报错。
1 | \begin{frame} |
使用抄录环境
在Beamer的frame中使用 \verb 命令可能需要给frame加上额外的选项,否则会编译错误。
1 | \begin{frame}[fragile] |
这个选项将导致 Beamer 将该 frame 环境的全部内容先写在一个名为 filename.vrb 的临时文件里再处理。
对于
listings宏包的使用,也需要对 frame 加上[fragile]选项。
演讲者备注
Beamer 的 note 功能用于添加演讲者备注,方便演讲时查看但不显示给观众,例如
1 | \documentclass{beamer} |
默认情况下不会显示备注,但是可以通过如下命令开启,也可以在 Beamer 文档类选项中加入 notes 选项。
1 | \setbeameroption{show notes} |
此时会在 frame 后面创建一个单独的 frame 展示备注,效果如下
演讲者可以用不带备注的版本展示,带备注的版本则用于参考。
编写进度标记
在编写beamer的过程中,可以先搭建好整体框架:
- 包括几个部分
- 每个部分有几个frame
- 每一个frame的标题
然后完成frame的内容,可以在每一个frame的标题中添加特殊标记表示当前frame的编写进度,便于查看,例如
1 | \newcommand{\todo}{\textcolor{white}{\colorbox{red}{\textbf{TODO}}}} |