我想要做的是尝试使用 TeX 渲染器,并将其编写在一个包含字体支持的良好图形库中,所以我最终选择了 Cairo。
在 Cairo/Pango 上编写排版库/程序是否有意义?请注意,我对全面的 LaTeX 兼容性不感兴趣,只对基本的数学和文本感兴趣(是的,我知道从长远来看,这对于漂亮的文档来说并不适用……)。
答案1
我写了 cloutiy 提到的项目,但实际上我目前正在离开 Pango/Cairo,所以我认为值得解释一下原因。
Pango 和 Cairo 在基本排版方面表现非常好;我使用 SILE 和 Pango/Cairo 后端制作了几本书,它们看起来不错。但是,它们存在许多问题,从长远来看并不适合。
最明显的是 Cairo 的 PDF 界面非常基础。您可以在页面上绘制图片和文本,这是排版所需的大部分功能,但人们希望能够添加 PDF 轮廓链接等,这意味着 Cairo 不是一个通用的解决方案。
另一个问题是 Pango 在 Linux 上使用的整形器。
TeX 类排版的一个基本部分是将文本和字形放入框中,测量框并计算一行中适合放置多少个框。不幸的是,我只能让 Pango 的基本字体整形引擎测量其框到最近的点,这不够准确;如果您在文本上布置整个字符串,它工作正常,因为 Pango/Cairo 还处理字形间的字距调整,但如果您想将单个字形放入框中,那么框大小的误差约为 12%,会导致非常糟糕的输出。(显而易见的解决方案不是将单个字形装入框中,而是将整个单词装入框中;那么误差只会影响单词间的间距。显而易见的解决方案的问题在于 TeX 算法会在单词可以连字符的地方插入任意节点。因此,您最终总是会在每个框中得到几个字符,而不是整个单词。)OS X 上的 CoreText 整形器工作正常。
您可以使用 Pango/Cairo 获得足够好的结果,而且它可以节省很多工作,但我认为如果您想要一些更通用的东西,那么值得投入精力去与低级整形库和 PDF 库进行交流。
如果你还没读过,文本渲染状态是一份很好的文档,它解释了 Cairo/Pango/Harfbuzz 等以及它们如何组合在一起。
答案2
有人正在这里使用 Pango/Cairo 实现 TeX 格式化算法:
我有点喜欢这个项目的发展方向——它可以证明在可做的事情方面更加灵活,并且可以通过使用像 Pango/Cairo 这样的新技术进行排版来轻松完成,而不是建立在固有的有限的旧技术之上。
我喜欢 ConTeXt,但它也建立在 TeX 之上。SILE 并不建立在 TeX 之上,而是实现了 TeX 的文本排版算法。