受到作者提问动机的启发tex 语言有 BNF 语法吗。
是否有任何完善的库可以独立于 TeX 引擎解析 TeX 数学的某些子集?答案中需要考虑的要点:
支持 TeX 数学符号子集的多少?
解析器是否可移植?它是否有任何依赖项?
解析器是否与特定后端紧密相关,或者是否可以轻松用于支持多种输出格式。换句话说,它能否轻松地集成到必须支持输出为 PDF、HTML、PNG 等的新系统中?
例如,我知道以下解析器,但对于它们在设计用例(Web 浏览器中的 Matplotlib 图形和数学渲染)之外的适用性了解不多:
答案1
我也一直在研究这个问题,所以我将分享一些与正确答案相差甚远的观察结果,这实际上需要查看大量源代码并提出正确的问题。
生成 HTML+Math ML 的解析器
- Nick Drakos 和 Ross Moore 的Latex2html转换器,用 Perl 编写,我认为这是第一个将方程式映射到 Math ML 的转换器。1998 年,Ross Moore 概述了他对 Latex2html 的目标,与现已不复存在的闭源数学渲染软件 WebEq 和 Webtex 相关,后者是专为网页使用而设计的数学替代语法。WebEq 文档:WebTeX 总是可以清晰地翻译成 MathML,而 LaTeX 则不能。
- itex2mml,由 Paul Gartside 等人用 C 语言编写,也基于 Webtex,但支持一些 Webtex 不支持的 Latex。
- tex4ht,由 Eitan Gurari 和其他杰出人物用 C 语言编写。它通过使用修改后的宏来运行,将特殊内容插入 DVI 输出,从而避免解析 Latex 源代码
latex
,而是解析 DVI 输出。 - 约翰·麦克法兰的潘多克,正如 Aditya 所说,是用 Haskell 编写的。请注意,Pandoc 支持生成 HTML,无论是否使用 Math ML。
- MathJax 除了允许生成常见的框和图像字体输出外,还允许生成 Math ML。它具有对 Latex 的支持程度令人印象深刻,包括对用户宏的有限支持。
解析器生成 XML
Jason Blevins 有一系列工具,可以将 Latex 文档转换为基于 XML 的格式,并合理地处理方程式。Romeo Anghelache 的爱马仕,它是完整的 Latex 解析器的一部分,可以生成带有语义标记的 XML,值得一提的是:与 tex4ht 一样,它的工作原理是运行带有宏的 Tex 引擎,将特殊内容放入 DVI 输出中,然后进行解析;它支持更广泛的语义标记。
Latex 或 DVI 碎片
除了引用 Webtex 的系统之外,似乎没有太多人对明确编码要解析的 Latex 子集感兴趣,我猜是因为这些子集被视为移动目标。相反,支持的命令列表(如我提到的 Mathjax)似乎是做事的方式。
使用基于 DVI 的转换器,解析 Latex 的问题就消失了,取而代之的是解析标记的 DVI 的相对简单的问题和识别语义上重要的宏和构造不会造成不当干扰的标记发行替换的更棘手的问题。我还没有研究如何为方程式布局做到这一点。看看如何将 Tex 公式转换为值得注意的是,表达式的表示本质上是 Heckmann & Wilhelm (1997) 使用的表示的超集,这将是一个有用的练习。
语法高亮
语法高亮涉及一种完全不同的解析,其目的是帮助作者了解公式各部分的意义。我不知道有任何语法高亮器在这里能发挥有趣的作用:Auctex 只提升/降低上标和下标,但我还没有真正看过。
参考
Heckmann & Wilhelm,1997,TeX 公式布局的功能描述。
答案2
答案3
潘多克使用 Haskell文本.TeXMath.解析器用于解析内联和显示数学的库。此库并不完整。它仅解析最常见的内联数学表达式,不支持 amsmath 显示环境。
我不知道是否有官方文档说明支持哪个子集。源代码将会对此给出一些想法。
它和 Haskell 一样具有可移植性。因此,它应该可以在大多数流行的操作系统上运行。
Pandoc 专门设计用于支持多种输出格式。如果我没记错的话,输出可以使用 mimetex、gladtex 等转换为 MathML 或图像。
答案4
Alvin Wan 的特克斯汤看上去保养得很好。