为什么MathJax.js生成的svg与MathJax-node

时间:2018-06-04 06:50:32

标签: mathjax

我正在编写一个将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节点演示并再次将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不同?我想念一下吗?

1 个答案:

答案 0 :(得分:3)

差异是由于特定设置:useGlobalCache

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

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