一个简单的beamer模板

代码

最近用LaTeX的beamer文档类做了一个中文幻灯片,输出pdf格式的文档。文档结构清晰,数学公式非常漂亮,也有动态分步显示内容的功能,演示效果很不错。在这里把我的模板分享给有需要的人。

我用的是TeX Live 2018发行版,操作系统是Linux,所有源文件使用UTF-8编码保存,用xelatex命令编译。完整代码如下:

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
\documentclass{ctexbeamer}        % 文档类beamer的汉化版本

\usefonttheme{serif} % 使用衬线字体
\usefonttheme{professionalfonts} % 数学公式字体

\usepackage{mathtools}

%% --> 配置中英文字体
% \usepackage{fontspec}
% \setmainfont{Liberation Serif}
% \setsansfont{DejaVu Sans}
% \setmonofont{Cousine}
% \usepackage{xeCJK}
% \setCJKmainfont[BoldFont=Noto Sans SC]{Noto Serif SC}
% \setCJKsansfont{Noto Sans SC}
% \setCJKmonofont{WenQuanYi Micro Hei Mono}

%% --> 主题和色彩风格
\usetheme{Frankfurt}
\usecolortheme{orchid}


\begin{document}

%% --> 导言页
%
\title{制作幻灯片的正确姿势}
\author{张~三}
\institute{加里敦大学}
\date{1970~年~1~月~1~日}
\frame{\titlepage}

%% --> 目录结构
%
\begin{frame}{目录}
\tableofcontents[hideallsubsections]
\end{frame}

%% --> 正式内容开始
%
\section{文学} % 第 1 节

%% 每一节开头显示目录,并高亮当前节的主题
\AtBeginSection[]{\frame{\tableofcontents[currentsection,hideallsubsections]}}

%% --> 第 1 帧
\begin{frame}{文学}{论语}

\onslide<1->{子在川上曰:逝者如斯夫,不舍昼夜!}

\onslide<2->{子曰:巧言令色,鲜矣仁!}

\end{frame}

%% --> 第 2 帧
\begin{frame}{中外文学}{Shakespere}

To be, or not to be, that is the question.

\end{frame}


\section{数学} % 第 2 节

%% --> 第 3 帧
\begin{frame}[t]{数学}{欧拉公式} % 取消垂直居中

欧拉发现了下面的公式
$$
e^{ix} = \cos x + i \sin x
$$
$x = \pi$时,得
$$
e^{\pi i} + 1 = 0
$$

\end{frame}

\end{document}

字体和主题配置

配置字体主题

代码中用的ctexbeamer文档类是beamer的汉化版本。在我的环境下,beamer默认的中英文字体都是非衬线字体。我更习惯用衬线字体显示主要内容。数学公式的字体也需要配置。配置语句如下:

1
2
\usefonttheme{serif}              % 衬线字体
\usefonttheme{professionalfonts} % 数学公式字体

按照上述配置,中英文字体应该都能正确显示。如果系统默认配置的衬线字体你不喜欢,可以自定义设置。

配置英文字体

英文字体主要分为衬线字体(serif)、非衬线字体(sans)和等宽字体(mono),配置需要用到fontspec宏包。这是我在Linux下的英文字体选择(如果找不到字体,请自行安装):

1
2
3
4
\usepackage{fontspec}
\setmainfont{Liberation Serif} % 对应Windows下的Times New Roman
\setsansfont{DejaVu Sans} % 对应Windows下的Verdana
\setmonofont{Cousine} % 对应windows下的Courier New

配置中文字体

字体配置是LaTeX中文排版很棘手的问题,但现在已经有很好的解决方案。比如,本文用到的CTeX宏集会根据用户使用的编译方式,在底层选择不同的中文支持方式。本文的源文件用xelatex编译,中文支持方式为xeCJK宏包,在Linux系统下的字体策略自动配置为Fandol字库。所以,无需自己配置中文字体即可正常使用。

如果对默认的中文字体策略不满意,可以自己用xeCJK宏包配置。Linux下免费的中文衬线字体可以试试思源宋体。也有对应的非衬线字体思源黑体,如果再开发一个楷书字体就完美了。这款优秀的开源字体从Linux的官方源中就能安装。在Linux下可以通过下面的命令查看系统中所有的中文字体:

1
$ fc-list :lang=zh > fonts.txt

例如,我将思源宋体设置为主字体,加粗字体设置为思源黑体:

1
2
3
\usepackage{xeCJK}
\setCJKmainfont[BoldFont=Noto Sans SC]{Noto Serif SC}
%...

更详细的中文字体配置方法请参考xeCJK文档

主题和色彩风格

这里有个主题和色彩的搭配矩阵,选择最顺眼的即可。

内容结构

幻灯片的第一页是导言区,介绍演讲主题以及个人信息。如果要组织幻灯片的结构,可以使用\section\subsection等命令对文档进行分节,用\tableofcontents生成目录页,放在导言页之后,给观众展示演讲内容的结构。另外,还要在刚进入新的一节时显示整个目录,并高亮节的主题,将如下语句放在第一个section语句的后面即可实现:

1
\AtBeginSection[]{\frame{\tableofcontents[currentsection,hideallsubsections]}}

在beamer中组织内容也是一页一页完成的,这样的演示页称为帧(frame),用frame环境得到。还可以设置帧的大标题和小标题:

1
2
3
4
5
\begin{frame}{大标题}{小标题}
这是一帧。

帧的内容默认是垂直居中的。
\end{frame}

帧的内容默认是垂直居中的,加上t选项即可取消垂直居中:

1
2
3
\begin{frame}[t]{大标题}{小标题}
% ...
\end{frame}

在严肃的场合使用绚丽的动态效果会引起观众反感,但简单的动态效果很有必要。示例代码展示了如何用\onslide实现分步显示内容的功能。更多的动态效果实现请参考刘海洋的LaTeX入门一书。

建议

通过前几天编辑幻灯片的经历,我建议,如果没有特别的原因,不要用LaTeX做幻灯片,老老实实用微软的PowerPoint做。我之所以选择LaTeX是因为没有正版的Office可以用,用WPS又担心格式兼容问题,保险起见就选择了pdf格式。用LaTeX做幻灯片,修改源码后看效果需要编译,而且LaTeX反人类的错误提示会让你抓狂的。当然,如果你是LaTeX高手,就无视这条建议。