学术范儿的幻灯片制作:Beamer in Rmarkdown

发布时间:2021-10-28 阅读 3654

作者: 陈波 ( 深圳大学 )
邮箱: 1900123011@email.szu.edu.cn


目录


1. 为什么要用 Rmd ?

在学习一门新工具的时候,我们都会问到一个拷问灵魂的问题:这个工具跟已有工具有什么区别?同样地,既然微软的 Power Point 可以做 PPT ,我们为什么还要用 Rmarkdown ?

就我个人而言,使用 Rmd 主要是出于以下两点:

功能简单

先问一个简单的问题:PPT 好用吗?好用,它实在是太好用了。只要你足够熟练,它几乎能实现你任何想要的功能,各种酷炫的功能让人目不暇接,我甚至还见过用 PPT 做逐帧动画的。但也正是因为它太好用了,繁复的功能使我们难以专注于内容的表达,总想手痒加点特效什么的。

与之相比,Rmd 的功能却很单薄,只需要掌握一些基础语法即可使用。但也正是如此,它受到了诸多研究者的青睐。对于日常沉浸在文献中研究者而言,我们只需要一款简单的文本记录工具,简单到只需输入文字与字符即可。

学术范儿

相比于 PPT 自带的商务风,Rmd 输出的 Beamer 则有着天然的学术范儿。如果日常生活有留意的话,可以发现,越是严肃的学术会议, Beamer 出现的频率通常也越高,这一点在国外尤其明显。

因为 Beamer 有个极为突出的优点,那就是它支持 LaTeX 。而微软自带的公式编辑器,不能修改字体不说,写出来的公式也是奇丑无比。多用 LaTeX 起码可以提高在排版和公式上的审美。

2. 安装

首先,本文所讲的是 Rmd,自然要在 R 语言中运行。因此,假设各位读者已经安装好了 R 和 RStudio。如果没安装的话,可以参考这篇推文:R 语言和 RStudio 的安装、R Profile 的配置 。该文有详细介绍 Windows 和 Mac 环境下的安装与设置操作。

安装好 RStudio 之后,再安装 rmarkdowntinytex 两个包 :

install.packages('rmarkdown')
install.packages('tinytex')
tinytex::install_tinytex()

tinytex 是一个瘦身版的 TexLive ,只要一百来兆。正是因为这个包的存在,我们可以摆脱庞大的 TexLive 或 MacTex 而使用 LaTeX。这也是 Rmd 的一大亮点,毕竟对于笔记本来讲,能节约几个 G 的内存真是善莫大焉。

该包的开发者是 R 语言大神谢益辉,他也是 Rmd 的主要作者。关于 TinyTex 的更多内容,可以访问谢益辉的个人网站:https://yihui.org/tinytex/cn/ 。

3. 基础操作

3.1 新建文件

我们先点击左上角的 New file --> Presentation --> PDF(Beamer) -->save as demo, 新建一个名为 demo 的 Rmd 文档, 并将其存储在桌面上 Rmd 文件夹中。

在新建的 demo 文档中,系统自带了一个简单的模板,里面有一些基础性的语法,我们可以点击右上方的 knit ( Mac 中的快捷键为 shift+command+k ),查看一下结果。结果出来后,Rmd 文件夹中也会生成一个 demo.pdf 。

3.2 首页设置

但是多数情况下,系统自带的“丐版”并不能满足我们的需求。我们得手动添加一些基本信息。

代码如下:

---
title: "菠萝菠萝哒的 Rmarkdown 教程"
subtitle: "以 Beamer 为例"
author: 
   - 菠萝菠萝哒$^1$
   - 路人甲$^2$
institute: 
   - $^1$克莱登大学经济学系
   - $^2$xxxx大学
date: "`r Sys.Date()`"
mainfont: Times New Roman
fontsize: 10pt
output: 
  beamer_presentation: 
    fonttheme: structurebold
    theme: Ilmenau
    colortheme: beaver
    latex_engine: xelatex
header-includes: 
  - \usepackage{ctex}
  • --- :分页符,表示新建一个空白页
  • title :标题
  • subtitle :副标题
  • author :作者,可有多位作者
  • institute : 作者单位,可有多个单位
  • data :日期,可手动设定,也可以使用系统日期 r Sys.Date()
  • mainfont :正文字体
  • fontsize :正文字体大小
  • output :输出格式,beamer_presentation 意为输出 Beamer 格式的 PDF 文档。
    • fonttheme :主题字体
    • theme :Beamer 主题
    • colortheme :颜色主题
    • latex_engine :编译引擎,一般设定为 xelatex
  • header-includes:调用 packages ,需要特别注意的是,如果是中文写作,一定要调用 ctex 包,不然会不显示或乱码

关于 Beamer 的主题设置,可以参考网站:https://hartwork.org/beamer-theme-matrix/ 。其中竖列为主题 theme ,横行为颜色主题 colorthem

点击工具栏中的齿轮--> output options,也可以通交互框来实现部分输出功能。

最终效果如下所示:

4. 进阶

一份合格的学术 PPT ,除了文字之外,图片、表格和公式也是不可或缺的内容。那么我们该怎么实现这些功能呢?

4.1 插入图片

插入图片有两种方法,一种较为简单,但是可设定的参数较少。具体如下所示:

![阔阔爱爱,没有脑袋](pictures/dog.JPG){width=50%}

方括号内的为图片名称 (图片名称可以为空) ,圆括号的为图片的存储路径和图片名称,花括号内设定图片的长宽,本文将其设定为原始尺寸的 50% 。

