强大的文档互转工具-Pandoc初探

发布于 2019-09-09  204 次阅读


在玩Hasekll的时候在GitHub上面搜索了一下有什么好的Haskell项目,发现了这个强大的工具。Pandoc是一个可以在不同文档格式之间进行转换的工具,支持的格式相当的多,能力非常强,该项目的官网地址在这里

pandoc是一个可以进行文档互转的工具,支持的格式极其多,包括latex,HTML,word,markdown等。详细的格式支持列表可以从项目文档上看到。

支持的格式(摘自官网)

pandoc的基本命令格式如下:

pandoc infutfile.ext1 -o outputfile.ext2

pandoc可以根据文件扩展名自动识别格式,如果需要手动指定格式,可以这样

pandoc inputfile -f FORMAT -t FORMAT -o outputfile

尝试一下使用pandoc,我准备了前几天的作业文档main.tex,格式是latex,将它转换成word的docx格式。转换前后的效果对比如下:

原始的latex文档
转换后的word文档

也许这看起来很美好,但是实际上pandoc对于latex的支持并不好,主要原因在于latex自己太过杂乱,当你使用了各种各样的包和各种各样的环境之后转换很有可能是不成功的。并且,latex和word这种文档的图片定位与缩放都会有点小问题。

但是,如果是markdown或者HTML这类的标记语言,那效果会好很多。事实上在Google搜索pandoc,靠前的结果主要是markdown转pdf的。下面用微软的著名开源项目Windows Terminal作例子。

该项目的README.md文件看起来像这个样子

terminal项目的README.md

执行(如果要生成PDF文件,需要安装latex)

pandoc README.md -o README.pdf --pdf-engine=xelatex

指明xelatex的最后一个选项是因为pdflatex太残废了)由于该markdown文件的图片是通过链接加载的,所以转化可能稍微慢了点。由于latex本身并不支持svg图片,pandoc会调用一个转换工具来转换格式。你可能需要先安装rsvg-convert,这个软件在一般的软件仓库中都能找到(例如Ubuntu的APT仓库中的librsvg2-bin)。转换后的效果如下:

转换后的pdf

其中单击图片的链接也能正常工作。

在转换结束后你可能会看到一些Unicode字符无法显示的问题,这是由于默认字体的问题,你可以指定一个支持的字体,详情参见https://pandoc.org/faqs.html

对于HTML的转换也是类似的,但是由于现在的网页中嵌入了大量的脚本和媒体文件,这个转换不一定有效(例如pandoc所需要的用于创建pdf的latex不支持常见的webp格式的图片)。其实对于latex转换也如此,较朴素的文件都能转换成功,奇技淫巧玩多了就不行(对此我们可以期待一下pandoc的后续更新)。然而把markdown这种东西转换成html还是没问题的。

转换的HTML文件

当然除此之外好玩的东西也很多。比如我们常常使用latex来做slides,我们也可以利用pandoc来把它转换成网页。

pandoc -s --mathjax -i -t slidy slide.tex -o test.html

多的东西我也没有探索了,就这样吧,感谢观看。


终有一日, 仰望星空