MediaWiki 删除了 MathJax。 MathJax 可以用另一种方式强制在客户端使用吗?

MediaWiki removed MathJax. Can MathJax be forced on client side another way?

令我很不高兴的是,MediaWiki 有 recently disabled support for MathJax (ticket: T99369) 维基百科范围内的 TeX 公式渲染。

因为我(和其他人,如果你浏览了票的讨论线程)发现其余选项(MathML、PNG)的渲染效果较差,我想 "slipstream" MathJax 进入维基百科。

由于使用 <script> 元素似乎无法通过维基百科中的自定义 JavaScript 设置直接加载更多 JavaScript 文件,因此我不知道如何实现这一壮举。会不会,MathJax 可以最容易地通过 CDN 包含。

我使用的是当前的 Edge 和 Firefox 浏览器,因此非常感谢任何适用于其中一种或两种浏览器的解决方案!


与此同时,我找到了适用于 Firefox 的 Greasemonkey,如果有合适的脚本,它可能能够完成此任务。由于我既不是 Greasemonkey 也不是 JavaScript 专家,任何有关如何继续编写此类脚本的提示都会有所帮助。

作为注册用户,您可以进行以下操作:

user preferences => appearance下,开启"MathML with SVG or PNG fallback"模式。 (其他两种模式需要稍微不同的脚本,但恕我直言,该模式是目前最好的选择。)

接下来在 https://en.wikipedia.org/wiki/User:YOURHANDLE/common.js [不要忘记更改用户名!] 编辑您的用户特定脚本页面,并向其中添加以下自定义脚本:

// add to User:YOURNAME/common.js to get smooth MathJax rendering
var mathTags = $('.mwe-math-mathml-a11y');
if (mathTags.length > 0){ //only do something when there's math on the page
  window.MathJax = { //hook into MathJax's configuration
    AuthorInit: function () {
      MathJax.Hub.Register.StartupHook("End",function () { //when MathJax is done...
        MathJax.Hub.Queue(
            function(){
             mathTags.removeClass('mwe-math-mathml-a11y'); // .. make the span around MathML (now MathJax output) visible
             $('.mwe-math-fallback-image-inline').addClass('mwe-math-mathml-a11y'); //hide fallback images
            }
        );
      });
    }
  };
  mw.loader.load('https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=MML_HTMLorMML-full');//load MathJax with a suitable combined config file
}

只有当页面中有数学时,此脚本才会加载 MathJax,呈现它,并且(当呈现完成时)用结果替换后备图像。

这样,抖动就很少了。从快速测试来看,这似乎适用于 Chrome 43、Firefox 39、IE8 和 Edge,以及 WebKit 2.6.2(因此应该适用于 Safari)。

使用客户端 MathJax 的 GreaseMonkey 脚本现在似乎列在 MathJax docs

从那里更新:

// ==UserScript==
// @name           MathJax in Wikipedia
// @namespace      http://www.mathjax.org/
// @description    Insert MathJax into Wikipedia pages
// @include        https://*.wikipedia.org/wiki/*
// ==/UserScript==

// replace the images with MathJax scripts of type math/tex
if (window.MathJax) throw "MathJax already loaded!";
var imgs = document.querySelectorAll('.mwe-math-fallback-image-inline')
if (!imgs.length) throw "no matches!";
imgs.forEach((img) => {
    var script = document.createElement("script");
    script.type = 'math/tex';
    script[window.opera ? 'innerHTML' : 'text'] = img.alt;
    img.parentNode.replaceChild(script, img);
})
// Load MathJax and have it process the page
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full';
document.querySelector('head').appendChild(script);