我们可以从MathJax获得MathML输出吗?

时间:2013-01-17 20:21:46

标签: mathjax mathml

我想知道是否有办法将MathJax输出转换为MathML

我读了几篇说MathJax支持MathML的文章。当我右键单击Show MathML公式时,我还可以看到“MathJax”选项。我的问题是,我可以从MathML获取MathJax输出到网页吗?我不熟悉MathJax,我不确定它是如何工作的。任何资源或教程页面都会很棒!

3 个答案:

答案 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可以开始利用其原生支持时,这将发生变化。)因此,请确保您的内容实际呈现正常。