一、Pandoc 简介

Pandoc是用于从一种标记格式转换为另一种标记格式的Haskell库,也是使用该库的命令行工具。它涵盖格式广泛且转换效果好,常用的 docx、md、tex、html 等格式都可以利用其进行相互转换。

二、Pandoc 安装

Pandoc 官网下载安装 :https://pandoc.org/
Github release 下载安装:jgm/pandoc
Pandoc 为 Windows 系统提供了编译后的 msi 安装包,可以直接运行安装;或者直接下载免安装的 zip 文件解压。
首先进入安装目录,cmd输入pandoc --version/pandoc.exe --version验证安装:
(Windows 7)下载msi安装包安装使用,验证可能发生如下错误

C:\Users\Administrator\Downloads\Compressed\pandoc-3.0.1>pandoc.exe --version
pandoc: osReserveHeapMemory: VirtualAlloc MEM_RESERV at address 0000000000000000 bytes failed:

(Windows 7)下载zip安装使用,验证也可能发生上面的错误,一般再试一次就正常了(如下)

C:\Users\Administrator\Downloads\Compressed\pandoc-3.0.1>pandoc.exe --version
pandoc.exe 3.0.1
Features: +server +lua
Scripting engine: Lua 5.4
User data directory: C:\Users\Administrator\AppData\Roaming\pandoc
Copyright (C) 2006-2023 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.

以上命令返回了 Pandoc 的版本信息。
为了更好地运行进程,建议添加环境变量。计算机→属性→高级系统设置→环境变量,选中变量Path→编辑,添加到 pandoc.exe 所在目录,两个Path之间要加英文分号『;』。

三、Pandoc 使用

转换主体命令

pandoc -i test.xx -o test.yy

-i 为 input (输入), -o 为 output (输出)

markdown转换docx

直接转换

pandoc test.md -o test.docx

自定义样式转换

pandoc test.md -o test.docx --reference-docx=reference.docx

转换后的docx将与参考文档 “reference.docx” 文档样式相同。

docx转换markdown

pandoc test.docx --extract-media=. -o test.md

直接输入pandoc test.docx -o test.md会丢失word文档中的图片。输入pandoc test.docx --extract-media=. -o test.md则不会丢失图片。这里用到Pandoc一个 选项 extract-media=DIR,用于处理文件转换过程中的图片等媒体文件。
输出结果包括一个 Markdown 文件 test.md 以及一个文件夹 media,其中包括 Word 文件 test.docx 中的所有图片,--extract-media=.的作用是把图片保存在 media 中,而不是其子文件夹中。

--extract-media=DIR这个选项来将 Markdown 中的图床链接替换为本地图片链接
执行下面的命令:

pandoc --wrap=preserve -f markdown input.md --extract-media=media -t markdown -o output.md

这行命令中,由于开启了 --extract-media=DIR 选项,Pandoc 会新建一个文件夹 media,将图床中的远程图片下载到本地并保存在该文件夹中,然后再输出为一个新的 Markdown 文件 output.md,并自动把原本的图床链接替换为本地图片链接,而不再需要手动编写复杂的正则表达式来查找替换。

markdown转换pdf

Pandoc使用Latex生成pdf,所以需要安装Latex引擎
直接使用命令 pandoc test.md -o test.pdf 会报错,应当输入这样的命令(如下):

pandoc test.md -o test.pdf --pdf-engine=xelatex -V CJKmainfont="字体"

xelatex为排版引擎,字体应该填写相应英文标识,如:KaiTi(楷体)、SimSun(宋体)、FangSong(仿宋)、SimHei(黑体)等。

markdown转换HTML

pandoc xxx.md -f markdown -t html -s -o xxx.html

s选项表示创建一个"独立的"文件,有 header 和 footer ,而不仅仅是一个片段。
o xxx.html命令将输出放入xxx.html文件中。
注意,我们可以省略-f markdown和-t html,因为默认情况下是将markdown转换为HTML,但是包含它们也无妨。

markdown转换LaTeX

pandoc xxx.md -f markdown -t latex -s -o xxx.texpandoc xxx.md -s -o xxx.tex
Wandmalfarbe/pandoc-latex-template ,一个pandoc LaTeX模板,用于将markdown文件转换为PDF或LaTeX,使用前请仔细阅读说明文件。

LaTeX转换包含数学公式的网站

pandoc math.tex -s --mathml  -o mathMathML.html

-mathml 参数强制 Pandoc 将 LaTeX 中的数学公式转换成 MathML,从而可以由现代浏览器进行渲染。

四、参考

Pandoc入門:MarkdownからHTML・PDF・Writer/Word文書・スライドを生成する
Pandoc官方使用手册(本地安装目录下有)
Pandoc 从入门到精通,你也可以学会这一个文本转换利器
在命令行使用 Pandoc 进行文件转换
在命令行使用 Pandoc 进行文件转换​
Windows下Pandoc使用指南