不见春山
骑马倚斜桥,满楼红袖招。
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
进行授权。
分享
最近更新
群晖升级 ARPL 笔记
本地部署大语言模型
LVM 管理
HK1 RBOX X4 电视盒子折腾笔记
使用usbip网络转发usb设备到远程主机
热门标签
机器学习
Linux
Router
ROS
Tensorflow
VPN
虚拟组网
ARM
Latex
zerotier
文章目录
I2C 内部集成电路总线接口
不拆机直接修改黑群晖的SN和MAC