我使用MathJax 3.2.0在网页上显示MathML formul:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow data-mjx-texclass="INNER">
<mo data-mjx-texclass="OPEN">{</mo>
<mtable columnspacing="1em" rowspacing="4pt">
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mi>y</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>z</mi>
</mtd>
<mtd>
<mi>v</mi>
</mtd>
</mtr>
</mtable>
<mo data-mjx-texclass="CLOSE">}</mo>
</mrow>
</math>并且它是由MathJax (而不是本机浏览器)按预期显示的,还有上下文菜单等等。
这个公式的MathML代码也是由TeX作为服务器端node.js模块由MathJax生成的。
但是,在我尝试将原始TeX代码作为语义注释注入(服务器端,通过编辑HTML)之后(见下文),MathJax失败了客户端:数学输出错误,并使用以下浮动工具提示:this.variant[t] is undefined。只有在<annotation>标记不是空的情况下才会发生这种情况。
我发现this.variant[t]在函数getVariant和getChar中没有定义,而t在某些情况下是"",而在其他情况下是undefined。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow data-mjx-texclass="INNER">
<mo data-mjx-texclass="OPEN">{</mo>
<mtable columnspacing="1em" rowspacing="4pt">
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mi>y</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>z</mi>
</mtd>
<mtd>
<mi>v</mi>
</mtd>
</mtr>
</mtable>
<mo data-mjx-texclass="CLOSE">}</mo>
</mrow>
<semantics>
<annotation encoding="application/x-tex">\begin{Bmatrix} x & y \\ z & v \end{Bmatrix}</annotation>
</semantics>
</math>MathJax附后如下:
<script>
window.MathJax = {
"loader":{"load":["ui\/safe"]},
"options":{
"skipHtmlTags":["script","noscript","style","textarea","pre","code","annotation","annotation-xml","tt","nowiki","kbd","syntaxhighlight"],
"ignoreHtmlClass":["tex2jax_ignore","diff"],
"menuOptions":{
"settings":{
"zoom":"DoubleClick",
"semantics":true
},
"annotationTypes":{
"TeX":["application\/x-tex"],
"OpenMath":["OpenMath"]
}
},
"enableEnrichment":true
}
};
</script>
<script src="(skipped)/node_modules/mathjax-full/es5/mml-chtml.js?locale=ru"></script>有什么不对的?
UPD:在<math>之后移动打开<semantics>,即用<semantics>包装MathML代码解决了这个问题。
发布于 2021-08-10 10:08:47
您的<semantics>节点无效。<semantics>的第一个子节点应该是表示MathML节点,而不是<annotation>节点。也就是说,<semantics>的第一个子节点应该是被注释的数学,第二个和后续节点应该是注释节点。有关细节,请参阅MathML规范。所以
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<semantics>
<mrow data-mjx-texclass="INNER">
<mo data-mjx-texclass="OPEN">{</mo>
<mtable columnspacing="1em" rowspacing="4pt">
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mi>y</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>z</mi>
</mtd>
<mtd>
<mi>v</mi>
</mtd>
</mtr>
</mtable>
<mo data-mjx-texclass="CLOSE">}</mo>
</mrow>
<annotation encoding="application/x-tex">\begin{Bmatrix} x & y \\ z & v \end{Bmatrix}</annotation>
</semantics>
</math>正如您在更新中所指出的那样,正确的方式来注释这个数学。
您似乎正在使用MathJax来生成原始MathML。如果您正在使用MathJax上下文菜单在浏览器中执行此操作,请注意“显示为”菜单中有一个项可以选择,以便将原始TeX作为注释包括在内,因此您不必自己执行此操作。如果使用mathjax-node,也可以配置mathjax-node设置该选项。
https://stackoverflow.com/questions/68709003
复制相似问题