9

从表面上看,一个简单的问题:我如何从我的 XML 文档中获得漂亮的 PDF?实际上,我的输入是 XHTML 的一个子集,添加了一些自定义属性(以保存有关引用来源等的一些信息)。我一直在探索一些路线,如果有人以前尝试过这些路线,我想得到一些反馈。

注意:我考虑过 XSL-FO 来生成 PDF,但听说开源工具的排版质量仍然落后于 TeX 很多。猜猜最先进的是Apache FOP。但我真的对好看的 PDF 很感兴趣(否则我可以使用浏览器的打印对话框)。对此有何想法和更新?

所以我一直在考虑使用 XSLT 将我自定义的 XML/XHTML 方言转换为 DocBook 并从那里开始(通过 XSLT 的 DocBook到正确的 HTML 似乎工作得很好,所以我也可以使用它)。但是我如何从 DocBook 转到 TeX?我遇到了许多解决方案。

  • dblatex一组输出 LaTeX 的 XSLT 样式表。
  • db2latex 最初是 dblatex 的克隆,但现在提供了与 LaTex 包的更紧密集成,并提供了一个输出 PDF 的脚本,这非常好。
  • PassiveTex代替 XSLT,它使用一个用 TeX 编写的 XML 解析器。
  • TeXML本质上是 LaTeX 语言的 XML 序列化,可用作中间格式,以及从 XML 格式转换为 LaTeX/ConTeXt 的随附 Python 工具。他们声称这避免了现有解决方案的特殊符号问题,丢失了一些大括号或空格,并且仅支持 latin-1 编码。(现在还是这样吗?)

由于我的输入 XML 可能包含很多以 Unicode 表示的特殊字符,所以最后一点对我来说尤其重要。我也一直在考虑使用 XeTeX 而不是 pdfTeX 来解决这个问题。(虽然我可能会失去一些印刷质量,但可能仍然比当前的开源 XSL-FO 处理器更好?)所以 db2latex 和 TeXML 似乎是最受欢迎的。那么有人可以评论它们的稳健性吗?

或者,我可能会更幸运地直接使用 ConTeXt,因为似乎对XML 中的 ConTeXt 社区很感兴趣。特别是,我可能会更深入地了解“My Way: Getting Web Content and pdf-Output from One Source”“Dealing with XML in ConTeXt MkIV”。两份文档都描述了一种结合使用 ConTeXt 和 LuaTeX 的方法。(DocBook In ConTeXt似乎做的差不多,但最新版本是 2003 年的。)第二个文档指出:

你可能想知道为什么我们在 TEX 中进行这些操作而不使用 xslt。集成方法的优势在于它简化了使用。不仅要处理文档,还要考虑在同一运行中使用 xml 来管理资源。xslt 方法同样冗长(毕竟,您仍然需要生成 TEX 代码)并且可能不太可读。在 MkIV 的情况下,集成方法也更快,让我们可以选择在运行时使用 Lua 操作内容。

你怎么看待这件事?请记住,我对 XSLT 和 TeX 都有一些经验,但从未深入了解其中任何一个。从未尝试过许多不同的 LaTeX 包或替代品,例如 ConTeXt(或 XeTeX/LuaTeX 而不是 pdfTeX),但我愿意学习一些新东西,最终得到我漂亮的 PDF;)

此外,我偶然发现了Pandoc,但找不到任何关于它与其他提到的方法相比的信息。最后,链接到一些关于如何将 TeXML 与 ConTeXt 一起使用的相当广泛的文档。

4

4 回答 4

2

我过去做过类似的事情(也就是说,维护 XML 文档的主版本,并希望从中生成 LaTeX 输出)。

我过去使用过 PassiveTeX,但我发现创建样式表是一项艰苦的工作——通常同时编写两种语言的结果。我让它工作,结果看起来非常好,但它可能比它值得付出更多的努力。也就是说,如果您需要添加的样式数量很少,那么这可能是一条不错的路线,因为它是一个步骤。

最成功的途径(阅读、灵活和有吸引力)是使用 XSLT 将文档转换为结构化的 LaTeX,它与结果文档的预期结构相匹配,但除了最小的格式设置之外,它并没有尝试做更多的事情。根据您的文档,这可能是看起来很正常的 LaTeX,或者它可能具有定制的结构。然后编写或改编一个 LaTeX 样式表或类文件,将输出格式化为有吸引力的东西。这样,您就可以充分利用 XSLT 的优势(而不是超越它们,这很快就会变得非常令人沮丧),充分利用 LaTeX优势,而不是让自己感到困惑。

也就是说,这或多或少与您的前两个替代方案的方法相匹配,无论您是使用它们,还是编写/自定义具有定制输出的 LaTeX 样式表,都取决于您对 LaTeX 样式表的感觉如何,以及如何您需要做的非常复杂或专门的格式化。

既然您说您需要处理输入中的 Unicode 字符,那么是的,XeLaTeX 将是管道中 LaTeX 部分的不错选择。

于 2012-04-09T11:31:26.833 回答
1

您可能想在 TeX.sx 上检查带有 XML 标记的问题,尤其是这个问题。我建议你使用 ConTeXt;当前版本在使用 Unicode 方面没有问题,并且可以完美地处理 OpenType——而且它在 Lua 中是可编程的。LaTeX 最常用的替代方法是XMLTeX,但这需要大量的 TeX foo。

如果您的文档可以由 pandoc 处理,请使用它:您将拥有多个输出选项,比任何基于 TeX 的系统都多。

于 2012-04-08T18:17:36.400 回答
1

最后,我决定使用Pandoc,它似乎是非常优美和可靠的代码库。一个潜在的缺点是您必须将自己限制在 Pandoc 的内部表示中可用的标记功能的数量,这些表示基本上一对一地映射到其扩展的 markdown

因为我不认为从类似 XHTML 的源代码生成 markdown 是一个好主意,所以我成功地启动了一个读取 DocBook 的 pandoc 组件,该组件目前位于 Pandoc 开发 repo 的 master 分支中。所以现在我有一个简单的 XSLT 样式表,可以从我的 XHTML 方言转换为 DocBook(也是 XML),然后我使用 Pandoc 导出到其他格式的提升,包括通过 ConTeXt 的 PDF。

于 2014-10-02T20:07:31.577 回答
0

如果您想要更多关于如何自定义 TeX 输出的选项,我建议您使用:

xml2tex

它基于声明式配置,您可以在其中指定从 XML 到 TeX 的映射。MathML 和 XML 表(HTML 和 CALS)会自动转换为 TeX。因此,它是开源的,并为 DocBook 和 DITA 提供了现成的配置。

于 2021-02-09T18:47:41.723 回答