【问题标题】:Fallback to html-css if svg not supported如果不支持 svg,则回退到 html-css
【发布时间】:2013-09-12 13:19:44
【问题描述】:

我正在使用 MathJax 在浏览器中呈现 mathml 标记。我使用 TeX-AMS-MML_SVG 配置在 Chrome 中运行良好,但这在 IE8 中不起作用。

如果我切换到 TeX-AMS-MML_HTMLorMML,它在所有浏览器中都可以正常工作。但是 SVG 渲染看起来要好得多,所以我希望尽可能首选它。

MathJax 是否有任何内置功能来支持这一点?它似乎可以从 MML 回退到 HTML,但不能从 SVG 回退到 HTML。我可以通过 javascript 检查 SVG 支持,但我希望 MathJax 配置中已经有一些东西我丢失了。

这是common configurations 上的文档。我正在寻找类似 MML_SVGorHTML 配置的东西。

【问题讨论】:

    标签: javascript svg mathjax mathml


    【解决方案1】:

    请参阅MathJax User's Forum 上的讨论,其中描述了一种方法。基本上,

        <script type="text/x-mathjax-config">
        if (MathJax.Hub.Browser.isMSIE && (document.documentMode||0) < 9) {
          MathJax.Hub.Register.StartupHook("End Config",function () {
            var settings = MathJax.Hub.config.menuSettings;
            if (!settings.renderer) {settings.renderer = "HTML-CSS"}
          });
        }
        </script>
    

    负责处理旧版本的 IE,这是目前唯一不支持 SVG 的浏览器。

    【讨论】:

    • 感谢您将我指向该帖子。这可行,但最终我已经检查了 SVG 支持而不是浏览器版本(请参阅我的答案)。不过,这确实回答了我的问题。
    【解决方案2】:

    我目前正在测试这个方法,它是手动检查svg支持:

    function supportsSvg() {
        return !!document.createElementNS && 
            !!document.createElementNS('http://www.w3.org/2000/svg', "svg").createSVGRect;
    }
    
    var mathjaxConfig = (supportsSvg()) ? 'TeX-AMS-MML_SVG' : 'MML_HTMLorMML';
    

    然后你可以像往常一样将mathjaxConfig插入到url中:

    "../MathJax.js?config=" + mathjaxConfig
    

    【讨论】:

      【解决方案3】:

      您可以使用Walter Zorn's drawing library。它将所有内容呈现为 DIV。

      【讨论】:

      • OP 的问题不是关于图形,而是关于使用 MathJax 的数学符号。您指向的软件包,虽然我非常喜欢它(并且过去曾使用过它)并没有回答这个问题。