我正在 Github 上编写一系列 Markdown 文档,以使编辑过程可分叉和可合并。我打算首先呈现为 PDF 格式。我只需要这些印刷功能:
- 标题级别 1 和 2
- 段落
- 项目符号列表和项目符号项
- 页脚页码
- 内联预格式化样式(主要用于内联代码)
- 块代码
我pandoc
用作我的 Markdown 解析器,最初直接尝试 LaTeX/PDF 输出。但是我问了一个问题并放弃了 - LaTeX 使用起来很慢且笨拙(imo),并且似乎不鼓励对其他格式(尤其是 HTML)有用的内联预格式化样式的类属性。
所以,我现在使用 Pandoc 转换为 HTML,然后wkhtmltopdf
从 HTML 转换为 PDF。这让我得到了我正在寻找的 90% 的印刷功能,而且工作量很小,所以我认为这是一个很好的方法。但是,在段落之前的标题和无序列表之前的段落中,我希望有 keep-with-next 或孤立控件,但这似乎不受支持。我已经尝试了这些 CSS 功能:
li {
/* Try to avoid breaking inside a bullet, doesn't work for me */
break-inside: avoid-page;
}
ul {
/* Try to avoid breaking before a bullet list, doesn't work for me */
page-break-after: avoid;
}
p {
/* Not supported by Webkit: https://developer.mozilla.org/en-US/docs/Web/CSS/orphans */
orphans: 2;
}
正如您从我的代码中看到的那样,orphans
听起来很理想,但它对 PDF 输出没有影响,而且 Mozilla 参考资料说 Webkit(由 Wkhtmltopdf 在内部使用)不支持它。
我能做些什么来实现这一目标?我觉得我很接近,但令人沮丧的是,这是一个似乎没有任何明显解决方案的小问题。虽然我在学习 Pandoc 和 Wkhtmltopdf 方面付出了一些努力,但如果可以证明它们做得更好,我愿意放弃其中一个或两个,转而支持其他 F/OSS 工具。
策略二
我不想消失在太多毫无意义的兔子洞里,但我看到 Pandoc 可以渲染到 ODT。我的主文档保存在 ODT 中(使用 OpenOffice),它的格式非常完美,包括我想要的所有 keep-with-next。也许我可以有一个 ODT 文档来指定样式,然后将其与 Markdown 文档一起转换。这值得尝试吗?
策略三
Pandoc 的 HTML 输出正确区分了所有标记,所以我想知道添加新的 HTML 到 PDF 转换器是否可以解决问题。Dompdf听起来不错,所以我也会尝试一下。
策略 4
我也会在某个时候尝试使用原始 LaTeX,使用像Lyx这样的编辑器- 我无法想象 LaTeX 没有 keep-with-next,并且它周围的 GUI 会柔化锐利的边缘!这并不理想,因为 LaTeX 不像 Markdown 那样易于阅读,但我应该认为它仍然可以以几乎相同的方式进行合并。