LaTeX beamer 类使用教程

CSP_Sept

2022-02-08 14:01:07

Personal

**本文不允许任何形式的转载,除非得到作者 [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)