我想知道是否有办法将MathJax
输出转换为MathML
。
我读了几篇说MathJax
支持MathML
的文章。当我右键单击Show MathML
公式时,我还可以看到“MathJax
”选项。我的问题是,我可以从MathML
获取MathJax
输出到网页吗?我不熟悉MathJax
,我不确定它是如何工作的。任何资源或教程页面都会很棒!
答案 0 :(得分:4)
@Peter,我认为OP可能会询问如何从MathJax获取MathML字符串,而不是如何直接将MathML标记插入到页面中。因此,也许在MathJax论坛上讨论how to use toMathML的讨论就可以了。
基本思想是将元素jax(使用MathJax.Hub.getAllJax
)用于要转换的数学,然后调用其toMathML
方法。但是你需要谨慎使用,因为toMathML
可以异步操作。上面的链接详细介绍。
编辑:MathJax-node项目允许您从命令行执行此操作,因此您可能也想检查它。
答案 1 :(得分:1)
我写了一些代码检查出来: 首先包括“https://code.jquery.com/jquery-1.11.2.min.js”和“http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML”
var JaxToML = {
toMathML: function(jax, callback) {
var mml;
try {
mml = jax.root.toMathML("");
} catch (err) {
if (!err.restart) {
throw err
} // an actual error
return MathJax.Callback.After([JaxToML.toMathML, jax, callback], err.restart);
}
MathJax.Callback(callback)(mml);
},
convert: function(AjaxText, callback) {
var tempDiv = $('<div style="width:455px;height:450px:border-width:thick;border-style:double;"></div>').appendTo("body").html(AjaxText)[0];
MathJax.Hub.Queue(["Typeset", MathJax.Hub, tempDiv]); //first place in Q
MathJax.Hub.Queue(function() { //wait for a callback to be fired
var jax = MathJax.Hub.getAllJax(tempDiv);
for (var i = 0; i < jax.length; i++) {
JaxToML.toMathML(jax[i], function(mml) {//alert(jax[i].originalText + "\n\n=>\n\n"+ mml);
AjaxText = AjaxText.replace(jax[i].originalText, mml);
});
}
$(tempDiv).remove();
AjaxText = AjaxText.replace(/\(/g,""); //notice this escape character for ( - i.e it has to be \( , know why it is beacuse JS will treat ) or ( as end/begin of function as there are no quotes here.
AjaxText = AjaxText.replace(/\)/g,""); //notice this escape character for ) - i.e it has to be \)
AjaxText = AjaxText.replace(/\\/g,"");
callback(AjaxText);
});
},
};
用法:
JaxToML.convert(AjaxText, function(mml) {
alert(mml);
});
答案 2 :(得分:0)
configuring MathJax上的MathJax文档可能是开始阅读的地方。您可以配置output jax per browser。
谨慎一点。这就是为什么MathJax现在不在任何浏览器上使用MathML输出的原因:浏览器支持还没有到位。 (当浏览器赶上并且MathJax可以开始利用其原生支持时,这将发生变化。)因此,请确保您的内容实际呈现正常。