【发布时间】:2013-08-04 21:15:40
【问题描述】:
我正在 Github 上编写一系列 Markdown 文档,以使编辑过程可分叉和可合并。我打算首先呈现为 PDF 格式。我只需要这些排版功能:
- 标题级别 1 和 2
- 段落
- 项目符号列表和项目符号项
- 页脚页码
- 内联预格式化样式(主要用于内联代码)
- 块代码
我使用pandoc 作为我的 Markdown 解析器,最初直接尝试 LaTeX/PDF 输出。然而I asked a question on that 并已经放弃了 - 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 工具。
策略 2
我不想消失在太多毫无意义的兔子洞里,但我看到 Pandoc 可以渲染到 ODT。我的主文档保存在 ODT 中(使用 OpenOffice),其格式完美,包括我想要的所有 keep-with-next。也许我可以有一个 ODT 文档来指定样式,然后将其与 Markdown 文档一起转换。这值得一试吗?
策略 3
Pandoc 的 HTML 输出正确区分了所有标记,所以我想知道添加一个新的 HTML 到 PDF 转换器是否可以解决问题。 Dompdf 听起来不错,所以我也试试看。
策略 4
我也会在某个时候尝试原始 LaTeX,使用像 Lyx 这样的编辑器 - 我无法想象 LaTeX 没有 keep-with-next,而且它周围的 GUI 会柔化锐利的边缘!这并不理想,因为 LaTeX 不像 Markdown 那样易于阅读,但我应该认为它仍然可以以几乎相同的方式进行合并。
【问题讨论】:
-
谢谢@Hannes。是的,我切换到 DOMPDF,并且避免在
<li>中出现中断现在正在工作,以及许多其他中断控制功能。我发现了一些新的错误(并非总是如此!)但它们可以解决。
标签: pdf-generation markdown wkhtmltopdf pandoc