Pandoc 是一款开源的文档格式转换工具,能够实现大部分的文件格式互转。这里我们主要用来将 Markdown 文档转换成 HTML 和 PDF 风格的幻灯片。 Markdown 语法、结构简单,只需要写出文档的提纲和结构,就能转换成简洁明了又美观的 Slides。


Table of Contents

  1. Pandoc - 格式转换利器
  2. 文档语法结构
    1. 元数据
    2. 文档结构
    3. 数学公式
  3. 幻灯片样式
    1. s5
    2. reveal.js
  4. Beamer 样式
    1. Beamer 模版
    2. 中文字体
  5. 参考

Pandoc - 格式转换利器

Pandoc 是全平台的转换工具,在命令行能够很方便的进行格式转换。 Pandoc 支持的格式及转换方式如下图所示。

更多的可以打开这里 查看,可以看到 Pandoc 支持的格式是极多的。

Pandoc 的安装是非常简单的, 可按照 说明 很方便地安装到系统中。

文档语法结构

Pandoc 支持标准的 Markdown 语法,但在结构上与一般的用 Markdown 写博客有点区别。

元数据

为了让 Pandoc 能渲染 Markdown 文件生成 Slides, 需要在文档头部加上几行元数据信息。

1
2
3
% Title
% Author
% Tate

这样就能生成幻灯片的标题页了。

文档结构

一般情况下,一个 Markdown 文档只有一个一级标题。 Pandoc 中,默认情况下,一级标题代表 一个章节, 三个一级标题就是把幻灯片分为三部分;二级标题代表一张幻灯片; 三级标题则一般是幻灯片内部的块。 一个基本的文档结构如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% Title
% Author
% Tate

# Part I
## slide I
- list 1
- list 2

## slide II
1. list 1
2. list 2

# Part II
## slide III
[amito](amito.me)
## slide IV
![picture](pic.png)

数学公式

Pandoc 支持转换 TeX 数学公式, 能够将数学公式转换成 MathML, 或者通过 MathJax 显示。

1
2
3
$\frac{a}{b^2+c^3}$

$$\frac{a}{b^2+c^3}$$

显示效果为:$\frac{a}{b2+c3}$
$$\frac{a}{b2+c3}$$

幻灯片样式

/usr/share/pandoc-xxx/data 下面有 Pandoc 自带的转换模版, html 幻灯片模版有 dszlides, html, html5, revealjs, s5, slideous, slidy 等等。下面简单介绍几种。

s5

s5 是很流行的 HTML 幻灯片模版,可以从网站上下载后使用,也可以在线使用。本地使用主要是其中的 ui/default, 将其复制到 markdown 所在目录。在线使用需要指定 s5-url

1
2
3
4
#### local
$ pandoc -s -t s5 -o s5.html s5.md
#### online
$ pandoc -s -t s5 -V s5-url=https://cdn.docbook.org/release/xsl-nons/current/slides/s5/ui/default/ -o s5.html s5.md

reveal.js

reveal.js 是非常火的 HTML 幻灯片库,本身支持 Markdown 语法。 离线使用 reveal.js 需要将其下载下来,在线使用可以指定 revealjs-url。下载 reveal.js

1
$ git clone https://github.com/hakimel/reveal.js

渲染 markdown 文件生成 HTML 幻灯片,在线使用可以通过指定 revealjs-url 来使用。

1
2
$ pandoc -s -t revealjs -o h5.html h5.md
$ pandoc -s -t revealjs -V revealjs-url=https://cdnjs.com/libraries/reveal.js/3.6.0 -o h5.htmnl h5.md

reveal.js 自带了一些模版可供选择,通过 -V css=/path/to/css 来指定自带的或自己定制的模版,

1
2
3
4
5
#### local
$ pandoc -s -t revealjs -V css=reveal.js/css/theme/night.css -o h5.html h5.md
#### online
url="https://cdnjs.com/libraries/reveal.js/3.6.0/"
$ pandoc -s -t revealjs -V revealjs-url=$url -V css=$url/css/theme/night.css -V -o h5.html h5.md

也可以修改 reveal.js 模版 /usr/share/pandoc-xxx/data/templates/default.revealjs

1
2
3
4
5
6
7
$if(css)$
$for(css)$
<link rel="stylesheet" href="$css$"/>
$endfor$
$else$
<link rel="stylesheet" href="$revealjs-url$/css/theme/simple.css" id="theme">
$endif$

改为

1
2
3
4
5
6
7
8
9
10
$if(css)$
$for(css)$
<link rel="stylesheet" href="$revealjs-url$/css/theme/$css$"/>
$endfor$
$endif$
$if(theme)$
<link rel="stylesheet" href="$revealjs-url$/css/theme/$theme$.css" id="theme">
$else$
<link rel="stylesheet" href="$revealjs-url$/css/theme/simple.css" id="theme">
$endif$

这样就可以简单指定theme了。

1
$ pandoc -s -t revealjs -V theme=night -o h5.html h5.md

Beamer 样式

Pandoc 能非常方便地将 markdown 转换为独立的 tex 文档,然后通过 tex 命令 可以生成 pdf 幻灯片。

1
2
$ pandoc -s -t beamer -o slide.tex slide.md
$ latexmk -pdf slide.tex

Beamer 模版

Pandoc 有默认的 beamer 模版,使用 platex 编译,如果不喜欢,可以参考默认模版 /usr/share/pandoc-xxx/data/templates/default.beamer 自己定制一个 beamer 模版,网上也有一些现成的模版,可以参考。下面是默认模版生成的幻灯片样式。

中文字体

  1. 首先查看系统中文字体:
1
$ fc-list :lang=zh
  1. 转换时指定字体:
1
$ pandoc -s -t beamer --pdf-engine=xelatex -V CJKmainfont=KaiTi srs.md -o srs.pdf
  1. Markdown 文件中加入设置。默认的 beamer 模版中有 CJKmainfont 变量,指定后会使用 xeCJK 包:
1
2
3
4
5
6
---
CJKmainfont: STSong
CJKoptions:
- BoldFont=STHeiti
- ItalicFont=STKaiti
---
  1. 定制模版,这是比较方便的一种方式,能更改的地方也更多,这里是我根据网上 模版修改过的。

参考

  1. Markdown+Pandoc→HTML幻灯片速成
  2. pandoc does not recognize Chinese characters
  3. Pandoc Demo
  4. Talks with LaTeX Beamer, written in Markdown
  5. PDF slides and handouts using Pandoc and Beamer
  6. User contributed templates
  7. 用pandoc把markdown转化为pdf文档
  8. 纯文本做笔记 — 使用 Pandoc 与 Markdown 生成 PDF 文件