战国无双-策略国战活动站

md文档导出的终极解决方案——找到更好的欢迎来对线

- 国战实录

md文档导出的方式类型

Pandoc:导出包括Word,PDF,RTF,Beamer,Bibliographiew等众多格式,无所不能

PhantomJS - Scriptable Headless Browser:导出PDF, PNG,JPEG格式

puppeteer/puppeteer: Headless Chrome Node.js API (github.com):获得chrome浏览器导出功能

calibre - Download calibre (calibre-ebook.com):导出ePub,PDF,HTML等多种格式

Prince - Convert HTML to PDF with CSS (princexml.com):增强版从HTML导出PDF,具有堪比latex的排版效果

md文档导出的大致思路

文档导出要解决三个问题:

语法:不转换为HTML,私有语法只能原文导出

排版和样式:toc,css,页眉页脚,页边距等均有模板控制

静态资源:大多数情况为图片,自定义比较麻烦,得写css

一般情况下,因为md文档是HTML的上层应用抽象,需要对文档语法进行转换,普遍的思路是先转为HTML这样的富文本格式,再根据需要导出成其它文档格式。这就需要用到css控制版面样式了。

而在obsidian中,css控制md渲染的一般样式,打印css还得自己写,一般的css才会在默认导出的样式中,没有打印的css,势必造成导出的样式和我们看到的样式不同。所以对于obsidian还需要写打印css。同理,我们用pandoc导出pdf的页面和在obsidian中也看到的不一样,pandoc采用的是一套默认的模板进行导出的。那么我们就需要修改pandoc的默认模板,让其按照我们想要的样式和格式导出。 obsidian-pandoc就提供这样的修改方式。

md文档导出的最佳实践

pandoc导出pdf一般人能做到的最大程度就是定制pandoc的导出模板,前置条件还要安装latex和相应的包,许多人折腾起来或许连环境都搭不起来。

calibre有优化过的电子书导出模式。

我的实践是,优先级从前到后:

obsidian默认导出最方便,自定义导出得用css自定义,尚未发现完整的教程,得自己查。优点是obsidian的语法一样能调,缺点是toc这些目前没找到方法,但能通过外部程序加。如下是修改页眉页脚的示例代码片段:

@media print {

@page:right{

@bottom-left {

margin: 10pt 0 30pt 0;

border-top: .25pt solid #666;

content: "Our Cats";

font-size: 9pt;

color: #333;

}

@bottom-right {

margin: 10pt 0 30pt 0;

border-top: .25pt solid #666;

content: counter(page);

font-size: 9pt;

}

@top-right {

content: string(doctitle);

margin: 30pt 0 10pt 0;

font-size: 9pt;

color: #333;

}

}

}

浏览器,无头浏览器PhantomJS,puppeteer自定义起来和obsidian的操作差不多,都是修改css,默认导出也方便。

Prince这样对HTML导出有优化的方式,有着一些不错的模板,强大,漂亮,相当于上述两者的整合工具。

pandoc方式:放在后面是因为pandoc自定义起来实在太麻烦,强大,但得付出太多代价,一般人还真耗不起。

calibre:我试了,pdf转电子书好几次失败了,有转换程序,但就是没结果。反正我也不打算用它,不管了。

大将王翦是个什么样的人,王翦最后是怎么死的?
追光丨AI预测世界杯,会比人类更准吗?