第二种方法则需要引入 knitr 包中的 include_graphics 组件。下列代码中,r 表示下列运行的是 R 代码,echo=TRUE 为显示下列运行代码,也可以设定为 FALSEfig.cap 为图片标题,fig.align='center' 为图片位置,设置为居中,out.width='50%' 为设置图片输出宽度为原始尺寸的 50% 。同理,也可以根据 out.height 设定输出高度。

​```{r, echo=TRUE, fig.cap="阔阔爱爱,没有脑袋",fig.align='center', out.width='50%'}
knitr::include_graphics("pictures/dog.JPG")
​```

下图为效果图,两种效果是一样的。

4.2 插入表格

作为 LaTeX 和 markdown 的混血儿,Rmd 同时支持这两种格式的表格。

首先我们以 markdown 为例,输入一个回归表格。

|          |   Yvar    |   Yvar    |   Yvar    |   Yvar    |
| -------- | :-------: | :-------: | :-------: | :-------: |
|          |    (1)    |    (2)    |    (3)    |    (4)    |
| AQI      | 0.0142*** | 0.0222*** | 0.0391*** | 0.0423*** |
|          | (0.0011)  |  (0.001)  | (0.0012)  |  (0.001)  |
| Controls |    No     |    Yes    |    No     |    Yes    |
| N        |    100    |    100    |    100    |    100    |
| R2       |   0.001   |   0.175   |   0.005   |   0.334   |

可以发现,如果纯手动输入的话,还是比较麻烦的。因此我们可以先在 Excel 中把表格编辑好,粘贴到 typora 中,typora 会自动生成转为 markdown 格式的表格,我们将源代码粘贴至 Rmd 中即可。

另一种方法则是直接输入 LaTeX 格式的表格。同样地,我们先在 Excel 中编辑好后,借助一款名为 EXCEL2LATEX 的拓展,将 Excel 表格转为 LaTeX 代码。

关于EXCEL2LATEX的更多内容,可以访问该网站:https://ctan.org/pkg/excel2latex

将 LaTeX 拷贝到 Rmd 文档中,运行即可。

\begin{table}[htbp]
  \centering
    \begin{tabular}{ccccc}
    \toprule
          & \textit{Yvar} & \textit{Yvar} & \textit{Yvar} & \textit{Yvar} \\
          & (1)   & (2)   & (3)   & (4) \\
    \midrule
    \textit{AQI} & 0.0142*** & 0.0222*** & 0.0391*** & 0.0423*** \\
          & (0.0011) & (0.001) & (0.0012) & (0.001) \\
    \textit{Controls} & \textit{No} & \textit{Yes} & \textit{No} & \textit{Yes} \\
    \midrule
    \textit{N} & 100   & 100   & 100   & 100 \\
    \textit{R2} & 0.001 & 0.175 & 0.005 & 0.334 \\
    \bottomrule
    \end{tabular}
  \label{tab:addlabel}
\end{table}

下面是 markdown 和  LaTeX 的结果。可以发现,大体效果相似,但是 markdown 的细节要少很多。因此,一般还是建议使用  LaTeX 表格。

当然,还有一种更简单粗暴的做法,就是直接将表格截图,然后以图片形式插入 Rmd 中,直接绕开这个问题。

4.3 插入公式

Rmd 继承了 LaTeX 的一大优点,那就是公式编辑非常简单与美观。

我们以单个公式为例。如果是行间公式的话,需要在公式首尾加入两个美元符号 $$ 。如果是行内公式的话,插入一个美元符号 $ 即可。

$$
Y=d \tilde{X}+b \tilde{M}+e_{3}
$$

其中 $\tilde{X} = X - \bar{X}$

如果懒得敲公式的话,可以借助 Mathpix Snip 这个软件,将公式扫描一下,即可生成  LaTeX 代码。

有时候我们需要插入公式组,也可以通过 Mathpix Snip 来实现:

$$
\begin{aligned}
\operatorname{plim}[\hat{b}] &=b+\operatorname{plim}\left[\frac{\sum e_{1 i} e_{3 i} \sum \tilde{X}_{i}^{2}-\sum e_{1 i} \tilde{X}_{i} \sum \tilde{X}_{i} e_{3 i}}{\sum e_{1_{i}^{2}} \sum \tilde{X}_{i}^{2}-\Sigma^{2} e_{1 i} \tilde{X}_{i}}\right] \\
&=b+\frac{\operatorname{cov}\left(e_{1}, e_{3}\right)}{\operatorname{var}\left(e_{1}\right)}
\end{aligned}
$$

具体结果如下所示:

5. 代码块

因为 Rmd 内嵌于 R 语言中,我们可以直接通过代码块来调用 R 里面的一系列功能。

最常见的,就是用代码块来绘制各种图形。

例如,我们写一个 function,然后用 R 把它画出来。这里我们用的是 R 中的 curve 函数。

​```{r , echo=F, fig.width=10/2.54, fig.height=10/2.54,out.width="70%"}
curve(exp(-0.1*x)*sin(x), 0, 4*pi)
abline(h=0, lty=3)
​```

既然可以画一个,那我们自然也可以画两个:

​```{r, echo=F, fig.width=10/2.54, fig.height=10/2.54, out.width="45%"}
curve(exp(-0.1*x)*sin(x), 0, 2*pi)
abline(h=0, lty=3)
curve(exp(-0.1*x)*cos(x), 0, 2*pi)
abline(h=0, lty=3)
​```

下面是绘制结果:

实际上,借助 R 的代码块,我们可以实现非常多的功能。就绘图而言,它就丝毫不弱于 LaTeX 里面 TikZ 包。

6. 相关推文

Note:产生如下推文列表的 Stata 命令为
. lianxh 幻灯片 Markdown

安装最新版 lianxh 命令:

ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh