pandoc 标记语言转换工具
Pandoc 是使用 Haskell 语言编写的一款跨平台、自由开源及命令行界面的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。本篇以 Ubuntu 18.04 为例进行演示。
安装
安装 pandoc 可以通过如下方法
1 | sudo apt update |
示例
使用 pandoc 可以进行很多种文本格式的转换,如 docx, markdown, textile, pdf 等等。下表更详细的列出:
Pandoc 可读取的源格式 | Pandoc 可生成的目标格式 |
---|---|
Markdown | HTML格式:包括XHTML,HTML5及HTML slide |
reStructuredText | 文字处理软件格式:包括docx、odt、OpenDocument XML |
Textile | 电子书格式:包括EPUB(第2版及第3版)、FictionBook2 |
HTML | 技术文档格式:包括DocBook、GNU TexInfo、Groff manpages、Haddock |
DocBook | 页面布局格式:InDesign ICML |
LaTeX | 大纲处理标记语言格式:OPML |
MediaWiki | TeX格式:包括LaTeX、ConTeXt、LaTeX Beamer |
OPML | PDF格式:需要LaTeX支持 |
Org-Mode | 轻量级标记语言格式:包括Markdown、reStructuredText、textile、Org-Mode、MediaWiki标记语言、AsciiDoc |
Haddock | 自定义格式:可使用lua自定义转换规则 |
pandoc 的使用方法如下:
1 | pandoc -f/-r 输入格式 -t/-w 输出格式 -o 输出文件 输入文件 |
- -f 表示 输入格式:–from 格式,可用 -r 或 –read 格式 代替;
- -t 表示 输出格式:-to 格式,可用 -w 或 –write 格式 代替;
- -o 表示 输出文件:–output 文件;
- -s 表示 输出单个文件: –standalone;
更多参考,可通过如下命令查看
1 | man pandoc |
下面演示几个转格式的例子
- docx 转 textile
1 | pandoc -f docx -t textile -o redmine-heading.textile redmine-test.docx |
- txt 转 pdf
1 | # 需要安装 pdflatex,方法如下 |
- markdown 转 ipynb
1 | pandoc numpy-test.md -o numpy-test.ipynb |
- txt 转 html
1 | pandoc -o output.html input.txt |
- markdown 转 txt
1 | pandoc -f markdown -t latex hello.txt |
- html 转 markdown
1 | pandoc -f html -t markdown hello.html |
更多例子参考:
如果不想通过命令手动转,可采用在线格式转换:
https://alldocs.app/convert-word-docx-to-textile
中文显示
PDF 中文显示需要安装 xelatex
1 | sudo apt update |
在 Ubuntu 中需要一些中文字体,可以把 Windows 上的字体拷贝进去,如把 Windows10 的字体拷贝进去
1 | # 在 Ubuntu 系统上 |
然后安装字体
1 | mkfontscale |
查看字体
1 | fc-list :lang-zh |
此时,就可以在PDF中正常显示字体了。
中文换行
默认 pandoc 使用的 LaTeX 模板不支持中文换行,可以通过如下方法解决:
- 导出 LaTeX 模板
1
pandoc -D latex > template.latex
- 把命令:\XeTeXlinebreaklocale “zh” 添加到模板中,类似:
1
2
3
4$if(mathfont)$
\setmathfont(Digits,Latin,Greek){$mathfont$}
$endif$
\XeTeXlinebreaklocale "zh" - 指定新模板:
1
2# 把 Markdown 转出 PDF
pandoc readme.md -o readme.pdf --pdf-engine=xelatex -V mainfont="Microsoft YaHei" --template=/disk0/ground/template.latex -M geometry:"top=1in,inner=1in,outer=1in,bottom=1in,headheight=3ex,headsep=2ex"
python 中调用
在 Python 中使用 pandoc,可以安装包 pypandoc 来调用系统安装的 pandoc 软件
1 | pip install pypandoc |
使用方法
1 | # 指定 pandoc 软件位置 |
更多使用方法,如添加格式化参数请参考 pypandoc 官网。
参考文献
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J. Xu!
评论