将XML转换为TeX或如何从类似XHTML的源代码中获得漂亮的PDF

9

表面上看,这是一个简单的问题:如何从我的XML文档中获得外观漂亮的PDF?实际上,我的输入是带有一些自定义属性的XHTML子集(用于保存一些关于引用来源的信息等)。我一直在探索一些途径,如果有人之前尝试过其中的一些方法,我想听听他们的反馈。

注意:我考虑过使用XSL-FO生成PDF,但听说开源工具的排版质量仍远远落后于TeX。我猜最先进的工具可能是Apache FOP。但我真的很想要一个外观漂亮的PDF(否则我可以使用浏览器的打印对话框)。有什么想法或更新吗?

所以我一直在考虑使用XSLT将我的定制XML / XHTML方言转换为DocBook,然后从那里开始(通过XSLT使用DocBook将其转换为适当的HTML似乎也很好用,所以我可能也会用它来做)。但是我该如何从DocBook转换为TeX?我找到了许多解决方案。

  • dblatex 一组XSLT样式表,用于输出LaTeX。
  • 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可能会更加幸运,因为ConTeXt社区对XML非常感兴趣。特别是,我可能会深入研究“我的方式:从一个源获取Web内容和pdf输出”和“在ConTeXt MkIV中处理XML”的两个文档。这两个文档描述了一种结合LuaTeX使用ConTeXt的方法。(似乎DocBook In ConTeXt也是如此,但最新版本是2003年的。)第二个文档指出:

你可能会想为什么我们在TEX中进行这些操作而不使用xslt。集成方法的优点是简化了使用。不仅可以处理文档,还可以在同一运行中使用xml管理资源。xslt方法同样冗长(毕竟,您仍然需要生成TEX代码),并且可能更难以阅读。在MkIV的情况下,集成方法也更快,并且提供了使用Lua在运行时操纵内容的选项。
你对此有何看法?请记住,我对XSLT和TeX都有一些经验,但从未深入研究过它们。从未尝试过许多不同的LaTeX包或替代方案,例如ConTeXt(或者使用XeTeX/LuaTeX而不是pdfTeX),但我愿意学习一些新东西,以获得最终的漂亮PDF文件;)
此外,我偶然发现了 Pandoc ,但找不到有关其与其他提到的方法的比较信息。最后,这里是一些非常详尽的文档链接,介绍如何使用 TeXML 和 ConTeXt

这个问题似乎更适合于http://tex.stackexchange.com/。 - Dave Jarvis
@DaveJarvis 我明确在寻找 TeX 的替代方案。 - mb21
啊,那不是很棒吗?最好是一个 Web 服务。上传一个打包的 DocBook,然后得到一份漂亮、校对过的出版准备好的单一文档。;) - Lorenz Lo Sauer
4个回答

2
我以前做过类似的事情(即在XML中维护文档的主版本,并希望从中产生LaTeX输出)。
我以前使用过PassiveTeX,但我发现创建样式表很费力 - 写两种语言通常会导致这种结果。我让它工作了,结果看起来非常好,但它可能不值得花费的代价更大。也就是说,如果您需要添加的样式量很少,那么这可能是一个好的选择,因为这是一个单一的步骤。
最成功的方法(即灵活和吸引人的方法)是使用XSLT将文档转换为结构化的LaTeX,该结构与所需结果文档的结构相匹配,但不尝试做更多的格式化。根据您的文档,它可能是正常的LaTeX,也可能具有定制结构。然后编写或调整一个LaTeX样式表或类文件,将该输出格式化为漂亮的东西。这样,您正在利用XSLT的优势(而不超出它们,这很快变得非常令人沮丧),利用LaTeX的优势,并且不会使自己混淆。
也就是说,这基本上与您的前两种替代方案相匹配,无论您选择哪种,还是编写/自定义带有定制输出的LaTeX样式表,都取决于您对LaTeX样式表的熟悉程度以及需要做多么复杂或专业的格式化。
由于您说您需要处理输入中的Unicode字符,因此XeLaTeX将是管道中LaTeX部分的好选择。

1
最终,我决定选择Pandoc,它似乎是非常完善和稳定的代码库。一个潜在的缺点是你必须限制自己使用Pandoc内部表示中可用的标记特性数量,这基本上是一对一映射到其扩展Markdown
由于我认为从我的类似XHTML的源代码生成Markdown不是一个好主意,我成功地启动了一个pandoc 组件,读取DocBook,它目前在Pandoc开发存储库的主分支中。因此,现在我有一个简单的XSLT样式表,将我的XHTML方言转换为DocBook(也是XML),然后我使用Pandoc导出到其他许多格式,包括通过ConTeXt的PDF。

1

你可能想要查看在 TeX.sx 上标记为 XML 的问题,特别是这个。我建议你使用 ConTeXt;当前版本没有 Unicode 问题,并且可以完美处理 OpenType - 而且它可以用 Lua 编程。与 LaTeX 最常用的替代方案是XMLTeX,但需要很多 TeX 技巧。

如果你的文档可以通过 pandoc 处理,那就使用它吧:你将拥有多种输出选项,比任何基于 TeX 的系统都要多。


谢谢您的反馈!我仔细研究了pandoc,它看起来非常有前途;输出格式的数量将是一个巨大的优势。但是对于脚注等内容,我可能需要编写一些XSLT(或其他东西)来将我的XHTML方言转换为pandoc的扩展Markdown,这似乎是一个巨大的痛苦(例如表格)。 - mb21
所以也许我应该直接使用ConTeXt来解析。并且为其他我想要获得的输出格式获取一些XSLT样式表。真不敢相信没有一个标准格式和许多健壮的样式表可以使用.. :-/ 我曾经认为DocBook应该是那样的,但也许不是这样的。 - mb21

0
如果您想要更多自定义TeX输出的选项,我建议使用这个: xml2tex 它基于声明式配置,您可以指定从XML到TeX的映射。MathML和XML表格(HTML和CALS)会自动转换为TeX。因此,它是开源的,并提供了DocBook和DITA的即用配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接