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。