序言
说起演示文稿,大家最熟悉的是微软Power Point。相信大部分读者都曾见过或者制作过精美的PPT演示文稿,其中包含大量的图示和动画,甚至声音等多媒体效果。Power Point绝对是最强大最流行的演示文稿制作软件,可以满足几乎所有的展示需求。然而,正如微软Office其他软件在数学公式编辑上的短板一样,Power Point对数理公式的支持虽然近年来进步迅速,但是仍然不能令人满意。在处理、显示大量公式的时候,Power Point效率非常低,而且公式的编辑也常常会产生莫名其妙的错误,在其自由度上也有所限制。每每在这个时候,就会让人想起$\LaTeX$。
数学物理文档排版是$\LaTeX$的当家本领。除了在公式排版上独一无二的优势,$\LaTeX$的各种模板和宏包使得熟悉这套编译系统的用户如鱼得水。相信经常使用$\LaTeX$的学生或者研究人员都产生过使用$\LaTeX$搞定一切文档的想法,特别是在制作演示文稿的时候。
$\LaTeX$ Beamer是使用$\LaTeX$制作演示文稿的绝好的工具。制作精美的Beamer可以用在学术报告、讨论会以及课堂教学等场合。然而,与PPT的容易上手相比,Beamer似乎难度大了一点。即使对于有过使用$\LaTeX$编写数理文档经历的读者来讲,Beamer或许完全是另外一套体系。虽然网络上有Beamer自己的文档以及各种简易的教程,想要参考这些资料制作可以与PPT的产品水平相当的演示文稿仍然难度太大;而参考Beamer文档对于一个初学者来说非常枯燥——对于我来说是这样的。因此,一本完整的Beamer入门和提高的教程是非常有必要的。
本教程默认读者具有入门级别的$\LaTeX$知识——只要读者知道通常的$\LaTeX$源文件是什么样子、如何编译即可。本教程内容尽可能自洽,对于超出本书范围的内容会给出易读的参考资料。
本教程使用Beamer 3.0版本,用户手册参见英文版、中文版。在此向维护者、手册作者及译者致谢。
配置与运行
在Linux环境下可以通过安装texlive-full直接安装包括Beamer的整套$\LaTeX$编译工具,例如在Ubuntu下:1
sudo apt install texlive-full
安装成功之后,即可通过pdflatex
命令编译tex文件生成pdf文件:1
pdflatex sample.tex
对于包含中文的tex文件,通常应当使用xelatex
命令编译生成pdf文件1
xelatex sample.tex
本文所有tex代码均由xelatex编译。
一些现成的Beamer示例通常放置于/usr/share/texlive/texmf-dist/doc/latex/beamer/solutions目录中。新手可以从阅读并修改示例开始。
在Windows环境下,推荐在安装TeXLive后,使用专门的IDE,例如TeXstudio等。
Beamer源文件框架
一个Beamer源文件是以.tex为后缀的UTF8格式的纯文本文档。对于中文Beamer,一个Beamer必备的框架为1
2
3
4
5
6
7
8\documentclass{beamer}
\usepackage[english]{babel}
%\usepackage{ctex} %使用中文时应当取消本行注释并使用xelatex编译
%导入宏包和配置
%文档基本参数
\begin{document}
%正文
\end{document}
一个最简单示例
读者当然可以从beamer/solution目录下的示例开始创建自己的文档。这里给出一个最简单示例。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\documentclass{beamer}
\usepackage[english]{babel}
\title{There Is No Largest Prime Number}
\author{Euclid of Alexandria}
\date{27th International Symposium of Prime Numbers}
\begin{document}
\begin{frame} %一帧的开始
\titlepage %自动生成首页
\end{frame} %一帧的结束
\begin{frame}
\tableofcontents %有目录时需要编译两次
\end{frame}
\section{Section 1} %只作为目录的划分在目录中显示,不在正文中显示。
\begin{frame} %一帧正文示例,内容的语法与普通tex文档基本相同。
\frametitle{There Is No Largest Prime Number}
\framesubtitle{The proof uses \textit{reductio ad absurdum}.}
There is no largest prime number.
\begin{theorem}
There is no largest prime number.
\end{theorem}
\begin{proof}
\begin{enumerate}
\item Suppose $p$ were the largest prime number.
\item Let $q$ be the product of the first $p$ numbers.
\item Then $q+1$ is not divisible by any of them.
\item But $q + 1$ is greater than $1$, thus divisible by some prime
number not in the first $p$ numbers.\qedhere
\end{enumerate}
\end{proof}
\end{frame}
\end{document}
这个演示文稿没有使用主题,也没有使用叠层(即单击后显示的元素),也没有图片等等。下面我们讲解最实用的一些操作,使Beamer制作的演示文稿华丽升级。
我们希望能够像使用PPT一样使用Beamer。首先就是要能够自由添加文字、图片、表格等必需基本元素,也就是说要自由编辑其位置、尺寸、旋转等等属性。
定位框:textpos宏包
导入textpos
宏包即可自由安排文字位置:1
2
3
4%通常
\usepackage[absolute,overlay]{textpos}
%显示定位框边框,通常在调试中使用
\usepackage[absolute,overlay,showboxes]{textpos}
直接调用方法:textblock*
环境1
2
3\begin{textblock*}{width}(x,y) %width为定位框宽度,x、y为定位框左上角坐标。
whatever you want to put here
\end{textblock*}
1 | \begin{textblock*}{width}[0.5,0.5](x,y) %width为定位框宽度,x、y为定位框中心点坐标 |
这里宽度和坐标需要是长度量。
长度量
即带长度单位的数,如:20pt,1.5em,3cm,200mm等,通常用在设置元素的尺寸和位置的地方。所有使用长度量的参数都可以使用长度宏,并且无需额外导入宏包。Beamer中常用的长度宏有
\paperwidth
页面长度\paperheight
页面高度
可以直接对长度宏使用乘法,如0.5/paperwidth
。 如果使用更多的算术如加减,需要导入calc
宏包
undefined
则加法可以写成0.5/paperwidth+3cm
。
关于长度量,参见LaTeX/Lengths。
预设长度单位调用方法:
textblock
环境需要在导言区(即
\begin{document}
之前)预设参数:1 | \setlength{\TPHorizModule}{width_unit} %width_unit是长度量,为textblock的宽度和横坐标的单位 |
调用与上面类似:1
2
3\begin{textblock}{width}[0.5,0.5](x,y) %width为定位框宽度,x、y为定位框中心点坐标
whatever you want to put here
\end{textblock}
此时宽度和坐标只需要写一个纯数字就可以了,单位是导言区预设的。
直接调用和单数预设单位调用可以混合使用。
当定位框宽度小于文字总长度时,文字会换行;当定位框宽度小于一个英文单词时,英文单词会断开。
定位框使得任意安排文字、图片等内容的位置,也可以设置底色。但是,并不建议将定位框当做文本框使用,因为定位框给出的样式并不美观。所以定位框最好只用作定位。
以下是示例。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\documentclass{beamer}
\usepackage[english]{babel}
\usepackage[absolute,overlay]{textpos}
\setlength{\TPHorizModule}{\paperwidth} %设置textpos横向单位为页面宽度
\setlength{\TPVertModule}{\paperheight} %设置textpos纵向单位为页面高度
\setlength{\parindent}{0pt} %设置textpos内容无缩进
\begin{document}
\begin{frame}
\begin{textblock}{.7}[0.5,0.5](.5,.7) %定位框宽度为0.7,定位框中心在页面(0.5,0.7)处
\centering %定位框文字内容居中
A quick brown fox jumps over a lazy dog. %内容,可以为文字、图片、表格等等任意元素
\end{textblock}
\end{frame}
\end{document}
1 | \documentclass{beamer} |
文本框
文本框是PPT里最常用的元素。在Beamer里同样可以使用。
Block框
有些主题自带显示效果不错的block框,包含三种颜色风格block(蓝色)、exampleblock(绿色)和alertblock(红色)使用方法如下1
2
3
4
5
6
7
8
9\begin{block}{block title}
Normal information.
\end{block}
\begin{exampleblock}{exampleblock title}
Example information.
\end{exampleblock}
\begin{alertblock}{alertblock title}
Alert information.
\end{alertblock}
也可以配合定位框使用:1
2
3
4
5\begin{textblock}{0.5}[.5,.5](.5,.3)
\begin{alertblock}{alertblock title}
Alert information.
\end{alertblock}
\end{textblock}
fbox和fancybox
$\LaTeX$自带\fbox{text}
可以绘制简单的矩形文本外框1
2
3
4\begin{textblock}{.6}[0.5,0.5](.5,.3)
\center
\fbox{Here is my text}
\end{textblock}
其边距和边框粗细可以在导言区设置,例如:1
2\setlength{\fboxsep}{10pt} %设置边距
\setlength{\fboxrule}{5pt} %设置边框粗细
其边框颜色可以使用\color设置,可以导入xcolor
宏包方便使用颜色:1
2
3
4
5
6\begin{textblock}{.6}[0.5,0.5](.5,.3)
\center
1kjaioshd9 {\color{red}\fbox{\color{black}caiskjcoa}} qwijdqio
%括号{}保证颜色设置不会影响其他文字
%若只修改外框颜色,需要将框内文字的颜色调回来
\end{textblock}
或者直接自定义宏:1
2
3
4
5
6
7
8%导言区
\newcommand{\cfbox}[2]{%
\colorlet{currentcolor}{.}%
{\color{#1}%
\fbox{\color{currentcolor}#2}}%
}
%调用
\cfbox{red}{In red box} Normal black text
此外,fancybox
宏包提供了三种基本的文本框格式:\doublebox
\ovalbox
\shadowbox
1
2
3
4
5
6
7
8
9\documentclass{beamer}
\usepackage[english]{babel}
\usepackage{fancybox,xcolor}
\begin{document}
\begin{frame}{A fame}
{\huge \Ovalbox{\parbox{40mm}{\centering\textcolor{red}{Two lined \\ text}}}}
\end{frame}
\end{document}
还有很多类似的文本框宏包。在此不一一列举。
TikZ手动绘制
TikZ
本身是一个画图宏包,当然也能用于绘制文本框。1
2
3
4
5
6
7
8
9
10
11
12
13
14\documentclass{beamer}
\usepackage{tikz,xcolor}
\usetikzlibrary{shapes}
\tikzset{%
ell/.style={draw,ellipse,minimum height=3em,text width=10em,line width=2pt, align=center},
}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\node[ell] {\textcolor{red}{\huge Two lined \\ text}};
\end{tikzpicture}
\end{frame}
\end{document}
关于TikZ
宏包的使用细节见下文。
文字属性
文本的字体、样式、字号、颜色等设置方法与一般tex文档相同。这里是一些例子。
字号、样式和颜色
全局字号可以在开头就设置:1
\documentclass[12pt]{beamer}
以下是行内设置的例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14%设置字号(自由设置字号可以调用anyfontsize宏包)
{\Large Any text}
%加粗(需要字体支持,见下文)
\textbf{text bold}
%斜体(需要字体支持,见下文)
\textit{text italic}
%下划线
\underline{text underlined}
%删除线
\usepackage[normalem]{ulem}
\sout{Hello World}
%颜色(通常调用xcolor宏包方便使用颜色)
{\color{red} text red} %改变之后所有字符的颜色,外层括号限制颜色范围
\textcolor{blue}{text blue} %若对文本无括号,则只改变第一个字符的颜色
字体
ctexbeamer版本对中文的支持
如果安装有ctex系列模板,就可以使用\document{ctexbeamer}似乎对中文的支持更好。
这里我们默认没有安装,但是可以通过调用ctex
宏包达到基本相同的效果。
我们通常希望使用系统中已安装字体。这里以Ubuntu 16.04为例,使用xelatex编译可以允许tex文档中使用TTF和OTF字体。
Linux下安装字体请参看在linux中安装/卸载字体。
查看已安装的字体
在shell中运行fc-list
可以查看已安装的字体:1
fc-list
查看某一语言的字体,例如查看中文字体,可以加语言参数:1
fc-list :lang=zh
一个例子:1
2
3
4
5 fc-list :lang=en | grep Conso
/usr/share/fonts/windows/consola.ttf: Consolas:style=Regular
/usr/share/fonts/windows/consolaz.ttf: Consolas:style=Bold Italic
/usr/share/fonts/windows/consolai.ttf: Consolas:style=Italic
/usr/share/fonts/windows/consolab.ttf: Consolas:style=Bold
上面的例子中,我们看到Consolas字体已经安装,路径为/usr/share/fonts/windows/consola*.ttf,包含正体、粗体、斜体、粗斜体四种样式,意味着支持设置这四种样式(有的字体没有这些样式,则\textbf、\textit不会有效果)。字体的名字就是第一个冒号到第二个冒号之间的Consolas,这个字体名字我们将在tex文档中用到。
设置全局字体
使用fonstspec
宏包可以在xelatex编译下调用系统TTF、OTF字体,并在导言区设置全局字体:1
2
3
4\usepackage{fontspec}
%\setmainfont[options]{<fontname>} % sets the Roman font for the document
\setsansfont[options]{<fontname>} % sets the Sans Serif font for the document
%\setmonofont[options]{<fontname>} % sets the Monospaced font for the document
Beamer中所有文本(包括数学环境中的英文字符)都属于sansfont,所以只有\setsansfont
有效。例如1
2\usepackage{fontspec}
\setsansfont[Ligatures=TeX]{Helvetica Neue} %Ligatures=TeX增加非Unicode字符的支持
中文字体则在使用ctex
宏包后可以设置:(独立于fontspec
宏包)1
2\usepackage{ctex}
\setCJKsansfont{微软雅黑} %当然可以用字体的中文名称,如果有的话
数学字体可以改回与article类似的样式:1
\documentclass[mathserif]{beamer}
此时数学字体回到了默认的mathfont。
有时考虑到演讲的要求,默认的字体太细,可以进一步更换数学字体:1
2
3\usepackage{unicode-math}
\setmathfont{Cambria Math}
%微软公式编辑器默认字体,需要额外安装,但是效果最好
这样原本正文的字体也不会被干扰。
参考Math Fonts(with Beamer)。
设置行内字体
局部设置字体需要在导言区声明:1
2
3
4%声明
\newfontfamily\myfont[options]{<fontname>}
%调用
{\myfont Some text in the special font}
中文通过CJK设置与调用:1
2
3
4
5%声明
\setCJKfamilyfont{hwxk}{STXingkai} %使用STXingkai华文行楷字体
\newcommand{\hwxkfont}{\CJKfamily{hwxk}}
%调用
{\hwxkfont 华文行楷字体}
此外ctex预设了\songti
\kaishu
\heiti
\fangsong
四个字体,可以不经过声明直接调用。
图片
这一章介绍如何向Beamer中插入图形和图片。
TikZ绘制简单图形
TikZ画图的知识对于Beamer制作非常重要,内容非常多,将在后续文章中详细讲解。
插入图片
图片直接使用figure
环境就可以了,一般形式为1
2
3
4
5
6\begin{figure}[!htbp]
\begin{center}
\includegraphics[width=\textwidth]{{../img/beamer/oil_rec}.jpg}
\caption{Figure caption}
\end{center}
\end{figure}
横排多个图片可以在figure
环境中再套一层subfigure。更多的定位需要用到textblock
环境文本框定位。
以下是一个稍微复杂的示例: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\begin{frame}{What Are Microemulsions?}
\begin{textblock}{0.9}[0,0](0.05,0.2)
\begin{itemize}
\item Water + oil + surfactant
\item Thermodynamically stable
\end{itemize}
\colemph{Applications:}
\end{textblock}
\begin{textblock}{0.9}[0,0](0.05,0.25)
\begin{figure}[!htbp]
\begin{center}
\begin{subfigure}[b]{0.3\linewidth}
\begin{center}
\includegraphics[width=\textwidth]{{../img/beamer/oil_rec}.jpg}
\caption{Oil recovery}
\end{center}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\begin{center}
\includegraphics[width=\textwidth]{{../img/beamer/ev}.jpg}
\caption{Drug delivery}
\end{center}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\begin{center}
\includegraphics[width=\textwidth]{{../img/beamer/cg}.png}
\caption{Protein crystallization}
\end{center}
\end{subfigure}
\end{center}
\end{figure}
\end{textblock}
\end{frame}
导入表格
这里不再赘述如何使用$\LaTeX$编写表格。比起手动建立tex表格,我们更希望直接导入CSV格式的数据表。我们提倡数据与文档分开,这样对于数据的更新或者利用都更加方便,也避免了对文档的污染。
导入CSV文档需要用到宏包csvsimple
。而其他格式的数据表如xlsx等都可以导出称纯CSV文档。1
\usepackage{csvsimple}
快速导入
假如在与tex文档相同目录下有test.csv需要导入建表,则1
2
3
4
5
6\begin{frame}
\begin{textblock}{.8}[.5,.5](.5,.5)
\centering %将表格放置于定位框中央
\csvautotabular{test.csv}
\end{textblock}
\end{frame}
标准三线表
更多复杂的用法请参见csvsimple
宏包文档。这里我们以建立一个标准的三线表为例。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22\documentclass{beamer}
\usepackage[english]{babel}
\usepackage{csvsimple}
\usepackage{booktabs} %\csvautobooktabular需要
\usepackage[absolute,overlay]{textpos}
\setlength{\TPHorizModule}{\paperwidth}
\setlength{\TPVertModule}{\paperheight}
\setlength{\parindent}{0pt}
\usepackage{fontspec}
\newfontfamily\timesfont{Times New Roman} %声明新字体
\begin{document}
\begin{frame}
\begin{textblock}{.8}[.5,.5](.5,.5) %页面正中放置定位框,宽度要足够大
\timesfont %设置表格字体
\centering %表格在定位框内居中
\csvautobooktabular{test.csv} %导入并建立三线表
\end{textblock}
\end{frame}
\end{document}