无法在Google Chrome中呈现MathML内容

16

我在HTML页面中有一些MathML内容,该页面需要在HTTPS连接下在Google Chrome中呈现。因此,我尝试按照以下链接中所说的方法进行操作:

显示Mathml方程

但它没有起作用(我复制了脚本到我的HTML页面中)。然后我尝试将MathJax插件作为扩展程序安装到Google Chrome中。这似乎在我的文件中渲染了一些MathML,但对于一些内容我收到了错误信息。我发现MathJax可以渲染Presentation MathML内容,但无法渲染Content MathML内容(我在页面上有两种类型的内容)。而且它在HTTPS连接上也无法工作。如果我能得到一些解决此问题的解决方法,那将非常有帮助。

敬礼, Anirban


<body>标签结束后调用MathJax.Hub.Configured() - Lal
已经在这里给出了答案,请查看此链接[https://dev59.com/vVHTa4cB1Zd3GeqPVN3p#26105113]。 - Aaska Patel
5个回答

20

OP中链接的问题有些过时,描述了如何在xhtml中包含MathML(因为当时html实际上不是有效的)。使用HTML5,可以更轻松地包含MathML。

Chrome不支持MathML,因此您需要一个polyfill。MathJax可以呈现表示和内容MathML;请参阅相关文档

但是,作者需要正确配置MathJax才能这样做。值得注意的是,Chrome商店中的插件由第三方制作;另外,如果正确操作,MathJax也可以在https上正常工作。

以下是一个示例,显示了如何启用MathJax可以提供的所有MathML功能,包括用于实验功能的mml3.js扩展。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Fullest MathML support using MathJax</title>
  <script>window.MathJax = { MathML: { extensions: ["mml3.js", "content-mathml.js"]}};</script>
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=MML_HTMLorMML"></script>
</head>
<body>
  <math display="block"> 
    <apply> 
      <plus/> 
      <ci>a</ci> 
      <apply> 
        <minus/> 
        <ci>b</ci> 
        <ci>c</ci> 
      </apply> 
    </apply> 
  </math> 
  <math display="block">
    <mrow>
      <mi>a</mi>
      <mo>+</mo>
      <mrow>
        <mi>b</mi>
        <mo>-</mo>
        <mi>c</mi>
      </mrow>
    </mrow>
  </math>

</body>
</html>


使用这种方法,不会抛出任何错误,但是许多内容都显示为“none”。例如,“1+2=”这个等式会被显示为“1none+none2none none =”。 - Anirban
另外,mml3仍处于实验阶段,您能否提供一些可用于生产的建议?这将非常有帮助。 - Anirban
我还需要在Chrome和Safari中运行相同的东西,内容在Safari中正确显示,添加这些扩展后它们会受到影响吗? - Anirban
对于您的第一个评论,如果没有一些代码示例,我无法多说什么。对于第二个评论,您不需要mml3.js扩展程序。对于第三个评论,MathJax在所有浏览器和平台上都有相同的支持,所以它应该可以工作。 - Peter Krautzberger
我已更新答案,因为cdn.mathjax.org即将到达其生命终点,请参见https://www.mathjax.org/cdn-shutting-down/。 - Peter Krautzberger
最好只在Chrome / Edge中包含脚本,因为Firefox本地支持MathML。(未测试Safari。) - Franklin Yu

3
这个方法在我遇到类似情况时非常有效。请将这些脚本添加到<head>中。
<script type="text/x-mathjax-config">MathJax.Hub.Config({
  config: ["MMLorHTML.js"],
  jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML"],
  extensions: ["tex2jax.js","mml2jax.js","MathMenu.js","MathZoom.js"],
  TeX: {
    extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"]
  }
});</script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/2.0-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

然后,

<body> 结束标签之后添加这个 <script>

<script type="text/javascript">
  MathJax.Hub.Configured()
</script>

请参阅文档

或者

您可以查看这个奇妙的例子.. https://math.stackexchange.com/ .. 检查math.stackexchange的源代码,这将非常有帮助。

更新

请参见此链接中的第54页..它说:

MathJax支持MathML3.0数学标记,但存在一些限制。 MathML支持仍在积极开发中,因此某些标记尚未实现,并且某些功能尚未完全开发,但即将推出。不足之处包括:

• 不支持在表格中的对齐组。

• 不支持表格的所有属性。例如,尚未实现columnspan和rowspan。

• 对基本数学标记的实验性支持:mstack、mlongdiv、msgroup、msrow、mscarries和mscarry。(通过mml3扩展,见下文。)

• 实验性支持双向数学。


我尝试用这种方式做,一些内容被正确渲染,但是对于一些内容,我收到了以下错误未知节点类型:mstack - Anirban


1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接