第七节 学术幻灯片

状态:文稿准备中

本节之前,还没有谈及 \(\rm \LaTeX\) 文档目次结构的相关内容,主要有两个原因:

  1. \(\rm \LaTeX\) 默认的分节符号字体和间距较大,不符合环保使用纸张的要求,日常非正式出版物以紧凑排版为主,使用制表间隔进行层级划分效果更好。
  2. 如果已经预先知道同时需要一份报告和一份对应的幻灯片文件。读完本节后,你就会意识到优先幻灯片制作将有利于同时产生两份文件。养成这个习惯将会提高工作效率。(当然,如果先完成了讲稿,也可以使用断帧接续的功能自动生成幻灯片,只是有些功能会有删减。)

相较于第 2 节,PowerPoint 更加适合制作对动画要求较高的幻灯片。而对于正式严肃的学术场合,使用相对静态的 Beamer 宏包所产生的幻灯片更为合适,这还有助于自动产生良好的排版。

7.1 目次结构

在本小节中,将会把普通的文稿结构和幻灯片结构并排来看,以便更好地理解 \(\rm \LaTeX{} \) 中幻灯片的排版逻辑。

普通的文稿排版,分为部分、章、节、小节、小小节、段、小段这些级别。注意部分part需要使用书籍类book,章chapter需要使用报告类report,一般我们使用文档类article
% \part{第一部分}   % [book]
% \chapter{第一章}  % [report]
\section{第一节}
\subsection{第一小节}
\subsubsection{第一小小节}
\paragraph{一段内容} 一段内容
\subparagraph{一小段内容} 这一节将会讲述一些内容。

正文内容正文内容正文内容正文内容正文内容正文内容
幻灯片排版一般使用节、小节分割目次,并使用帧frame标识不同的幻灯片,一节里面可以有很多的帧,每个帧可以有一个标题frametitle(以及子标题framesubtitle),并推荐使用盒子突出重点内容。
\section{速度 坐标交换}
\subsection[位移关系]{位移关系}
    \begin{frame}
        \frametitle{坐标交换}
        然后,我们来看一种更为自然的引入方法。
        \begin{block}{结论}
            我的结论
        \end{block}
    \end{frame}

7.2 文件复用

\(\rm \LaTeX\) 的一大核心思想即样式与内容分离(衍生到现在的前端与后端分离),而实现这一思想的核心方法即文件分离:编译器可以拼接任何 \input{} 所关联的文件内容。相较于 PowerPoint 可以将文本通过文本框放置在任何位置而不需要遵循大纲占位符填入内容,Beamer 规定了幻灯片必须严格按照标题——内容规格输入,这为排版完成一个幻灯片同时产生排版良好的讲义文件提供了可能。如果将\begin{document}\end{document} 之间的内容存放在 example.tex 中,通过下面两种文件的包装,将会分别产生幻灯片文件和讲义文件。使用 VS Code 编译将会通过 document 环境定位主文档位置,注意由于需要产生目录,所以需要使用 pdfLaTeX 编译两次,以利用中间文件 .toc。
讲义文件采用 article 文档类,采用 article 模式,需要补充一些宏包以使用原有的 beamer 文档类所具有的功能。通过忽略 frame 环境的相关指令以及幻灯片标题来产生论文式的文档排版。设置为 song 宋体衬线字体用于印刷。
\documentclass[a4paper]{article}
\usepackage{beamerarticle}
\mode<article>
\usepackage{CJKutf8}
\usepackage[colorlinks, 
linkcolor=blue, 
anchorcolor=blue, 
citecolor=blue]{hyperref}
\hypersetup{unicode}
\usepackage{bookmark}
\usepackage{graphicx}
% \usepackage{geometry}
% \geometry{left=2.0cm, right=2.0cm, top=2.0cm, bottom=2.0cm}
\renewcommand{\contentsname}{目录}
% ignores the frame header.
\setbeamertemplate{frametitle}{}
\setbeamertemplate{framesubtitle}{}
\setjobnamebeamerversion{example_beamer}

\begin{document}
\begin{CJK}{UTF8}{song}
    \input{example.tex}
