前言

beamerLaTeX的一个宏包,其功能为使用LaTeX进行演示文稿,也就是PPT的制作。其格式简洁,可以让使用者不用过多关注PPT的格式与排版,而专注在内容的输出上,因此在各种学术报告中常常会见到使用beamer制作的演示文稿。

本文并非系统的LaTeXbeamer的教程,而是旨在快速上手,使用beamer默认的格式做出一个PPT来。文中代码的运行环境为MiKTeX,编译器为XeLaTeX

模板简介

一个beamer可以被划分为以下几个结构,首先是第一行的\documentclass{beamer},其作用为声明这是一个beamer。然后是预定义区,例如设定字体,导入第三方库,以及最重要的设定标题等信息都是在这个区内完成,当然,这个区不需要特别声明,只要写在声明之后与下一个区之前即可。最后是PPT区,其以\begin{document}开始,以\end{document}结束,这里就是用来写PPT的,其中每一页普通的PPT都是以\begin{frame}开始,以\end{frame}结束,每一页PPT的具体内容就是写在这两行代码中间。至于特殊页,后面会单独提到。

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

% 预定义区
\title{beamer简易入门} % 标题
\author{Hancanon} % 作者
\date{2077} % 时间

% PPT区
\begin{document} % 声明PPT的开始

\frame{\titlepage}

% 一页一般的PPT
\begin{frame} % 声明一页PPT的开始

\frametitle{标题}

\end{frame} % 声明一页PPT的结束

\end{document} % 声明PPT的结束

预定义区

导入第三方库

首先是第三方库的导入,其使用\usepackage{库名}的命令来导入。下面介绍一些常用的库,例如最重要的中文字体库,LaTeX本身并不支持中文,想要在LaTeX写中文就需要借助第三方库,这里我使用的是xeCJK库,其使用\setCJKsansfont{字体}命令来设定字体。再例如三线表库booktabs,可以让我们方便的绘制三线表。现在将导入第三方库的代码加入我们的模板中

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
29
30
% 声明beamer
\documentclass{beamer}

% 预定义区

% 导入包
\usepackage{xeCJK}
\usepackage{booktabs} % 三线表

% 选择中文字体
\setCJKsansfont{黑体}

% 基本信息
\title{beamer简易入门} % 标题
\author{Hancanon} % 作者
\date{2077} % 时间

% PPT区
\begin{document} % 声明PPT的开始

\frame{\titlepage}

% 一页一般的PPT
\begin{frame} % 声明一页PPT的开始

\frametitle{标题}

\end{frame} % 声明一页PPT的结束

\end{document} % 声明PPT的结束

主题

然后就是主题的设定,也就是你的PPT长什么样子,其使用\usetheme{主题名}进行设定,我们这里使用Madrid主题,这个主题长下面这样

image-20240510152607328

有没有很熟悉,尤其是数学专业的同学,对这个PPT封面应该不会陌生。长成这种样子的PPT,基本上都是用beamer做的。

基本信息

接着是基本信息,例如标题,作者,时间等,这类似于我们写代码的时候定义的变量,在PPT需要显示这些信息的时候就会调用这些基本信息中的内容。例如上面展示的封面页,就是调用的我们填入的基本信息生成的。下面我们来看一些常用的基本信息

1
2
3
4
5
6
\title[标题]{标题}  % 标题
\subtitle{副标题} % 副标题(可选)
\author[作者]{作者} % 作者
\institute[组织简称]{所属组织} % 所属组织
\date[20XX年11月20日]{20XX年11月20日} % 日期
\date[VLC 2021]{Very Large Conference, April 2021} % 会议/活动名称and日期,这里是overleaf上的例子

需要注意的是,其中的中括号的部分是指PPT最下面显示的内容,一般可以填一样的内容,当然想组织名称这种,中括号里可以填简称。

上面列举的是最常用的写法,还有一些特殊的写法,例如

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
% 两个作者的写法
\author[作者1, 作者2]{作者1\inst{1} \and 作者2\inst{2}} % 作者栏,用\and隔开,\inst{数字}代表作者编号
\institute[组织简称] % 所属组织栏
{
\inst{1} % 作者1所属组织
组织1名称
\and
\inst{2} % 作者1所属组织
组织2名称
}

