Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MathJax.js生成的svg与MathJax节点生成的svg不同_Mathjax - Fatal编程技术网

为什么MathJax.js生成的svg与MathJax节点生成的svg不同

为什么MathJax.js生成的svg与MathJax节点生成的svg不同,mathjax,Mathjax,我正在编写一个将html保存到onenote的web应用程序。为了保存数学公式,我计划通过MathJax.js将数学公式转换为svg,然后将svg转换为png,因为onenote api中支持的html/css是有限的 但在浏览器中由MathJax.js生成的svg似乎不是有效的svg。我用一个简单的数学公式对它进行了测试:$$a^2+b^2=c^2$$()并将svg复制到,它什么也不显示 然后我尝试编写一个MathJax节点演示并再次将svg复制到,看起来不错。这是我的演示代码,它几乎与: /

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

但在浏览器中由MathJax.js生成的svg似乎不是有效的svg。我用一个简单的数学公式对它进行了测试:
$$a^2+b^2=c^2$$
()并将svg复制到,它什么也不显示

然后我尝试编写一个MathJax节点演示并再次将svg复制到,看起来不错。这是我的演示代码,它几乎与:

//一个简单的TeX输入示例
常量fs=require('fs')
var mjAPI=require(“mathjax节点”);
mjAPI.config({
MathJax:{
//传统的MathJax配置
}
});
mjAPI.start();
var yourMath=String.raw`a^2+b^2=c^2`
mjAPI.字体({
数学:你的数学,
格式:“TeX”、//或“内联TeX”、“MathML”
svg:true、//或svg:true或html:true
},函数(数据){
如果(!data.errors){console.log(data.svg)}
//将产生:
// 
//E
//   =
//m
//   
//c
//     2
//   
// 
fs.writeFile('math.txt',data.svg,(错误)=>{
console.log(错误)
})
});

我还测试了两个svg,结果是一样的。为什么这两个svg不同?我错过了什么吗?

区别在于特定的设置:
useGlobalCache

默认情况下,MathJax()将其设置为
true
,而MathJax节点()将其设置为
false


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

感谢您的帮助!没问题。这有点棘手,因为mathjax节点有一段特殊的历史。MathJax v3(即将推出第一个beta版)将统一这两个版本,因此这类事情在未来会变得更容易。
// 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)
  })
});