【问题标题】:Why is svg generated by MathJax.js different than the svg generated by MathJax-node为什么 MathJax.js 生成的 svg 与 MathJax-node 生成的 svg 不同
【发布时间】:2018-06-04 22:58:04
【问题描述】:

我正在编写一个将 html 保存到 onenote 的网络应用程序。为了保存数学公式,我打算通过 MathJax.js 将数学公式转换为 svg,然后将 svg 转换为 png,因为 onenote api 支持的 html/css 是有限的。

但似乎 MathJax.js 在浏览器中生成的 svg 不是有效的 svg。我用一个简单的数学公式对其进行了测试:$$a^2 + b^2 = c^2$$ (demo code) 并将 svg 复制到 jsfiddle 并没有显示任何内容。

然后我尝试编写一个 MathJax-node 演示并将 svg 再次复制到jsfiddle,看起来不错。这是我的演示代码,和GitHub repo demo几乎一样:

// a simple TeX-input example
const fs = require('fs')
var mjAPI = require("mathjax-node");
mjAPI.config({
  MathJax: {
    // traditional MathJax configuration
  }
});
mjAPI.start();

var yourMath = String.raw`a^2 + b^2 = c^2`

mjAPI.typeset({
  math: yourMath,
  format: "TeX", // or "inline-TeX", "MathML"
  svg: true,      // or svg:true, or html:true
}, function (data) {
  if (!data.errors) {console.log(data.svg)}
  // will produce:
  // <math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  //   <mi>E</mi>
  //   <mo>=</mo>
  //   <mi>m</mi>
  //   <msup>
  //     <mi>c</mi>
  //     <mn>2</mn>
  //   </msup>
  // </math>

  fs.writeFile('math.txt', data.svg, (error) => {
      console.log(error)
  })
});

我还用cloudconvert 测试了两个svg,结果相同。为什么两个svg不同?我错过了什么吗?

【问题讨论】:

    标签: mathjax


    【解决方案1】:

    差异是由于特定设置:useGlobalCache

    默认情况下,MathJax (docs) 将此设置为 true,而 mathjax-node (docs) 将其设置为 false

    在服务器上,MathJax-node 没有任何文档上下文并生成自包含的 SVG。在客户端,MathJax 具有完整的文档上下文,因此可以跨方程式重用 SVG 路径。

    【讨论】:

    • 感谢您的帮助!
    • 没问题。这有点棘手,因为 mathjax-node 有一段特殊的历史。 MathJax v3(接近它的第一个测试版)将统一两者,因此这些事情在未来会更容易。
    猜你喜欢
    • 2017-07-03
    • 2015-11-02
    • 2016-07-11
    • 2015-01-26
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多