\end{CJK}
\end{document}
幻灯片文件采用 beamer 文档类,采用 presentation 模式,需要设置幻灯片模板为 CambridgeUS,并设置数学字体仍为衬线字体。设置为 hei 黑体非衬线字体用于屏幕演示。中段手动添加了 \(\rm \TeX{}\) 代码用于忽略一个警告,因为汉字必须在正文添加,不能提前至导言区。
\documentclass{beamer}
\mode<presentation>
\usetheme{CambridgeUS}
\usefonttheme{serif}
\usepackage{CJKutf8}
\hypersetup{unicode}
\usepackage{bookmark}
\makeatletter % To ignore the warning of "pdfauthor"
\def\Hy@WarnOptionDisabled#1{
    \def\next{#1}%
    \def\ignore{pdfauthor}%
    \ifx\next\ignore%
    \else\Hy@Warning{%
Option `#1' has already been used,\MessageBreak setting the option has no effect%
    }\fi
}
\makeatother

\begin{document}
\begin{CJK}{UTF8}{hei}
    \input{example.tex}
\end{CJK}
\end{document}

文件分离所带来的好处不仅是可以复用,在长期稳定版本 \(\rm \LaTeX2\varepsilon{}\) 发布的 1998 年,就已经可以使用这种文件分离模式实现多人合作编写一份文档,或者实现分文件的内容管理(一个例子就是上海交通大学学术论文模板将各部分分割成不同的.tex文件分别编辑,最后合并),最后通过一个主要的样式头统一样式。

7.3 渐进切换

Beamer 宏包产生的幻灯片仍然是 PDF 格式,播放幻灯片推荐使用 Adobe Acrobat / WPS PDF 打开,启用视图——全屏模式播放。如果是浏览器打开的,可以按下 F11 将界面全屏,并启用适用页面大小的模式,使用 PageDown 或 Beamer 内置的工具栏翻页。

静态的幻灯片与较少的软件界面支持将给演讲者带来更大的挑战。在 Beamer 中,可以设置渐进切换这种轻量级的动画方法,来达到提示的效果。而为了达成这一效果,就需要使用以尖角括号开头结尾<>的修饰符。

渐进切换 example_uncover.pdf [源代码]

7.3.1 渐进切换效果可以用于列表环境,通过对列表环境添加修饰符[<+->],Beamer 就会针对每一项的展开自动新建一帧,这样演讲者点点鼠标就可以让幻灯片上的点与正在演讲内容对应。

  • 第 1 点
  • 第 1 点
  • 第 2 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 1 点
  • 第 2 点
  • 第 1 点
  • 第 2 点
  • 第 3 点

关于列表渐进,以下两种设置方式是等价的:

自动添加修饰符 +为自增通配符,使用中括号扩起将会对每一个条目添加对应的修饰符。
\begin{itemize}[<+->]
    \item 第 1 点
    \item 第 2 点
    \item 第 3 点
\end{itemize}
手动添加修饰符 <1->表示从第一帧开始会显示。如果将-去除,该条目将不会在下一帧显示。
\begin{itemize}
    \item<1-> 第 1 点
    \item<2-> 第 2 点
    \item<3-> 第 3 点
\end{itemize}

7.3.2 渐进式切换效果可以用于悬念式展开。根据上面学到的修饰符语法,可以使用actionenv环境添加修饰符,让内容在之后的帧中展开。

第一行推导
第一行推导
第二行推导
第一行推导
第二行推导
结论
第一行推导
第一行推导
第二行推导
第一行推导
第二行推导
结论
普通的内容需要使用actionenv环境括起来再应用修饰符。如果是<1->则可以省略,毕竟就是从第一帧开始的。
第一行推导\par
\begin{actionenv}<2->
    第二行推导
\end{itemize}
列表环境、区块环境、定理环境可以直接在环境上添加修饰符。
\begin{block}<3->{结论}
    我的结论
\end{block}

7.3.3 渐进切换还有几种选项。

第一种,可以突出显示正在关注的条目。

  • 第 1 点
  • 第 1 点
  • 第 2 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 1 点
  • 第 2 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
使用|管道符串联使用alert@+可以突出显示最后一个条目。
\begin{itemize}[<+-| alert@+>]
    \item 第 1 点
    \item 第 2 点
    \item 第 3 点
\end{itemize}
如果需要单个添加突出显示的条目,可以单独使用alert@1或者使用\alert{内容}
\begin{itemize}
    \item 第 1 点
    \item<alert@1> 第 2 点
    \item 第 3 点
\end{itemize}

第二种,可以使用半透明的方式展示将要显示的内容。由于幻灯片一般都是投影到幕布上使用的,那么离幕布近的演讲者就能透过这些半透明的文字获得下面将要演讲什么的提示,而离幕布远的观众就看不清这些提示,这样就可以达到辅助演示的效果。

  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 1 点
  • 第 2 点
  • 第 3 点
打开一个开关就可以实现半透明提示。
\setbeamercovered{transparent}
默认情况下不展示的内容是完全看不到的。
\setbeamercovered{invisible}

第三种,当尝试去分发幻灯片的影印版时(最好是使用article模式分发),不希望将这些渐进切换的部分分发出去,太罗嗦了。beamer文档类提供了一个选项[trans],可以直接将每一组渐进切换合并成一帧编译。

\documentclass[trans]{beamer}

7.3.4 和 PowerPoint 的缩放定位功能类似,Beamer 也有每次结束一节就插入提纲页的功能。为了实现这一点,需要通过下面的命令为每一个子小节添加一个预设帧。

\AtBeginSubsection[]{
    \begin{frame}<presentation>
    \frametitle{提纲}
    \tableofcontents[currentsection,currentsubsection]
    \end{frame}
}

这里的目录被设置成高亮当前节与当前小节,并采用<presentation>修饰符使得这些插入的页面只会出现在幻灯片中。

7.3.5 有时候,你会希望讲义与幻灯片的内容是不同版本的,修饰符也可以派上用场。只要在环境上添加 <article>(仅文档) 或 <presentation>(仅幻灯片)修饰符即可。

可以针对帧直接赋予修饰符,使其只出现在幻灯片中,这样不来听课的人就看不到了。
\begin{frame}<presentation>
    只会出现在幻灯片中。
\end{frame}
也可以采用\only命令行内赋予修饰符。这样大家就要去买讲义了。
\only<article>{
    只会出现在文稿中。
}

7.4 断帧接续

断帧接续与渐进切换操作是互斥的。

使用过 Adobe Indesign 的人都会了解一个功能:将多个文本框连接起来,当一个文本框的内容溢出的时候,将会流入另一个文本框中。

多页 Ⅰ
  • 第 1 点
  • 第 2 点
  • 第 3 点
多页 Ⅱ
  • 第 4 点
  • 第 5 点
  • 第 6 点
多页 Ⅲ
  • 第 7 点
  • 第 8 点
  • 第 9 点
多帧 Ⅰ
  • 第 1 点
  • 第 2 点
  • 第 3 点
多帧 Ⅱ
  • 第 4 点
  • 第 5 点
  • 第 6 点
多帧 Ⅲ
  • 第 7 点
  • 第 8 点
  • 第 9 点

在 Beamer 中,这个功能也是存在的。当一个帧被赋予了allowframebreaks参数时,一帧内多余的内容就会流入另一帧中。如果是数学公式,还可以再使用allowdisplaybreaks对公式按行截断(此时需要有allowframebreaks参数,否则该选项没有意义)。标题也会因此变成由罗马数字顺序标号的帧组(如果帧组没有标题,当然也就没有标号了)。

\begin{frame}[allowframebreaks,allowdisplaybreaks]
    多行长公式
\end{frame}
\begin{frame}[allowframebreaks]
    长内容
\end{frame}

事实上,对于列表环境,由于右部的空隙过大,或许使用双栏排版是一个不错的选择。

% \usepackage{multicol}
\begin{frame}
\frametitle{双栏}
\begin{multicols}{2}
    \begin{itemize}
        \item 第 1 点
        \item 第 2 点
        \item 第 3 点
        \item 第 4 点
        \item 第 5 点
        \item 第 6 点
    \end{itemize}
\end{multicols}
\end{frame}
双栏
  • 第 1 点
  • 第 2 点
  • 第 3 点
  • 第 4 点
  • 第 5 点
  • 第 6 点
  • 甚至可以尝试一种激进的做法,将所有的内容放入一个帧中,并设置这个帧可以断帧接续。当需要手动断帧时,使用\framebreak命令。这样就可以根据讲义自动生成幻灯片了!让 \( \rm \LaTeX \) 成为你的 PPT 工具人。

    关于自动生成幻灯片mini AutoBeamer的部分,通过重定义目次分割符号能够得到两种版本:

    转换 report 类的讲义,该类型的以chapter分割每块,以section作为小标题。
    \def\section#1{
        \par\framebreak
        {
            \bfseries \color{red} #1
        }
    }
    \def\chapter#1{
        \framebreak
        \vspace*{0.3\paperheight}
        \begin{center}
            \Large\color{red} #1 
        \end{center}
        \vspace*{0.3\paperheight}
        \newpage
    }
    转换普通的 article 类讲义,该类型的以section分割每块,以subsection作为小标题。
    \def\subsection#1{
        \par\framebreak
        {
            \bfseries \color{red} #1
        }
    }
    \def\section#1{
        \framebreak
        \vspace*{0.3\paperheight}
        \begin{center}
            \Large\color{red} #1 
        \end{center}
        \vspace*{0.3\paperheight}
        \newpage
    }
    上面的 mini AutoBeamer 已经被整合到 Autobeamer 的 pkg 分支中,可以直接使用。

    当然,如果已经有 Markdown 文稿,可以在电脑上直接使用顶端的 AutoBeamer 在线版本转换为 \(\rm \LaTeX\) 文档,下载到本地同一个文件夹中编译,小文档可以在线预览出结果。