不见春山
骑马倚斜桥,满楼红袖招。
Home
Categories
Archives
Tags
About
Home
浅谈 Pandoc 将 Markdown 转成 PDF
浅谈 Pandoc 将 Markdown 转成 PDF
取消
浅谈 Pandoc 将 Markdown 转成 PDF
由
ctaoist
发布于 2019-11-14
·
最后更新:2021-12-13
1
使用 Pandoc 将 `Markdown` 转化成 PDF 常见的流程是利用 `xelatex` 直接生成 PDF。这要求安装 Latex 的大部分功能以及各种宏包,也不能像 Latex 那样自由的控制格式,生成的速度也很慢。更关键的是容易出现各种莫名奇妙的问题。 于是就想了个另外生成 PDF 的办法,即利用 Pandoc 先将 `Markdown` 转成 `Html`,再利用浏览器的打印功能打印出 PDF,虽然多了一个步骤,但会少很多问题,不用那么折腾,正所谓遥程路反近,捷径常误人。 ## 利用 xelatex 直接生成 PDF 如果使用 Pandoc 直接生成 PDF,则需要安装 `latex`,如果文档中含有中文,则需要 `latex` 套件中的 `xelatex` 外加改模板,如果需要代码块高亮,需要改模板,如果代码块需要添加行号,需要改模板,如果需要行内代码也有背景色,还是需要改模板,想给引用部分也加上背景色,还是需要改模板。 >行内加背景色的这个功能,按照网上的操作改了模板也没有效果,这就是前面说的莫名其妙的问题,但在别人那里应该是有效的。 在 Pandoc 自带模板 `eisvogel` 的基础上改了一版,添加了上述的各种功能(如代码块高亮、行号等),这是[下载地址](https://gist.githubusercontent.com/ctaoist/13e29e2e9cafdb59874b3e60b93f0f1d/raw/2c7d34389bdcaa0c8e26592bf096ebaf2b0aac62/eisvogel.latex),开箱即用。 将模板文件放到和 `Markdonw 文件`同一文件夹下或者 `~/.pandoc/templates` 下,将模板中的字体改成你希望使用的字体: ```tex % 在 434 行附近 \setCJKmainfont{SimSun} % 设置中文字型 \setmainfont{Times New Roman} % 设置英文字型 ``` 然后执行以下命令,就可生成 PDF: ```sh pandoc --latex-engine=xelatex --template=eisvogel --listings input.md -o output.pdf ``` ## 先转成 Html 使用以下命令将 Markdown 文档转成 Html 文件: ```sh pandoc -s input.md -o output.html ``` 然后编辑 `html` 文档的 `<head>` 标签,添加需要的 `js` 和 `css`,就可以随意地控制格式,这里分享两个可用的 [js](https://gist.githubusercontent.com/ctaoist/13e29e2e9cafdb59874b3e60b93f0f1d/raw/2c7d34389bdcaa0c8e26592bf096ebaf2b0aac62/pandoc_main.js) 和 [css](https://gist.githubusercontent.com/ctaoist/13e29e2e9cafdb59874b3e60b93f0f1d/raw/2c7d34389bdcaa0c8e26592bf096ebaf2b0aac62/pandoc_main.css)。 将上述的 `js` 和 `css` 保存到和输出的 `html 文件`同一文件夹下,然后编辑 html 文件的 `<head>` 部分,添加如下行: ```html <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script> <script src="https://cdn.bootcss.com/prettify/r298/prettify.js"></script> <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <script src="pandoc_main.js"></script> <link href="https://cdn.bootcss.com/prettify/r298/prettify.css" rel="stylesheet"> <link href="pandoc_main.css" rel="stylesheet"> ``` 然后用浏览器打开,即可打印成 PDF。(比如 Chrome 的快捷键是 `Ctrl+p`,可以控制隐藏页眉页脚。) ## 总结 Pandoc 虽然可以直接生成 PDF,但是比较折腾,可能会出现各种莫名其妙的问题。更为致命的是使用的模板是 `tex 语法`,比 `Latex` 更底层,虽然我也经常使用 `Latex` 写东西,但是要通过 `tex 模板`完成深度定制,基本做不到,学习成本太高了,是很专业的东西,而且用的也不多,没有必要花费时间去学这个。 而通过先转成 HTML 中转一下的话,就可以随意控制格式,而且 `css 语法` 看 10 来分钟就能上手,各种库也很全(比如 BootStrap,JQuery)。虽然通过浏览器打印成 PDF 时不能自由控制页眉和页脚,但瑕不掩瑜,仍不失为一个好的办法。 ## 参考资料 - [利用Pandoc将markdown文件转化为pdf](https://www.jianshu.com/p/15e5b9faad01) - [使用 Pandoc 与 Markdown 生成 PDF 文件](https://jdhao.github.io/2017/12/10/pandoc-markdown-with-chinese/) - [CSS @media print issues with background-color](https://stackoverflow.com/Questions/3893986/css-media-print-issues-with-background-color) - [Background color not showing in print preview](https://stackoverflow.com/questions/14987496/background-color-not-showing-in-print-preview)
杂集
pandoc
该博客文章由作者通过
CC BY 4.0
进行授权。
分享
最近更新
ROS修改 MTU 和 MSS 解决上网慢和页面显示不全问题
WireGuard 搭建组网教程
EPUB 格式详解
Quartus ii 调用 Modelsim
vscode + verilog 环境配置
热门标签
Tensorflow
VPN
Linux
Router
虚拟组网
ROS
zerotier
C++
WIn10
Math
文章目录
I2C 内部集成电路总线接口
不拆机直接修改黑群晖的SN和MAC