% overleaf用例
\author[Arthur, Doe] % (optional, for multiple authors)
{A.~B.~Arthur\inst{1} \and J.~Doe\inst{2}}

\institute[VFU] % (optional)
{
\inst{1}%
Faculty of Physics\\
Very Famous University
\and
\inst{2}%
Faculty of Chemistry\\
Very Famous University
}

overleaf上的用例run出来长这样,大家可以参考一下

Beamer-titlepageUpdated.png

再比如我们答辩经常会在作者栏写上指导老师的名字,我们就可以这么写

1
2
3
4
5
\author[芙莉莲]
{
汇报人:芙莉莲 \\
指导老师:芙拉梅
}

其中\\代表换行,这在LaTeX环境中基本通用,效果大概是这样的

image-20240510162201558

完整代码为

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
29
30
31
32
33
34
35
36
37
38
% 声明beamer
\documentclass{beamer}

% 预定义区

% 导入包
\usepackage{xeCJK}
\usepackage{booktabs} % 三线表

% 选择中文字体
\setCJKsansfont{黑体}

% 基本信息
\title[弑魔魔法]{弑魔魔法}
\subtitle{基于杀人魔法的改良}

\author[芙莉莲]
{
汇报人:芙莉莲 \\
指导老师:芙拉梅
}

\institute[大陆魔法协会]{大陆魔法协会}
\date[辛逝纪29年]{辛逝纪29年}

% PPT区
\begin{document} % 声明PPT的开始

\frame{\titlepage}

% 一页一般的PPT
\begin{frame} % 声明一页PPT的开始

\frametitle{标题}

\end{frame} % 声明一页PPT的结束

\end{document} % 声明PPT的结束

PPT区

最后就到了PPT区,也就是正式开始写内容了。下面介绍的内容都需要写在\begin{document}\end{document}之间。在这个区种中,每一个页面可能是一行或者几行代码,我们只需要按顺序将每一个页面写上即可。

封面页

首先是封面页,也就是我们上面介绍基本信息时看到的页面。这是一种特殊页,只需要写一行代码\frame{\titlepage},就可以自动生成。

目录页

然后是目录页,这也是一种特殊页面,用下面的代码块生成

1
2
3
4
\begin{frame}
\frametitle{目录}
\tableofcontents
\end{frame}

大致效果如下

image-20240512153950947

现在还有一个问题,就是其生成的依据是什么。目录页借助特殊语句\section{部分名称}进行生成,该语句写在两个页面之间,表示到下一个\section为止,下面的页面都属于该部分,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\frame{\titlepage}  % 封面

\begin{frame}
\frametitle{目录}
\tableofcontents
\end{frame}

\section{部分1}

\begin{frame}
\frametitle{页面1}
\end{frame}

\begin{frame}
\frametitle{页面2}
\end{frame}

\section{部分2}

\begin{frame}
\frametitle{页面3}
\end{frame}

上述代码中,封面页与目录页不属于任何部分,而页面1与页面2属于部分1,页面3属于部分2。

当然,目录页还可以在不同部分的页面之间插入如下面的页面

image-20240512154404762

只需要在预定义区加入下面的代码块

1
2
3
4
5
6
7
\AtBeginSection[]
{
\begin{frame}
\frametitle{目录}
\tableofcontents[currentsection]
\end{frame}
}

将封面页与目录页加入代码,现在完整代码如下

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
% 声明beamer
\documentclass{beamer}

% 预定义区

% 导入包
\usepackage{xeCJK}
\usepackage{booktabs} % 三线表

% 选择中文字体
\setCJKsansfont{黑体}

% 目录生成
\AtBeginSection[]
{
\begin{frame}
\frametitle{目录}
\tableofcontents[currentsection]
\end{frame}
}

% 基本信息
\title[弑魔魔法]{弑魔魔法}
\subtitle{基于杀人魔法的改良}

\author[芙莉莲]
{
汇报人:芙莉莲 \\
指导老师:芙拉梅
}

\institute[大陆魔法协会]{大陆魔法协会}
\date[辛逝纪29年]{辛逝纪29年}

% PPT区
\begin{document} % 声明PPT的开始

\frame{\titlepage} % 封面

% 目录页
\begin{frame}
\frametitle{目录}
\tableofcontents
\end{frame}

% ------------------------------------------------------------------------------------
\section{背景介绍} % 标识下面的页面归属部分

