【注】笔记来自《LaTeX入门》——刘海洋。更多细节内容可以参考官方用户手册。
代码语言:javascript复制texdoc beamer
1. 简介
由于现代的 LaTeX 系统主要以 pdf 文件为输出方式,因此它可以用来生成各种专门的电子文档,诸如书籍、文章、幻灯片等。
1.1 工具
LaTeX 中专门用来制作幻灯片的工具有很多,诸如:
beamer
文档类powerdot
文档类prosper
文档类pdfslide
宏包ppower4
宏包pdfscreen
宏包
1.2 beamer
文档类
目前最流行的 LaTeX 幻灯片工具为 beamer
文档类,它以页面(被称为「帧」)为基本组织单位,提供丰富的功能选项和许多预定义的风格主题,支持各种编译程序。因此,本文也使用 beamer
文档类来制作幻灯片提纲。
2. 幻灯片提纲
2.1 代码框架
使用 beamer
文档类与编写一般的 LaTeX 文档的代码框架是一样的:
documentclass{beamer}
begin{document}
% ...
end{document}
如果要在 beamer
文档类中使用中文,则可以使用 ctex
或 ctexcap
宏包,前者只引入必要的中文,后者还会翻译图表等环境名称。为了方便起见,本文使用 ctexcap
宏包。
usepackage[UTF8,noindent]{ctexcap}
【注】引入 ctexcap
宏包时使用 noindent
参数表示取消段前缩进,因为与一般文档不同,在幻灯片的段落中通常不使用首行缩进。
2.2 幻灯片风格
修改 beamer
幻灯片格式的基本方式是使用主题。beamer
提供了 20 多种不同的幻灯片风格,可以在导言区使用 usetheme
命令自主选择:
usetheme{PaloAlto}
beamer
提供的官方预定义主题风格可参考此处,对于更多非官方预定义主题风格可参考此处。
【注】有趣的是,beamer
文档类提供的官方预定义主题风格大多是以作者游历的一些地点命名的。
实际上,beamer
的主题是由不同的内部主题、外部主题、色彩主题、字体主题等组合而成的,因此可以分别使用各自对应命令来选择各自的主题:
useinnertheme
:选择内部主题useoutertheme
:选择外部主题usecolortheme
:选择色彩主题usecolortheme
:选择字体主题
2.2.1 内部主题
内部主题主要控制的是标题页、列表项目、定理环境、图表环境、脚注等一帧以内的内容格式。预定义的内部主题有:
default
circles
rectangles
rounded
inmargin
2.2.2 外部主题
外部主题主要控制的是幻灯片顶部尾部的信息栏、边栏、图表、帧标题等一帧以外的内功格式。预定义的外部主题有:
default
infolines
miniframes
smoothbars
sidebar
split
shadow
tree
smoothtree
2.2.3 色彩主题
色彩主题控制各个部分的色彩。预定义的色彩主题有:
default
albatross
beaver
beetle
crane
dolphin
dove
fly
lily
orchid
rose
seagull
seahorse
sidebartab
structure
whale
wolverine
2.2.4 字体主题
字体主题则控制幻灯片的整体字体风格。预定义的字体主题有:
default
:无衬线字体professionalfonts
:不对字体有特别的设置,需要使用另外专门的宏包进行设置serif
:衬线字体,此时最好选择较大的字号和较粗的字体structurebold
structureitalicserif
structuresmallcapsserif
【注】structure
开头的几个字体主题主要是对 beamer
文档类中的几个结构有特别设置。
2.2.5 自定义风格
beamer
使用一种模板机制,将幻灯片的不同内容组件格式抽象为模板代码、模板字体、模板色彩,模板代码是实现组件的具体代码。在 beamer
中,提供了许多自定义的设置命令让用户自定义幻灯片风格:
setbeamercolor
:设置组件的色彩setbeamerfont
:设置组件字体setbeamertemplate
:设置组件模板的具体实现代码
比如对于 itemize
列表,可以设置:
setbeamertemplate{itemize items}[circle]
setbeamercolor{itemize item}{fg=black}
setbeamercolor{itemize/enumerate body}{fg=gray}
setbeamerfont{itemize/enumerate body}{family=rmfamily}
这样就设置了列表项的符号是一个黑色的圆形,同时类标得内容是 rmfamily
的灰色文字。
对于简单的样式修改通过组合现有的主题和背景插图来完成,但对 beamer
进行更详细的样式定制时,字体、色彩、模板名目繁多,可能需要参考在安装目录下 theme/
目录中的模板源代码。beamer
的每一个主题对应一个后缀为 .sty
的主题文件,使用命令 usetheme
或 useinnertheme
等切换主题,其实就是在载入主题文件。可以查看官方手册,定制自己的主题文件:
texdoc beamer
2.3 幻灯片内容
2.3.1 帧
在 beamer
中,帧用 frame
环境得到。一帧里面的内容可以使用各种常见的 LaTeX 命令和环境。在每一帧当中,内容有一定的水平边距,并且整体垂直居中显示。幻灯片每一帧通常都有标题,甚至还有小标题:
begin{frame}
frametitle{标题}
framesubtitle{小标题}
这是简单的一帧
end{frame}
% 标题和小标题还可以有下面更简洁的方式
begin{frame}{标题}{小标题}
这是简单的一帧
end{frame}
beamer
重定义了大量 LaTeX 环境,使它们的格式更适合在幻灯片中显示,比如列表环境和定理类环境,但它们的使用方式和一般的文档没有区别。
begin{frame}
frametitle{古中国数学}
framesubtitle{定理发现}
中国在 3000 多年前就知道勾股数的概念,比古希腊更早一些。
《周髀算经》的记载:
begin{itemize}
item 公元前 11 世纪,商高答周公问:
begin{quote}
勾广三,股修四,径隅五。
end{quote}
item 又载公元前 7--6 世纪陈子答荣方问,表述了勾股定理的一般形式:
begin{quote}
若求邪至日者,以日下为勾,日高为股,勾股各自乘,并而开方除之,得邪至日。
end{quote}
end{itemize}
end{frame}
2.3.2 首页
幻灯片首页也是 beamer
中的一帧,其显示内容也是要在帧环境中设置。但首页又往往和其它页不一样,需要显示整个幻灯的标题、小标题、作者、学院、日期、标题图形等。beamer
在导言区为首页提供了显示相对应内容的命令,在首页帧中需要通过使用 maketitle
或者 titlepage
使得这些内容显示到首页帧中。
title{杂谈勾股定理}
subtitle{数学史讲座之一}
author{BlueHeart}
institute{九章学堂}
date{today}
begin{document}
begin{frame}
maketitle % 等价于 titlepage
end{frame}
% ...
end{document}
2.3.3 分节
和一般文档类一样,在 beamer
中可以使用 section
、subsection
、subsubsection
以及 part
命令对幻灯片分节,然后使用 tableofcontents
命令产生目录。目录页也是帧,需要在目录帧中通过使用 tableofcontents
才能产生目录并将其显示到目录帧中。
begin{frame}
frametitle{目录}
tableofcontents
end{frame}
part
命令本身不产生标题,但 beamer
提供了一个 partpage
命令,它和 titlepage
命令类似,可以在一帧中产生文档某部分的标题。一个完整的演讲报告 beamer
文档一般控制在几十帧的篇幅,使用 part
和 section
至 subsubsection
的命令进行分节足以。但如果希望将所有很多次的演讲报告内容放进同一个单独的文件,则可以使用 lecture
命令进行更高一层的内容划分。
lecture{杂谈勾股定理}{gougu} % 两个参数分别表示「讲座标题」和「讲座标签」
lecture
命令本身并不产生任何标题和效果,beamer
提供 insertlecture
命令向文档中插入 lecture
的标题。还可以通过 AtBeginLecture
命令在每一讲前面都添加一帧,代替 maketitle
:
% 导言区
AtBeginLecture{
begin{frame}
Large
本周论题:insertlecture
end{frame}
}
此外,lecture
的另一个用途是使用 includeonlylecture{<标签>}
来使文档编译时只输出选定标签的那一讲,这样通过修改标签就可以只使用一个文件来分别生成单独的幻灯片了。
2.3.4 目录
beamer
中的 tableofcontents
可以在可选参数中使用许多参数控制其格式:
tableofcontents[currentsection]
:只显示当前一节的目录结构tableofcontents[currentsubsection]
:只显示当前一小节的目录结构
【注】以上参数设置在某些情况下是非常有用的,因为演讲时可能需要在每一节的开头都显示一下即将讲到的内容结构,因而每一节前面都应该有一个小目录,特别是缺少导航条显示分节标题的格式更是如此。
为了方便在每一节前面添加一个目录,beamer
还提供了 AtBeginSection
、AtBeginSubsection
命令,它们的用法与 LaTeX 原有的 AtBeginDocument
命令功能类似,用来给每一节或每一小节前面增加一段代码(AtBeginDocument
命令在整个文档前面添加一段内容,主要用在宏包制作):
% 导言区
AtBeginSection[]{ % 空选项[]表示 section* 前不加目录
begin{frame}{本节概要}
tableofcontents[currentsection]
end{frame}
}
2.4.5 定理
在 beamer
文档类,已经与定义了许多定理类环境:
definition
、definitions
:定义theorem
:定理corollary
:推论proof
:证明fact
:事实example
:例子
除了上述预定义的定理类环境,还可以自定义定理环境:
代码语言:javascript复制newtheorem{thm}{定理}
begin{frame}{现代叙述}
begin{thm}[勾股定理]
直角三角形斜边的平方等于两直角边的平方和。
end{thm}
end{frame}
2.4.6 区块
类似定理环境的彩色框效果,beamer
还提供了其他的区块环境,可以用于强调一部分内容。beamer
提供了三种区块环境:
block
alertblock
exampleblock
它们除了使用的配色不同之外,用法和结果都大致相同:
代码语言:javascript复制begin{frame}
begin{block}{块标题}
这是一个区块
end{block}
end{frame}
2.4.7 图表
在 beamer
中使用图表和在一般文档中的语法并无区别。不过由于 beamer
是按帧组织内容的,位置固定,因此 figure
和 table
环境不再是浮动的环境。
begin{frame}{古中国数学}{定理证明}
有论者认为早在公元前 11 世纪商高即已证明勾股定理。完整的证明见于三国时(公元 3 世纪)赵爽对《周髀算经》的注释。
begin{figure}
centering
includegraphics[height=0.4textheight]{xiantu.pdf}
caption{赵爽的弦图可给出勾股定理的一个富于对称美的证明}
end{figure}
end{frame}
除了标准的图表环境,beamer
还提供了一个 logo
命令,用于把一个较小的图表放在幻灯片的左上角落里,可以用它来放置校徽、公司商标等内容。logo
命令一般放在导言区:
logo{includegraphics{logo.pdf}}
beamer
内部使用 pgf
宏包绘制定理边框、幻灯片按钮等图形。对于一些简单的数学图形,使用基于 pdf
的 tikz
宏包直接画图是最方便的,比如在绘制直角三角形:
begin{frame}
begin{center}
begin{tikzpicture}[scale=0.5,font=small]
draw[thick] (0,0) node[left] {$A$}
-- (4,0) node[right] {$C$}
-- (4,3) node[above right] {$B$} -- cycle;
draw (3.5,0) |- (4,0.5);
end{tikzpicture}
end{center}
end{frame}
幻灯片中的表格务求简明清晰,可以考虑使用行色彩相间的彩色表格。xcolor
宏包通过加上 table
选项就可以实现给表格行加上颜色。由于 beamer
本身就会载入 xcolor
宏包,因此可以直接在 beamer
参数中设置:
documentclass[xcolor=table]{beamer}
begin{frame}
rowcolors{2}{blue!25}{blue!50}
begin{tabular}{ccc}
rowcolor{green}x & y & z \
3 & 4 & 5 \
5 & 12 & 13 \
end{tabular}
end{frame}
其中,rowcolors{n}{color}...{color}
命令使用来表格除去首行外,连续 nnn 行的背景颜色设定,并以 nnn 为周期循环。而 rowcolor{color}
命令用来在表格中单独设置一行的背景颜色。
2.4.8 参考文献
在 beamer
中添加参考文献列表与一般文档的语法没有区别,不过与书面的文稿不同,在幻灯片中通常并不适合特别冗长的文献列表,列出的条目不宜过多,也不需要文献编号。因此,beamer
中的文献列表,文字排版比较宽松,列表前没有标题,默认格式也是没有编号的(因为幻灯片很难前后跳跃翻页,因此编号引用用途不大)。
begin{frame}{参考文献}
notice{Shiye}
bibliography{math}
end{frame}
如果确实需要对文献进行引用,那么最好使用「作者,年代」的引用格式,避免完全不直观的数字编号可能造成的问题。
【注】beamer
的文献格式比较特殊,它并不支持 natbib
宏包及其对应的 .bst
文献格式。可以使用相对简单的 apalike
文献格式,它按照 APA 的格式,提供了基本的作者年代引用方式。biblatex
宏包与 beamer
没有明显的冲突,也可以使用。
% 提供简单的作者年代引用格式
bibliographystyle{apalike}
2.4 幻灯片动态
2.4.1 覆盖
覆盖是最为基本的一种幻灯片效果,它是把同一帧幻灯片的不同内容按一定次序拆分成几页显示出来。利用覆盖可以让内容逐步显示,也可以让不同内容依次替代,产生类似动画的效果。
逐条显示是最为常用的覆盖效果,其基本命令是 pause
,表示幻灯片在此处会停顿一下,在 pause
后面的所有内容会在 pdf 文件的下一页显示。对于目录帧,可以给目录命令加上选项使得目录在一项后面暂停。
begin{frame}{目录}
tableofcontents[pausesections]
end
更为一般的是 onslide
,它可以指定内容在一帧中的第几步显示,使用 onslide
时「不显示的内容还占用原来的位置」。在 onslide
后面的尖括号中的内容就是覆盖步骤的设置。覆盖语法支持单个的步骤,也支持多个步骤和区间。
begin{frame}
onslide<1>{只有第一步}
onslide<2->{第二步之后}
onslide<1,3>{第一、三两步}
end{frame}
only
命令与 onslide
命令类似,不过 only
命令「在不显示的步骤没有额外的占位」,可以得到内容代替的效果。
begin{frame}
计数:only<1>{1}only<2>{2}only<3>{3}only<4->{4}
onslide<5>数完了
end{frame}
onslide
和 only
命令还有许多变种,它们的效果都大同小异。
uncover
和visible
与onslide
大体相同,只是用不同的方式隐藏文字。invisible
和visible
具有相反的效果。alt
可以分别设置在指定步骤和步骤外的内容。temporal
可以分别指定步骤与此步骤前后的内容。
【注】这种使用尖括号表示步骤的覆盖语法,实际上在 beamer
的很多命令和环境后面都可以使用,比如:
% 加粗
begin{frame}
textbf<3>{只在第三步加粗}
end{frame}
% 定理
begin{frame}
begin{theorem}<2->
第二步以后显示定理
end{theorem}
end{frame}
% 列表
begin{frame}
begin{itemize}
item<1-> 开始显示
item<3-> 最后显示
item<2-> 然后显示
end{itemize}
end{frame}
在覆盖语法中,使用
号就类似使用了 pause
,这可以避免手工计数。连续使用多个 item< ->
就可以表示 item<1->
、item<2->
、item<3->
…… 的效果。此外,还可以在整个 enumerate
和 itemize
环境后面加上 [< ->]
的可选项,相当于对每个 item
后面都使用了 < ->
,非常方便:
begin{frame}
begin{itemize}[< ->]
item 开始显示
item 其次显示
item 最后显示
end{itemize}
end{frame}
structure
和 alert
命令用于在指定的步骤设置高亮,前者使用幻灯片中结构的色彩,后者使用更鲜明的警告色彩(一般是红色)。它们也可以带上覆盖的语法:
alert<2>{在第二步强调重要的内容}
此外,高亮命令可以作为覆盖语法的一部分,用在 item
等命令后面,这样既能控制条目何时显示,可以控制条目高亮:
begin{itemize}
item< -| alert@ > 公元前 6 世纪,毕达哥拉斯学派发现一个法则,可以构造直角三角形的边长;
item< -| alert@ > 公元前 3 世纪,欧几里得《几何原本》使用面积法证明勾股定理。
end{itemize}
% 更简洁表达为
begin{itemize}[< -| alert@ >]
item 公元前 6 世纪,毕达哥拉斯学派发现一个法则,可以构造直角三角形的边长;
item 公元前 3 世纪,欧几里得《几何原本》使用面积法证明勾股定理。
2.4.2 活动对象和多媒体
在 beamer
中可以使用一些真正的动态演示功能,包括 pdf 动画、javascript 表单、多媒体对象等内容。不过,并非所有的 pdf 阅读器都支持这些动态功能。
pdf 动画是把动画内容分别画在许多页中,再通过 pdf 文件中自动快速翻页产生的效果。beamer
提供了 animate
和 animatevalue
命令生成动画。
animate<自动步进的步数>
:定义自动步进的步数,指定的几步会迅速翻页。animatevalue<起步,止步>{寄存器,起始值,终止值}
:设置动画变量,变量是整数或长度寄存器,可以用于控制画面。
newdimenxoffset
begin{frame}
% 第一步是静止的,之后自动运动
animate<2-10>
animatevalue<1-10>{xoffset}{0cm}{5cm}
hspace{xoffset}从左到右
end{frame}
beamer
本身的动画功能比较简单,如果要求更高,可以使用 animate
宏包在幻灯片中画出 pdf 动画来。animate
宏包的动画是嵌入在一个 pdf 页面内的,不需要自动翻页,并且通过 javascript 代码提供了更丰富的控制功能。
beamer
还支持 pdf 页面的动画切换效果,这些效果只在 pdf 文件全屏观看是时有效。比如,可以设置一帧中的第二步为页面从左边飞入:
begin{frame}{动画切换}
only<1>{旧内容}
only<2>{新内容}
transcover<2>
end{frame}
beamer
支持的 pdf 页面切换效果如下表:
命令 | 效果 |
---|---|
transblindshorizontal | 水平百叶窗 |
transblindsvertical | 垂直百叶窗 |
transboxin | 盒状收缩 |
transboxout | 盒装展开 |
transcover | 新页面飞入,覆盖旧页面 |
transdissolve | 溶解 |
transfade | 渐显 |
transglitter | 闪烁(与溶解类似) |
transpush | 新页面推进,推走旧页面 |
transsplitverticalin | 垂直收缩 |
transsplitverticalout | 垂直展开 |
transsplithorizontalin | 水平收缩 |
transsplithorizontalout | 水平展开 |
transuncover | 旧页面飞走,揭开新页面 |
transwipe | 沿直线消除旧页面 |
beamer
的一个附属包 multimedia
可以用来在 pdf 幻灯片中嵌入视频、音频等多媒体信息。multimedia
提供视频的基本命令是 movie
:
movie[可选项]{文字}{多媒体文件名}
比如,下面的代码可以用来播放 4:34:34:3 的 AVI 视频 foo.avi
:
usepackage{multimedia}
% 导言区
% ……
begin{frame}
% 自动播放,无显示内容
movie[width=4cm,height=3cm]{Click to play}{foo.avi}
end{frame}
类似地,sound
命令用来在 pdf 幻灯片中插入音频:
usepackage{multimedia}
% 导言区
% ……
begin{frame}
% 自动播放,无显示内容
sound[autostart]{}{foo.au}
end{frame}
【注】multimedia
的多媒体功能必须使用 pdfLaTeX 进行编译,无法使用 xeLaTeX 处理中文。
media9
宏包(其前身为 movie15
,仅支持 pdfLaTeX)提供了比 multimedia
宏包更为强大的多媒体功能,可以嵌入 Adobe Reader 9 所支持的各类媒体和 3D 对象,并支持各种编译引擎和输出驱动,使用 xeLaTeX 可以用它来代替 multimedia
。
除了动画和多媒体信息,使用第三方宏包,还可以在 beamer
中添加更多的动态内容。tdclock
宏包使用 javascript 代码和 pdf 表单,可以在幻灯片中插入日期和时间,可以用来在演讲中计时:
usepackage{tdclock}
begin{frame}
当前时间:tdtime;已经过去时间:crono
end{frame}
不过 tdclock
宏包对 pdfTeX 支持最好,使用 xeLaTeX 会出现一些问题。
ocgtools
宏包提供了所谓可选内容块的功能,可以在幻灯片中添加一个可弹出的可选内容块。ocgtools
要求使用 pdfTeX,且同时要求安装 acrotex
包组件。
usepackage{ocgtools}
begin{frame}
% 点击公式会显示定理名称
ocgminitext{$a^ b^2=c^2$}{Pythagoras Theorem}
end{frame}
3. 附录
3.1 学习资料
- 《LaTeX入门》——刘海洋
- 《The beamer class User Guide》——Tantau et al.
- 《The beamer class User Guide》中译本——黄旭华
3.2 幻灯片实例
效果展示如下:
代码实现如下:
代码语言:javascript复制documentclass[xcolor=table,hideothersubsections]{beamer}
usetheme{PaloAlto}
useinnertheme{circles}
useoutertheme{smoothbars}
usecolortheme{default}
usefonttheme{default}
setbeamertemplate{itemize items}[circle]
setbeamercolor{itemize item}{fg=black}
setbeamercolor{itemize/enumerate body}{fg=gray}
setbeamerfont{itemize/enumerate body}{family=rmfamily}
usepackage[UTF8,noindent]{ctexcap}
usepackage{tikz}
title{杂谈勾股定理}
subtitle{数学史讲座之一}
author{BlueHeart0621}
institute{九章学堂}
date{today}
begin{document}
begin{frame}
maketitle
end{frame}
section{目录}
begin{frame}
frametitle{目录}
tableofcontents
end{frame}
section{勾股定理在古代}
subsection{古希腊数学}
begin{frame}
frametitle{古希腊数学}
勾股定理在西方称为毕达哥拉斯定理,古希腊数学家在 2000 多年前就已经发现并证明了它footnote{克莱因(2002).古今数学思想.上海科学技术出版社}。
end{frame}
subsection{古中国数学}
begin{frame}
frametitle{古中国数学}
framesubtitle{定理发现}
中国在 3000 多年前就知道勾股数的概念,比古希腊更早一些。
《周髀算经》的记载:
begin{itemize}
item 公元前 11 世纪,商高答周公问:
begin{quote}
勾广三,股修四,径隅五。
end{quote}
item 又载公元前 7--6 世纪陈子答荣方问,表述了勾股定理的一般形式:
begin{quote}
若求邪至日者,以日下为勾,日高为股,勾股各自乘,并而开方除之,得邪至日。
end{quote}
end{itemize}
end{frame}
begin{frame}
frametitle{古中国数学}
framesubtitle{定理证明}
有论者认为早在公元前 $11$ 世纪商高即已证明勾股定理footnote{曲安京(1998).商高、赵爽与刘徽关于勾股定理的证明.数学传播,20(3)}。完整的证明见于三国时(公元 $3$ 世纪)赵爽对《周髀算经》的注释。
begin{figure}
centering
includegraphics[scale=0.45]{xiantu.pdf}
caption{赵爽的弦图可以给出勾股定理的一个富于对称美的证明}
end{figure}
end{frame}
section{勾股定理在现代}
subsection{现代叙述}
begin{frame}
frametitle{现代叙述}
begin{theorem}{(勾股定理)}
直角三角形谢别的平方等于量直角边的平方和。
可以用符号语言表述为:设直角三角形 $ABC$,其中 $angle{C} = 90^circ$,则有
begin{equation}
AB^2 = BC^2 AC^2
label{eq:pythagorean}
end{equation}
begin{center}
begin{tikzpicture}[scale=0.5,font=small]
draw[thick] (0,0) node[left] {$A$}
-- (4,0) node[right] {$C$}
-- (4,3) node[above right] {$B$} -- cycle;
draw (3.5,0) |- (4,0.5);
end{tikzpicture}
end{center}
end{theorem}
end{frame}
subsection{勾股数}
begin{frame}
frametitle{勾股数}
满足式ref{eq:pythagorean}的整数称为勾股数。前面所说毕达哥拉斯学派得到的三元数就是勾股数。常见的勾股数如下表所示。
rowcolors{2}{green!25}{green!50}
begin{table}
centering
begin{tabular}{rrr}
rowcolor{blue!50} 直角边 $a$ & 直角边 $b$ & 斜边 $c$ \
3 & 4 & 5 \
5 & 12 & 13 \
7 & 24 & 25 \
8 & 15 & 17 \
end{tabular}
caption{较小的几组勾股数}
label{tb:pythagorean}
end{table}
end{frame}
end{document}