【发布时间】:2021-10-12 23:12:03
【问题描述】:
我使用 MathJax 3.2.0 在网页上显示 MathML 公式:
<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 代码也是由 MathJax 作为服务器端 node.js 模块从 TeX 生成的。
但是,在我尝试将原始 TeX 代码注入(服务器端,通过编辑 HTML)作为语义注释(见下文)后,MathJax 在客户端失败:Math输出错误,带有此浮动工具提示: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 代码解决了这个问题。
【问题讨论】:
-
如果将
开始标签移到 上方会怎样? -
@okzoomer,同样的。
-
使用this 作为参考。我不确定您是如何“注入”的,但请确保您正在通过 node.js 进行注释,而不是手动将其添加到 html 中。还可以考虑在 mathjax github repo 上打开一个问题。
-
@okzoomer,我编辑 HTML 服务器端添加注释。
-
是的,将
开始标记移到 之前,即
标签: javascript mathjax mathml