% 第一页演示文稿
\begin{frame} % 定义演示文稿

\frametitle{背景介绍} % 演示文稿标题

\end{frame}

% ------------------------------------------------------------------------------------
\section{理论基础}

% ------------------------------------------------------------------------------------
\section{术式介绍}

% ------------------------------------------------------------------------------------
\section{应用场景}

\end{document} % 声明PPT的结束

普通页

介绍完特殊页,现在来到了普通页部分,也是内容的主要呈现部分。每一个普通页以\begin{frame}开始,以\end{frame}结束,该页面的标题由\frametitle{页面标题}定义。而一般的页面内容直接写即可,LaTeX会帮我们自动排版,需要注意的是,回车依旧是使用\\符号代表。例如下面的代码块

1
2
3
4
5
6
7
8
9
10
11
\begin{frame}  % 定义演示文稿

\frametitle{葬送的芙莉莲} % 演示文稿标题

打倒了魔王的勇者一行人的后日谈——在“那之后”的故事。 \\
身为魔法使的芙莉莲是一位精灵,她和另外三人有着不一样的地方。 \\
对于生活在“之后”的世界、感受到的事情有着不一样的看法…… \\
残存世间的人们所编织的,葬送与祈祷相伴的故事—— \\
从“冒险的结束”开始了。

\end{frame}

运行效果大致如下

image-20240513143257798

这里还需要补充一点,对于用惯了word刚接触LaTeX的同学来说,可能会出现想要在两行文字之间多加一个回车,但是不知道怎么加的情况。这里提供一个小偏方,就是之间在两行文字之间加入\indent\par,例如将上述代码块改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\begin{frame}  % 定义演示文稿

\frametitle{葬送的芙莉莲} % 演示文稿标题

打倒了魔王的勇者一行人的后日谈——在“那之后”的故事。 \\
\indent\par
身为魔法使的芙莉莲是一位精灵,她和另外三人有着不一样的地方。 \\
\indent\par
对于生活在“之后”的世界、感受到的事情有着不一样的看法…… \\
\indent\par
残存世间的人们所编织的,葬送与祈祷相伴的故事—— \\
\indent\par
从“冒险的结束”开始了。

\end{frame}

效果大概是这样

image-20240513145032287

接下来介绍一个beamer中使用频率极高的功能,那就是块。我们先来看看效果

image-20240513150531542

上述页面中的两个方框就是块。其类似于一个页中页,与页面一样具有标题与内容两个部分,用\begin{block}{块标题}\begin{end}定义,块内容写在定义代码之间,例如上述页面的完整代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\begin{frame}  % 定义演示文稿

\frametitle{背景与意义} % 演示文稿标题

\begin{block}{背景}
杀人魔法(Zoltraak),由“七崩贤”之一古瓦尔(クヴァール)开发出的最初的贯通魔法,能够击穿人们的防御魔法和魔抗装备,对人体进行穿透。拥有很强的威胁,造成了附近地区四成冒险者和七成魔法使的死亡。
\end{block}

\begin{block}{意义}
\begin{itemize}
\item 丰富了人类攻击魔法的理论
\item 克服了魔族对杀人魔法具有抗性的缺点
\item 有效提高人类对魔族的作战能力
\end{itemize}
\end{block}

\end{frame}

列表

在上面的意义部分我们已经见过列表了,熟悉markdown的同学应该对列表也不会陌生,列表分为有序列表与无序列表两种。其中,有序列表使用enumerate环境,即写在\begin{enumerate}\end{enumerate}之间,例如将上述部分代码修改为

1
2
3
4
5
6
7
\begin{block}{意义}
\begin{enumerate}
\item 丰富了人类攻击魔法的理论
\item 克服了魔族对杀人魔法具有抗性的缺点
\item 有效提高人类对魔族的作战能力
\end{enumerate}
\end{block}

则页面变为

image-20240514150807462

而无序列表使用itemize环境,也就是

1
2
3
4
5
6
7
\begin{block}{意义}
\begin{itemize}
\item 丰富了人类攻击魔法的理论
\item 克服了魔族对杀人魔法具有抗性的缺点
\item 有效提高人类对魔族的作战能力
\end{itemize}
\end{block}

上文已做过展示

图片

下面我们来介绍图片的插入,图片的插入并不止一种方式,这里我们介绍使用figure环境插入图片的方式,先来看示例代码段

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

