mathml支持

mathjax中对mathml的支持涉及两个函数:第一个函数查找 <math> 文档中的标记并将其标记为以后由mathjax处理,第二个标记将mathml转换为mathjax使用的内部格式,然后mathjax的一个输出处理器将其显示在网页中。

此外,mathjax的内部格式本质上是mathml(添加了一些内容),实现为javascript对象而不是dom元素。mathjax的各种输入处理器都将其原始格式转换为这种内部mathml格式,其输出处理器接受这种mathml并从中产生正确的输出。因为内部格式是基于mathml的,mathjax提供了转换到mathml符号和从mathml符号转换的能力。

虽然有些浏览器支持呈现mathml,但并非所有浏览器都支持,因此mathjax使在 all 浏览器。即使对于那些支持mathml的人来说,使用mathjax也是很有价值的,因为这将在所有浏览器中产生一致的输出,而mathjax实现了一些本机mathml实现中不可用的特性和功能。

HTML页面中的MathML

对于通过预处理器处理的mathml,不应使用命名的mathml实体,而应使用数字实体,如 &#x221A; 或者页面本身嵌入的Unicode字符。原因是mathjax运行之前浏览器会替换实体,有些浏览器会报告未知实体的错误。对于不知道mathml的浏览器,这将导致显示mathml实体的错误。虽然这种情况可能不会出现在用于编写页面的浏览器中,但也可能出现在其他浏览器中,因此应尽可能避免使用命名实体。如果必须使用命名实体,则可能需要在 DOCTYPE 手工申报。

当在html文档中使用mathml而不是xhtml文档(mathjax将同时使用两者)时,不应该对没有内容的mathml标记使用“自动关闭”表单,而应该使用单独的打开和关闭标记。也就是说,使用

<mspace width="thinmathspace"></mspace>

而不是 <mspace width="thinmathspace" /> . 这是因为HTML没有自动关闭的标记,如果您尝试使用这些标记,某些浏览器将错误地嵌套标记。例如,使用 <mspace width="1em" /> ,因为没有结束标记,其余的数学将成为 <mspace> 标记;但是自从 <mspace> 应该没有内容,其余的数学将不会显示。这是一个应该避免的常见错误。支持HTML5的现代浏览器应该能够处理自动关闭标记,但较旧的浏览器会有问题,因此,如果您希望您的数学对最广泛的受众可见,请不要在HTML文档中使用自动关闭表单。

支持的mathml标记

mathjax支持 MathML3.0 数学标签,有一些限制。mathml支持仍在积极开发中,因此一些标记尚未实现,一些功能尚未完全开发,但即将推出。

不足之处包括:

  • 表中不支持对齐组。

  • 表不支持所有属性。例如。, columnspanrowspan 尚未实施。

  • 基本数学标签的实验支持: mstackmlongdivmsgroupmsrowmscarriesmscarry (通过 mml3 分机,见下文)。

  • 双向数学的实验支持(通过 mml3 分机,见下文)。

results of the MathML3.0 test suite 有关详细信息。

内容MathML

版本2 content-mathml 扩展在版本3中尚不可用。

实验性mml3延伸

MathML包括许多支持小学数学的标记,例如 <mstack><mlongdiv> 。MathJax仅通过 mml3 分机。它使用XSLT转换将这些标记转换为MathJax实现的其他表示MathML标记。这对于某些构造来说是合理的,而对于其他构造来说则较差,但是它确实使得在MathJax中处理初等数学成为可能。未来计划提供更好的支持。

要激活文档中的实验特性,只需包括 [mml]/mml3load 属性的数组 loader 配置的部分:

MathJax = {
  loader: {load: ['[mml]/mml3']}
};

这将在MathML input JAX上安装一个过滤之前的版本,以便在处理之前执行xslt转换。

语义和注释

一些流行的注释格式,如tex、maple或content mathml,通常通过 semantics 元素。由其他软件(如编辑器或计算工具)生成的mathml尤其如此。

mathjax通过 "Show Math As" 菜单,通过 Annotations 子菜单。见 MathML Annotation Framework 以及 上下文菜单选项 有关详细信息的文档。