当前位置: 首页 > 知识库问答 >
问题:

Mathjax回退:如果HTML-CSS webfont失败,请在使用图像字体之前尝试SVG

竺和洽
2023-03-14

(我使用的是STIX字体,但这个问题也与TeX字体有关。)

我的问题是:如何在我的网页上配置mathjax,以便查看网页的用户体验以下1-

  1. 超文本标记语言-CSS(webFont"STIX-Web",本地"STIX")
  2. SVG("STIX-Web")
  3. 所有其他回退选项(本地通用,映像等)

换句话说,我们的想法是将HTML-CSS作为首选,但如果HTML-CSS失败,那么就回到SVG,而不是本地通用字体或图像字体。

后备策略需要适用于(1)中的各种故障。例如,当无法使用HTML-CSS中的本地字体时(或者因为用户没有在本地安装字体,或者因为我通过availableFonts:[]preferredFont:null)在网页中显式禁用本地字体),它都应该起作用,此外,当无法使用HTML-CSS网页字体时(用户已禁用网页字体,浏览器同源策略将被强制执行,等等)。

它还应该独立于客户端用户在“数学”上下文菜单中最后选择的渲染器。目前,如果用户在客户端浏览器上最后一次通过“数学”菜单选择HTML-CSS作为渲染器,那么每当(1)失败时,mathjax就会返回(3),跳过(2)。如果用户上次选择SVG作为渲染器,则HTML-CSS不再是首选,即(1)被完全跳过。

共有1个答案

张照
2023-03-14

下面的配置似乎实现了所需的回退链(在我有限的测试中)。

<script type="text/javascript"
  src="../MathJax-2.7.1/MathJax.js?config=TeX-AMS-MML_SVG">
</script>

<script type="text/x-mathjax-config">
//
// - Mathjax config to implement the following fallback chain:
//
//     1. HTML-CSS webFont ("STIX-Web")
//     2. SVG ("STIX-Web")
//     3. Other fallback fonts (local generic, image, etc)
//
// - Change availableFonts to ["STIX"] and preferredFont to "STIX"
//   to allow local STIX fonts. Implements the fallback chain below:
//
//     1. HTML-CSS local ("STIX")
//     2. HTML-CSS webFont ("STIX-Web")
//     3. SVG ("STIX-Web")
//     4. Other fallback fonts (local generic, image, etc)
//

//
// Use STIX font consistently across HTML-CSS and SVG
//
MathJax.Hub.Config({
    jax: ["input/TeX", "input/MathML",
        "output/HTML-CSS", "output/SVG", "output/PreviewHTML"
    ],
    "HTML-CSS": {
        imageFont: null,
        webFont: "STIX-Web",
        availableFonts: [],    // Or: ["STIX"], to allow local
        preferredFont: null    // Or: "STIX", to allow local
    },
    "SVG": {
        font: "STIX-Web"
    }
});

MathJax.Hub.Register.StartupHook("End Jax", function() {

    // 1. Set HTML-CSS as the initially preferred output processor.
    //    (Temporarily overrides the renderer value set by MathMenu
    //    without affecting the user's chosen renderer elsewhere.)
    var jax = "HTML-CSS";
    MathJax.Hub.setRenderer(jax);

    // 2. Install callback which switches renderer to SVG if HTML-CSS fails.
    var nopast = true;
    MathJax.Hub.Startup.signal.Interest(QueSVGfallback, nopast);

});

</script>

<script>
//
// This callback (when installed) scans through messages to check
// (as in FontWarnings.js) if HTML-CSS font loading has failed.
// If so, it queues a request to switch to SVG rendering.
//
var QueSVGfallback = (function() {    // Anonymous "closure" to keep quecount
    var quecount = 0;
    return function(m) {              // The real callback function
        if (quecount > 0) return;     // Prevent multiple queueing
        m = m + "";
        if (m.match(/HTML-CSS Jax - /)) {
            if (m.match(/- using image fonts/) ||
                    m.match(/- no valid font/) ||
                    m.match(/- disable web fonts/)) {
                MathJax.Hub.Queue(
                    ["setRenderer", MathJax.Hub, "SVG", "jax/mml"],
                    ["Rerender", MathJax.Hub]
                );
                quecount++;
            }
        }
    }
})();
</script>
 类似资料:
  • 背景: git项目中需要回退更改,执行 git reset --soft xx 回退成功之后,git push之后有报错 尝试强制push,执行 git push --force 仍然有报错 代码只能往前提交、push,不能回退、push

  • 问题内容: 我们需要编写一个Node.js函数,该函数轮询某个API端点以获取先前请求的计算结果。结果需要一个随机的时间才能生成,而可能根本不生成。我们希望尽快得到它,但是我也不想等待太久,这意味着在一定数量的API调用之后,我们希望函数失败(拒绝Promise)。 我们的代码和API之间存在一种通信方式。 这是正确的方法吗? 问题答案: 否。这是构造函数antipattern的async/awa

  • 我用以下beforeAll代码进行了量角器测试: 登录页面是Microsoft Azure Ad,它没有角度,因此需要禁用。 有时会失败(这是我正在解决的问题)。然而,当它失败时,所有的测试都会运行,当然也会超时,因为它们会出现在登录屏幕上。 有没有什么我可以调用beforeAll()来说“这里的每个场景都失败”?

  • 问题内容: jQuery可以为失败的AJAX调用提供后备功能吗?这是我的尝试: 不幸的是,即使调用了$ .getJSON()方法的回调函数,在回调函数有机会设置requestOK变量之前,我也会收到消息“请求失败”。我认为这是因为代码并行运行。有没有办法处理这种情况?我考虑过链接或某种方式等待AJAX​​请求,包括其回调函数。但是如何?有谁知道这是怎么做到的吗? 问题答案: 您将需要使用较低级别的

  • 我正在使用此代码从网络加载图像。 我同时发出多个请求,因此出现错误,但该文件实际上存在于服务器上。 因此,我想问,如果glide失败,我如何重试glide请求? 我研究了这个讨论,如果Glide失败,如何重试图像加载?但这没有帮助。 错误日志 类com。邦普泰克。滑行负载发动机GlideException:加载资源失败原因1:java。木卫一。FileNotFoundException(无内容提供

  • 我正在使用MathJax在浏览器中呈现mathml标记。我使用TeX-AMS-MML_SVG配置在Chrome上运行良好,但在IE8中不起作用。 如果我切换到TeX-AMS-MML_HTMLorMML,它在所有浏览器中都能正常工作。不过,SVG渲染看起来要好得多,所以在可能的情况下,我希望这是首选。 MathJax是否内置了支持这一点的功能?它似乎可以从MML回退到HTML,但不能从SVG回退到H