5

我正在 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 那样易于阅读,但我应该认为它仍然可以以几乎相同的方式进行合并。

4

1 回答 1

2

尝试策略 2

使用这篇文章,我试图将 Markdown 转换为 ODT;但是,它仍然不完美。

使用这种方法,我可以包含一个包含预定义样式的“参考文档”。因此,孤儿控制和 keep-with-next 现在触手可及——我只是在参考文档中重新定义样式,并将其正确添加到输出中。

  • 但是,无序列表仅具有“文本正文”段落样式,因此无法将它们作为块与段落文本区分开来。在将 HTML 转换为 PDF 时,我当然可以为<ul>.
  • 我还有两种(单独的)内联预格式化样式(一种用于代码,一种用于文件名),但它们都是使用字符样式“Teletype”呈现的。这意味着它们在最终文档中无法区分。
  • 我以前在 HTML 中的手册分页符不再起作用。它们没有附加样式,所以我认为我确实需要手动插入这些样式。

因此,这种方法向前迈了一步,后退了几步!

尝试策略 3

我已切换到 DOMPDF,并且我的大部分分页符控件似乎都在工作!:=)

  • 不要在标题元素之后中断
  • 手动分页符很好
  • 不要在无序列表项内打断
  • 不要在无序列表之前中断

我发现了几个小错误,但它们有 CSS 解决方法。我将继续处理该文档,但我怀疑我最终会采用此解决方案。

于 2013-08-03T21:37:23.453 回答