如何使用 Pandoc 和 LaTeX 制作漂亮的 pdf

1. 前言

markdown 是很多程序员都喜爱的文档格式,简洁切功能强大,通过一些 markdown 文本编辑器可以方便导出成 pdf 文件,但是不同的 markdown 支持的主题

导出的 pdf 差别还是很大,很多现代编译器在编辑过程中,并不能很好地发现 ‘零宽度字符’, 导致出现了一些很难发现的 bug。即使是这样 markdown 还是我的

最爱,快速且方便,随便文本编辑器都可以打开,也可以看懂,只是没有 preview 的功能。

但是有一些需要输出到其他格式文件时,markdown 就有点显得不太够用。这个时候就需要我们今天的主角之一的 pandoc

2. 文本转换工具 Pandoc

pandoc 是用 haskell 编写的一个 cli 工具,可以支持 docx、epub、html、json、latex、markdow、vimwiki、org、asciidoc 等等格式之间互相转换。mac、

windows、linux 的安装也都是很简单,官方都有安装教程。

3. 文本编排工具 LaTeX/TeX

LaTeX,是一种基于 TeX 的排版系统。 TeX 是由美国计算机 Donald Ervin Knuth 编写的排版软件。至于 Donald Ervin Knuth 真的是神人。Donald Ervin Knuth

编写 TeX 的原因,就是当时计算机的排版技术十分粗糙,影响到他的巨著《计算机程序设计艺术》的印刷质量,老爷子就决定自己编写一个排版软件:TeX。

用 word 写过毕业论文的都知道,word 的排版真的不是很好用,很多人应该都是用不好的,word 也有自己的宏什么的,掌握很好的话,使用起来也是很方便的,

但是很多时候,鼠标的误操作就导致文本携带的编排细心丢失,而且还有各种版本的问题。至少没有什么人用 word 来编排书籍吧。但是 LaTeX 就可以很好的胜

任(为什么我们学校毕业论文没有 LaTeX 模板啊,很多期刊论文都是用自己的 LaTex 模板啊)。

4. 高颜值的粘合剂 Eisvogel

Eisvogel,A clean pandoc LaTeX template to convert your markdown files to PDF or LaTeX。

eisvogel 通过 pandoc 把 markdown 转换成 LaTex,然后把 LaTeX 再转换成 pdf。本身 pandoc 已经可以把 markdown 或者是 LaTeX 文本转成 pdf 文本,那为什

么用 eisvogel,因为 eisvogel 本身定义了 LaTeX 的模板,也固定了 markdown 标签的支持,例如 Url 等等。

5. 安装配置

以 MacOS 为例

  1. 安装 LaTeX Mac 安装 MacTex,进入 http://www.tug.org/mactex ,点击下载安装(由于 MacTeX 很大,建议使用 axel 或者换用国内的源)。

  2. 安装 pandoc brew install pandoc

  3. 安装 eisvogel 进入 https://github.com/Wandmalfarbe/pandoc-latex-template ,根据其文档进行安装,使用方法也有详细说明。

6. 效果

例如本文以 markdown 编写的,

---
title: "如何使用 pandoc 和 latex 制作漂亮的 pdf"
subtitle: ""
author: [Tuya.Inc]
date: "2019-09-08"
header-left: "/Users/fri3nds/.pandoc/templates/tuya-logo.png"
titlepage: true,
titlepage-text-color: "000000"
titlepage-rule-color: "360049"
titlepage-rule-height: 0
titlepage-background: "/Users/fri3nds/.pandoc/templates/cover.pdf"
---


## 1. 前言

markdown 是很多程序员都喜爱的文档格式,简洁切功能强大,通过一些 markdown 文本编辑器可以方便导出成 pdf 文件,但是不同的 markdown 支持的主题导出的 pdf 差别还是很大,很
多现代编译器在编辑过程中,并不能很好地发现 ‘零宽度字符’, 导致出现了一些很难发现的 bug。即使是这样 markdown 还是我的最爱,快速且方便,随便文本编辑器都可以打开,也可以看懂,
只是没有 preview 的功能。

但是有一些需要输出到其他格式文件时,markdown 就有点显得不太够用。这个时候就需要我们今天的主角之一的 `pandoc`

## 2. 文本转换工具 Pandoc

[pandoc](https://pandoc.org/) 是用 haskell 编写的一个 cli 工具,可以支持 docx、epub、html、json、latex、markdow、vimwiki、org、asciidoc 等等格式之间互相转
换。mac、windows、linux 的安装也都是很简单,官方都有安装教程。

## 3. 文本编排工具 LaTeX/TeX

LaTeX,是一种基于 TeX 的排版系统。 TeX 是由美国计算机 Donald Ervin Knuth 编写的排版软件。至于 Donald Ervin Knuth 真的是神人。Donald Ervin Knuth 编写 TeX 的原
因,就是当时计算机的排版技术十分粗糙,影响到他的巨著《计算机程序设计艺术》的印刷质量,老爷子就决定自己编写一个排版软件:TeX。

用 word 写过毕业论文的都知道,word 的排版真的不是很好用,很多人应该都是用不好的,word 也有自己的宏什么的,掌握很好的话,使用起来也是很方便的,但是很多时候,鼠标的误操作
就导致文本携带的编排细心丢失,而且还有各种版本的问题。至少没有什么人用 word 来编排书籍吧。但是 LaTeX 就可以很好的胜任(为什么我们学校毕业论文没有 LaTeX 模板啊,很多期刊
论文都是用自己的 LaTex 模板啊)。

实际效果:

对 eisvogel.latex 模板做了一定的更改,在其 latex 模板里面加入了页眉支持图片。也可以根据自己的具体需求,加入一些 graph 的支持,也可以对模板进行改造。eisvogel 文档中说,header-left、 titlepage-background 等是根据相对路径的,进过实际测试,根据绝对路径也是可以的;但是其不支持 $HOME,也就是说不支持 ~/xxxx/a.png 这种路径(也可能是我自己系统的设置导致的)。

6. 总结

markdown 基本上可以满足我们大多数文档格式的需求,转化成 pdf 也是可以通过 pandoc 很轻松的。如果您想您的 pdf 更好看一些,就可以使用 eisvogel。

编写还是 markdown 的语法,出来的效果比大多数的 pdf 都好看,何乐而不为呢!如果您有更高的需求,或者对 LaTeX 很熟悉,pandoc 可以直接将 LaTeX

转成 pdf。

招聘:

如果您对我们团队感兴趣,欢迎加入,期待您的加入,可以投递我的邮箱 chenglong@tuya.com !

更多岗位可以查看 Tuya 官网