首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MathJax不会显示带有TeX注释的MathML公式

MathJax不会显示带有TeX注释的MathML公式
EN

Stack Overflow用户
提问于 2021-08-09 08:29:12
回答 1查看 178关注 0票数 0

我使用MathJax 3.2.0在网页上显示MathML formul:

代码语言:javascript
复制
<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]在函数getVariantgetChar中没有定义,而t在某些情况下是"",而在其他情况下是undefined

代码语言:javascript
复制
<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 &amp; y \\ z &amp; v \end{Bmatrix}</annotation>
</semantics>
</math>

MathJax附后如下:

代码语言:javascript
复制
<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代码解决了这个问题。

EN

回答 1

Stack Overflow用户

发布于 2021-08-10 10:08:47

您的<semantics>节点无效。<semantics>的第一个子节点应该是表示MathML节点,而不是<annotation>节点。也就是说,<semantics>的第一个子节点应该是被注释的数学,第二个和后续节点应该是注释节点。有关细节,请参阅MathML规范。所以

代码语言:javascript
复制
<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 &amp; y \\ z &amp; v \end{Bmatrix}</annotation>
</semantics>
</math>

正如您在更新中所指出的那样,正确的方式来注释这个数学。

您似乎正在使用MathJax来生成原始MathML。如果您正在使用MathJax上下文菜单在浏览器中执行此操作,请注意“显示为”菜单中有一个项可以选择,以便将原始TeX作为注释包括在内,因此您不必自己执行此操作。如果使用mathjax-node,也可以配置mathjax-node设置该选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68709003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档