vscode markdown preview enhance 插件 pdf 导出
vscode markdown 导出为 pdf 方法探究
前言
Markdown Preview Enhanced(下文简称为 MPE) 是 vscode 中的神级插件。对 markdown 文件提供了许多方面的支持,功能十分强大,上天入地无所不能。本文介绍的 markdown 转化为 pdf 文件主要就是基于该插件。
虽然说插件的作者写了详细的使用文档,但是由于该插件的高级功能需要用户本身有着较好的计算机基础,因此对于小白(对我就是那个小白????)而言,仍然不是件容易的事。
我研究了一下午如何使用 MPE 导出 pdf 文档,虽然说目前仍然无法导出十全十美的文档,但总算有了一些突破,特此分享一下。如果有朋友,vscode 导出 pdf 有更好的主意,也请不吝赐教。
这边还需要提一下,之前 MPE 还支持 phantomjs 打印不过现在不支持了。
点击此处,下载本文演示用于 pdf 导出的 md 文档。
Open in Browser 导出
最通用的方式,就是右键预览页面,然后选择 Open in Browser,然后打印浏览器页面。这个方式的打印效果,随着打印所用的浏览器以及所使用的虚拟打印机的不同,而有轻微的差异。
仅展示在 chrome 打开,用 adobe acrobat 打印的文件。总体感觉上看,chrome 对 pdf 打印的支持稍微好于 firefox。
具体效果,有兴趣的朋友可以自己尝试一下。但总的来说这种方式有一大缺点,那就是 打印出来的 pdf 是图片类型的,文章中的连接之类全部失效。
Chrome(Puppeteer)导出
接下来讲一个稍复杂的,用 Chrome(Puppeteer)导出。首先,你电脑上得安装有 Chrome 浏览器。然后,右键预览页面,选择 Chrome(Puppeteer) 选项下面的 PDF,即可。
这种方式导出的 pdf 文档,是符合我们喜好的文字型的 pdf 文档。
但是默认样式下有个问题就是 文字太淡。事实上说明文档中介绍,这种方式应该是能通过 front matter 来进行调整的。所谓的 Front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量,具体可以参考 hexo 的说明。
然而遗憾的是,帮助文档中对 Puppeteer 的 front matter 介绍太少,我一一试下感觉效果不好。编写的 front matter 如下(不知道其他可以的参数名是什么):
puppeteer:
pdf:
format: A4
displayHeaderFooter: true
margin:
top: 0.05cm
right: 0.05cm
bottom: 0.05cm
left: 0.05cm
image:
quality: 90
fullPage: true
不过从图像上看,这个 front matter 好像一点效果都没有 ????。
pandoc 导出
和前一节中的 Puppeteer 不同的是使用 pandoc 必须要编写 front matter。帮助文档中对于 pandoc front matter 介绍 的稍微详细一些。在我不断尝试下,终于能够打印出还算过得去的 pdf 文档。这里安装 pandoc 之类的操作就请参考帮助文档。我们直接进入正题,我编写的 front matter 如下:
title: 测试
author: aaa@qq.com
date: 2019年6月8日
# 指定汉字字体,如果缺少中文显示将不正常
CJKmainfont: 方正苏新诗柳楷简体-yolan
# latex 选项
fontsize: 12pt
linkcolor: blue
urlcolor: green
citecolor: cyan
filecolor: magenta
toccolor: red
geometry: margin=0.3in
papersize: A4
documentclass: article
# pandoc设置
output:
pdf_document:
path: /Exports/Habits.pdf
toc: true
toc_depth: 2
number_sections: true
highlight: tango
# 打印背景色
# 保存文件时自动生成
# export_on_save:
# pandoc: true
效果如下:
效果还算不错。用了 tango 代码高亮主题,这个主题好就好在,代码部分有深一点的背景色,易于区分。
prince 导出
首先需要安装 prince,如果安装 prince 后,右键预览选择 PDF(prince) 提示 princexml 没有安装,是 prince 没有被添加到系统变量中,请按如下操作。
默认,情况下 prince 导出效果如下:
可以看到,对中文和 latex 的支持不好。
其实帮助文档已经提到,prince 对 ketex 和 mathjax 的支持不好。并且这个导出的文档无法支持目录跳转,于是我就不再进一步研究了。
eBook 导出
最后就是 eBook 导出了。终于快写玩了 ????。eBook 到处需要用到 Calibre,按帮助文档说明安装,将 ebook-convert
加入到系统变量。
在导出 pdf 前同样需要编写 front matter ,否则导出的 pdf 为空。不过就算是编写了 front matter ebook 目前导出 pdf 还是存在问题。
这一点其实帮助文档中也有提到。不过导出 equb 文件效果还是不错的。这是我编写的导出 equb 的 front matter:
ebook:
title: mytest
author: aaa@qq.comcom
margin: 10
cover: https://csdn-blog-1258434200.cos.ap-shanghai.myqcloud.com/undefinedhwc_ttoto.jpg
epub:
no-default-epub-cover: true
pretty-print: true
效果如下:
latex 支持倒可以,不过有部分图像不能正确显示,用 calibre 将这个 equb 转换成 pdf 后效果更差:
所以,这种方式目前也只是看看而已了。
特别提示
front matter 的编写
编写 front matter 时,不熟悉的人(如我)很容易犯错,所以可以将设置中 Front Matter Rendering Option 设置为 table,这样 front matter 将在预览中以 table 形式存在,比较直观(默认是none):
更改之后显示的表格:
如果明显写错,那么就看不到表格。另外注意这边空格和tab也得严格区分开,否则虽然能看到表格,但是设置实际上是无效的。
pandoc parse
MPE 的设置中有个选项,Use Pandoc Parse。这个设置慎用,如果勾选了这个,那么 MPE 将用 pandoc 解析md,目前看来会导致一些问题。比如无法跳转目录(在预览中)、语法拓展高亮失效等。
其他插件
既然已经试了 MPE 的这么多种转换方法,不妨试一下其他插件,看有没有好用又方便的。
markdown pdf
这个插件配置还算简单,只要设置 chrome.exe 的路径即可。但是效果不好,如图:
。
latex 不支持的话,可以下地狱了 ???? 当然也可能是我没认真研究,评分这么高的插件应该不至于如此。
Markdown Converter
这个插件也是基于 chromium 不过,作者考虑到了 墙 自己提供了 chromium 供用户下载。安装后在默认设置的情况下,转换后只有我的名字 ????
然后我查看设置,似乎也没有什么设置能改变这一切 ????
然后就没有然后了
然后我搜了一下,似乎没有什么其他能用的插件了,于是今天先到此为止 ????。
总结
如果仅用 markdown preview enchanced 插件,那么 pandoc 导出无疑是最好的方式。然后要写出得到更完美的 pdf 文档,就需要好好研究一下 pandoc 的用法了。
写文不易,如果觉得有所帮助可以小小的捐赠一下 ????。
你可以下载查看一下本文用 pandoc 和 Puppeteer 转换成 pdf 的效果。
链接:https://pan.baidu.com/s/1B0ANQADSgbxU1vnzp2p2Eg
提取码:m1em