XML 到 TeX 或如何从类似 XHTML 的源中获取漂亮的 PDF

标签 xml xsl-fo tex docbook

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

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

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

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

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

或者,我可能更幸运地直接使用 ConTeXt,因为似乎有相当多的 interest in the ConTeXt community in XML .特别是,我可能会更深入地了解 "My Way: Getting Web Content and pdf-Output from One Source""Dealing with XML in ConTeXt MkIV" .这两份文件都描述了一种结合使用 ConTeXt 和 LuaTeX 的方法。 (DocBook In ConTeXt 似乎做的差不多,但最新版本是 2003 年的。)第二个文档注释:

You may wonder why we do these manipulations in TEX and not use xslt instead. The advantage of an integrated approach is that it simplifies usage. Think of not only processing the a document, but also using xml for managing resources in the same run. An xslt approach is just as verbose (after all, you still need to produce TEX code) and probably less readable. In the case of MkIV the integrated approach is is also faster and gives us the option to manipulate content at runtime using Lua.

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

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

最佳答案

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

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

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

也就是说,这或多或少与您的前两个备选方案的方法相匹配,无论您是使用它们,还是编写/自定义具有定制输出的 LaTeX 样式表,都取决于您对 LaTeX 样式表的舒适程度,以及您需要执行多少复杂或专门的格式设置。

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

关于XML 到 TeX 或如何从类似 XHTML 的源中获取漂亮的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062646/

相关文章:

java - 要修改的命令行输入和 XML

xslt - 图像上的文档最大宽度? (xml :fo)

python - 如何设置 Matplotlib 以无衬线字体呈现希腊字母

xml - XSLT FO 列表元素

css - Laravel-在创建表单中检索旧值文本框

r - 将 Knitr 生成的 Tex 文件转换为 .doc

java - 无法初始化类 org.apache.xerces.jaxp.datatype.xmlgregoriancalendar

android - 是否可以将单个项目置于 ListView 的中心?

android - 布局在图形布局和实际设备上出现不同

xml - 无法在 XSL-FO 中设置初始页码