\frametitle{弑魔魔法}

\ref{fig1}展示了弑魔魔法的使用效果

\begin{figure}
\centering % 图片居中
\includegraphics[width=0.5\textwidth]{弑魔魔法.png} % 插入图片
\caption{弑魔魔法使用效果}\label{fig1} % 图片名称与引用代称
\end{figure}

\end{frame}

效果如下

image-20240514171136343

首先来看\begin{figure}\end{figure}之间的部分,这是插入图片的主体部分。首先,\centering表示图片居中,而下面的\includegraphics[width=0.5\textwidth]{弑魔魔法.png}表示插入图片,其中{}中填入图片文件名称,图片与.tex文件在同一目录下即可。而width=后的数字填入图片宽度,其实就是图片大小,使用的时候自己调到合适的大小即可。最后是\caption{弑魔魔法使用效果}\label{fig1},其中\caption{}中填入图片名称,也就是展示在图题中的名称,而\label{}中填入引用代称,其用于在整个文档中任意地方使用\ref{引用代称}对图片进行引用,而不用因为图片编号的改变而手动修改。

还需要注意的是,直接使用figure环境是不会显示图片编号的,我们需要在预定义区加入以下代码,才可以达到跟上述一样的展示效果

1
\setbeamertemplate{caption}[numbered]  % 图表序号

表格

现在我们再来看看如何插入表格,这里我们使用table环境,并介绍三线表的实现,首先来看下列示例代码

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

\frametitle{勇者小队简介}

\ref{tab1}展示了勇者小队的成员

\begin{table}
\centering % 表格居中
\caption{勇者小队成员} % 表题
\label{tab1} % 引用代称

\begin{tabular}{cccc}
\toprule
序号 & 姓名 & 性别 & 职业 \\
\midrule
1 & 辛美尔 && 勇者 \\
2 & 艾泽 && 战士 \\
3 & 海塔 && 僧侣 \\
4 & 芙莉莲 && 魔法使 \\
\bottomrule
\end{tabular}
\end{table}

\end{frame}

效果如下

image-20240515204035886

插入表格的主体代码为\begin{table}\end{table}之间的部分,其中\centering表示居中,\caption{}中填入表题,\label{}中填入引用代称,可以在整个文档中任意地方使用\ref{引用代称}对图片进行引用。

而在\begin{tabular}\end{tabular}之间的,是表格的内容,首先{cccc}代表该表格有四列,并且四列均居中。而下面的就是表格内容,如果你对markdown比较熟悉的话吗,应该可以看出来,这个表格的写法跟markdown是一样的,列之间以&划分,行之间以\\划分。

不过,每次都手打表格未免太不优雅了,这里推荐一个表格转换为LaTeX的网站,将表格放入该网站中即可生成表格的LaTeX代码。当然,如果你把上述表格内容放入网站中,会得到这样的一段代码

1
2
3
4
5
6
7
\begin{tabular}{cccc}
序号 & 姓名 & 性别 & 职业 \\
1 & 辛美尔 && 勇者 \\
2 & 艾泽 && 战士 \\
3 & 海塔 && 僧侣 \\
4 & 芙莉莲 && 魔法使 \\
\end{tabular}

这跟我们上面的代码还是有差别的,因为多出来的代码是用于实现三线表的。当然,在此之前需要导入booktabs库。代码\toprule\midrule\bottomrule分别代表三线表的三条线,只要将其写在表格代码中,其就会在对应位置生成线,也就实现了三线表的效果。

公式

最后就是公式了,谈到LaTeX自然会说到其对数学公式的优秀支持,并且,我个人主观认为LaTeX渲染出的公式是最好看的,其次是Axmath。对于数学公式,这里要说的不多,首先是字体问题,由于我们在前文设置的字体会影响到数学公式的渲染,因此,需要将beamer最开始的代码改为

1
\documentclass[mathserif]{beamer}

然后就是公式的插入,行内插入使用两个$包裹,行间插入使用两个$$包裹。

最后,关于LaTeX公式的语法,只需要找一个比较全的表,用到的时候查一下,写多了自然就会了。顺带着,这里在推荐两个将公式图片转化为LaTeX代码的网站,分别为在线LaTeX公式编辑器-编辑器 (latexlive.com)公式识别 (simpletex.cn)