Skip to content

External MathML files with object does not work with MathJax

dpvc edited this page Apr 9, 2013 · 6 revisions

From https://groups.google.com/d/msg/mathjax-users/5VOt3rJXHms/X1_ovYTCm5MJ


Is there a way that I can embed external MathML files in a HTML document? Usually I would do it with <object>. Sadly this seems not to work with MathJax. Is there another way?


Well, I did some experiments and it looks like the files don't need to contain anything other than a tag. I don't know how you are setting the height and width, however (my tests indicate that the browsers simply use a default width and height that has nothing to do with the actual contents of the file). Also the baseline would need to be adjusted if you were using in-line math, and it is not clear how to determine that either.

In any case, assuming that your xml files contain a single tag, I have the following suggestion. Add

    <script type="text/x-mathjax-config">
    MathJax.Extension.object2jax = {
      version: "1.0",
      PreProcess: function (element) {
        if (typeof(element) === "string") {element = document.getElementById(element)}
        if (!element) {element = document.body}
        var objects = element.getElementsByTagName("object");
        for (var i = objects.length-1; i >= 0; i--) {
          var object = objects[i];
          var math = ((object.contentDocument||{}).documentElement||{});
          if (String(math.nodeName).toLowerCase() === "math") {
            math = document.importNode(math,true);
            object.parentNode.insertBefore(math,object);
            object.parentNode.removeChild(object);
          }
        }
      }
    };
    MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.object2jax],5);
              // priority 5 is before mml2jax
    </script>

somewhere before the script that loads MathJax.js (or put it in your local configuration file if you are using one). This will register a preprocessor that will look for elements in tags and will incorporate them into the body of the document, where the mml2jax preprocesor will be able to recognize and handle them. Note that this avoids having to specify a height and width for the , since the is actually removed and the MathML is inserted into the document directly. This also gets the baseline to work properly, too, when y9ou are using in-line math.

Anyway, I think that will do what you need.

Davide

Clone this wiki locally