LaTeX beamer 类使用教程
CSP_Sept
2022-02-08 14:01:07
**本文不允许任何形式的转载,除非得到作者 [CSP_Sept](/user/224931) 的许可。**
$\Large\textbf{0 }\textsf{前言}$
$\large\textsf{0.1 }\textbf{写作目的}$
beamer 是 LaTeX 提供的一种制作演示文档的工具,目前国内似乎没有一篇比较完备的原创手册。
所以想写一篇。
$\large\textsf{0.2 }\textbf{感谢}$
感谢 StudyingFather(详见「参考文献 3」)让我知道了 beamer 这个类。
感谢离散小波变换°给了我诸多支持与帮助。
还有网上诸多博客的作者,这里无法一一列出他们的名字,在这里一并表示衷心的感谢。
$\large\textsf{0.3 }\textbf{凡例}$
**2022 年 10 月 1 日更新:在 TeXLive2022 环境下除了中文标点更加美观外,对下面的展示没有区别。**
**本文默认在 TeXLive 2021,Windows 10 环境下生成演示文档,pdf 打开工具为 SumatraPDF。**
读者请保证自己在导言区调用了如下宏包:
```latex
\usepackage{graphicx, graphics}
\usepackage{float, array, color, ctex}
\usepackage{amsmath, amssymb}
\usepackage{multicol, multirow, makecell, tabu, dcolumn}
\usepackage{fancyhdr, lastpage}
\usepackage{listings, xcolor}
\usepackage{xeCJKfntef}
\usepackage{fontspec, xunicode, xltxtra}
\usepackage{setspace}
\usepackage{geometry}
```
下文中「导言区」指在 document 环境外的部分。
$\Large\textbf{1 }\textsf{基本使用}$
$\large\textsf{1.1 }\textbf{基本编译方法}$
我们考虑下面的导言代码:
```latex
\documentclass[table]{beamer}
\usepackage[UTF8, noindent]{ctexcap}
\usetheme{Szeged}
\usecolortheme{beaver}
```
第一行表示该文档是 beamer 类型,第二行保证了该文档能正常显示中文,第三四行设置了演示文档的主题。
主题可在 [Beamer Theme Matrix](https://hartwork.org/beamer-theme-matrix/) 自由组合,你也可以自己编写主题,但这超出了我们的讨论范围。
```latex
\title{Your title}
\author{Your name}
\institute{Your team}
\date{Your date}
```
data 留空默认为生成文件的当天的日期。
也可以使用 `\and` 和 `\inst` 命令,前者用于分开多位作者,后者用于分开多个组织。
在 document 环境中,加入如下代码:
```latex
\frame{\titlepage} % 生成标题页
\begin{frame} % 生成目录页
\frametitle{目录}
\tableofcontents
\end{frame}
\begin{frame} % 插入空白页
\frametitle{Something} % 一页的标题
Something
$x^n+y^n=z^n$
\end{frame}
```
键入上述代码并运行,得到下面的效果:
![](https://cdn.luogu.com.cn/upload/image_hosting/u3gjhi6c.png)
我们看到这里的公式很丑,怎么解决呢?
考虑在导言区加入如下代码(二选一):
```latex
\usefonttheme[onlymath]{serif}
\usefonttheme[math]{serif}
```
有如下效果:
![](https://cdn.luogu.com.cn/upload/image_hosting/mprp0uzc.png)
可以看到,onlymath 仅设置了公式字体,而 math 设置了全局字体,我们在下面的展示中默认开启 math 选项。
我们可以在每页演示文档(下称一个 frame 环境及其产物为「帧」)外加入 `\section` 等命令,使用方法和效果与普通文档相同。
可以利用 `\alert` 命令把文字调为亮红色,或使用 `\emph` 命令将文字调为斜体。
beamer 同样支持 theorem、lemma、proof、corollary、example 等环境,但不建议直接使用,因为在国内的演示文档中过多中英文混杂不甚美观。
$\large\textsf{1.2 }\textbf{目录}$
我们在上面给出了目录代码。
```latex
\begin{frame}
\frametitle{目录}
\tableofcontents
\end{frame}
```
你可以选择加入 `[pausesections]` 选项,这样就可以把目录进行分帧展示。
也可以在导言区加入如下代码:
```latex
\AtBeginSection[]{
\begin{frame}
\frametitle{Contents}
\tableofcontents[currentsection]
\end{frame}
}
```
这样会在每个部分的开头显示目录,并将会高亮当前部分标题。
$\large\textsf{1.3 }\textbf{分层展示}$
$\text{1.3.1 分层}$
`\pause` 命令可以让内容分多次展示。
```latex
\begin{frame}
A \pause
B
\end{frame}
```
上述代码中,B 会在 A 后出现。
$\text{1.3.2 分层规格}$
接下来我们将在 `itemize` 或 `enumerate` 环境中应用分层规格,阅读下列内容之前,请读者确保自己知道该环境的基本语法。
我们考虑下面代码:
```latex
\begin{frame}
下面我们要证明没有最大的质数。
\begin{itemize}
\item<1-> 假设 $p$ 是最大的质数。
\item<3-> 令 $q$ 表示 $2\sim p$ 中所有质数的乘积。
\item<1-> 则 $q + 1$ 不会被这些质数中的任意一个整除。
\item<2-> 但是 $q + 1$ 大于 $1$,因此可以被一些不在前 $p$ 个数中的素数整除。
\end{itemize}
\end{frame}
```
运行后,以上内容分三张展示,$\texttt{<1->}$ 的意义是「从第 1 张开始」。
以上只是个例子,尖括号内可以有如下四种类型:
1. $x\texttt{-}$ 表示从第 $x$ 张开始显示。可以描述为区间 $[x,n]$,$n$ 是该帧所需的幻灯片张数。
2. $\texttt{-}x$ 表示在第 $x$ 张以前显示。可以描述为区间 $[1,x]$。
3. $x\texttt{-}y$ 表示从第 $x$ 张开始显示,到第 $y$ 张结束,其中 $x\le y$。可以描述为区间 $[x,y]$。
4. 以上 3 种混合使用,用 $\texttt,$ 隔开。可以描述为组成各部分的并集。
在 `\only` 命令或 `\uncover` 命令中同样可以使用分层规格。
但需要注意的是,`\only` 命令会导致前后高度不同,在帧环境中,可以添加 `[t]` 选项。
$\large\textsf{1.4 }\textbf{帧环境内的其他操作}$
$\text{1.4.1 更改环境}$
上面(1.1)中提到,不建议直接使用 theorem 等环境,但如何利用好呢?我们有个解决方案。
我们可以在以上环境的基础上进行更改,在导言区键入以下代码:
```latex
\newtheorem{euler}[theorem]{欧拉定理}
```
其中 `[theorem]` 是可选选项。
接下来我们在帧环境内输入:
```latex
\begin{euler}
如果正整数 $n$ 和整数 $a$ 互质,那么就有
\[
a^{\varphi(n)}\equiv1\pmod n
\]
\end{euler}
```
效果:
![](https://cdn.luogu.com.cn/upload/image_hosting/jn25od4m.png)
$\text{1.4.2 页面分栏}$
在 `columns` 环境中调用 `column` 环境,用法同普通文档。
```latex
\begin{columns}
\begin{column}{.5\linewidth}
\end{column}
\begin{column}{.5\linewidth}
\end{column}
\end{columns}
```
这个示例中,把整个页面分成了左右等宽的两列。
$\text{1.4.3 插入参考文献}$
使用如下代码:
```latex
\begin{thebibliography}{1}
\bibitem{书籍 A}[Sept, 2022]
CSP\_Sept.
\newblock 一本好书。
\newblock \emph{Hanx}, 2022.
\end{thebibliography}
```
注意到环境内的 $\texttt{\{\}}$ 可以乱填,也可以不填,但不能删除。
在调用该文献时使用命令 `\cite{}`,$\texttt{\{\}}$ 中填书名。
我们同样可以改变参考文献前的图标种类,考虑加入如下代码:
```latex
\begin{frame}
\begin{thebibliography}{}
\begin{columns}
\begin{column}{.5\linewidth}
\beamertemplatebookbibitems\bibitem[Sept, 2022]{Sept2022}
Sept.
\newblock {\em beamer 教程}.
\newblock 这是一个{\textbf{书籍}}图标.
\beamertemplatearticlebibitems\bibitem[Sept, 2022]{Sept2022}
Sept.
\newblock {\em beamer 教程}.
\newblock 这是一个{\textbf{论文}}图标.
\beamertemplatetextbibitems\bibitem[Sept, 2022]{Sept2022}
Sept.
\newblock {\em beamer 教程}.
\newblock 这是一个{\textbf{引文}}图标.
\end{column}
\begin{column}{.5\linewidth}
\beamertemplatearrowbibitems\bibitem[Sept, 2022]{Sept2022}
Sept.
\newblock {\em beamer 教程}.
\newblock 这是一个{\textbf{三角形}}图标.
\beamertemplateonlinebibitems\bibitem[Sept, 2022]{Sept2022}
Sept.
\newblock {\em beamer 教程}.
\newblock 这是一个{\textbf{球体}}图标.
\end{column}
\end{columns}
\end{thebibliography}
\end{frame}
```
效果如下图:
![](https://cdn.luogu.com.cn/upload/image_hosting/pa54x99q.png)
请注意 `\bibitem` 前的各种命令及其作用效果,同时注意到我们应用了 14.2 中的页面分栏功能。
同时请读者注意 `\beamertemplatearrowbibitems` 命令前置的内容与名称的含义。
$\text{1.4.4 插入代码}$
在帧环境中开启 `[fragile]` 选项,即可使用 `lstlisting` 或 `verbatim` 环境进行代码插入。
我们也可以使用 `\alert` 命令,搭配分成规格,进行多次显示并分别高亮,不过此时需要 `semiverbatim` 环境。
```latex
\begin{semiverbatim}
namespace Sept{
\alert<3->{int plus(int a, int b)}\{
return a + b;
\}
int a, b;
\}
\end{semiverbatim}
```
在上面这份示例中,plus 函数一行在第三张幻灯片时被显示为亮红色。
$\text{1.4.5 更改字体}$
在上面我们介绍了 `\setfonttheme` 命令美化公式字体,此外我们可以使用 `\setbeamercolor` 命令设置其他 beamer 字体。
语法如下:$\backslash\texttt{setbeamerfont\{}⟨beamer\textit-font\ name⟩\texttt{\}\{}⟨\text{future}⟩\texttt\}$
其中 future 有如下类型:
1. $\texttt{size=}$,设置该字体的大小,可用命令 `\large`、`\tiny` 等。
2. $\texttt{shape=}$,设置该字体的形状,可用命令 `\itshape`(斜体)、`\slshape`(正斜体)、`\scshape`(全大写)、`\upshape` 等。
3. $\texttt{series=}$,设置该字体的衬线属性,可用命令 `\bfseries` 等。
4. $\texttt{family=}$,设置该字体的家族。但并没有什么简单的用法。
5. $\texttt{parent=\{}⟨\textit{parent list}⟩\texttt\}$,指定了该字体的父系字体(多个之间用 $\texttt,$ 隔开),该字体会继承它所有父系字体的 future,除非后面的定义里进行了覆盖。但笔者实测表明,调用该字体时,需要在前面至少调用一次它的父系字体中的至少一个。
调用 beamer 字体语法:$\backslash\texttt{usebeamerfont}\{⟨beamer\textit-font\ name⟩\texttt\}$。
$\text{1.4.6 编辑讲义}$
$\text{\textit{1.4.6.1 论文模式}}$
有时我们需要把讲义分发给读者或自己打印,此时我们需要普通的文档。但我们又懒得重新写文档,此时可以使用如下方法:
- 新建 .tex 文档并将原 slide 文档内容复制进来。
- 将 `\documentclass` 中的类型改为 `article` 或 `book`(不推荐使用 `book`)。
- 调用宏包 `beamerarticle`。
- 删除、调整相关内容。
- 编译运行。
这样我们就可以得到一份我们非常熟悉的普通文档。
$\text{\textit{1.4.6.2 讲义模式}}$
并不十分推荐这种方法。
我们把 `\documentclass` 的方括号里的内容改为 `handout`。由于我们需要打印,所以需要在导言区插入如下代码:
```latex
\usepackage{pgfpages}
\pgfpagesuselayout{2 on 1}[a4paper, border shrink=5mm]
```
这样就会在一个页面里显示 2 张幻灯片,也可以用 $\texttt{4 on 1}$ 替换 $\texttt{2 on 1}$,当然此时需要调整纸张类型,例如改为 letterpaper 类型。
$\text{1.4.7 超链接}$
我们考虑如下超链接添加方式(在 article 环境下注意调用 hyperref 宏包):
$\backslash\texttt{href\{链接\}\{链接文本\}}$,该显示效果同 Markdown 的 $\texttt{[链接](链接文本)}$。
注:hyperref 宏包内的「按钮」功能同样值得研究,请读者自行查找资料学习。
___
以上便是 0~1 的全部内容,考虑到后面内容较为深入且前面部分已经涉及到了大部分常用内容,故不展开讲解下面的内容,完整版敬请期待。
$\large\textbf{X }\textsf{参考文献}$
1. BEAMER 用户手册 原版 ver 3.65
2. BEAMER 用户手册 中译版 V3.24
3. [[洛谷日报#229] 用 beamer 制作精美的演示文稿 - StudyingFather](https://studyingfather.blog.luogu.org/beamer-guide)