MathJax 未定义

MathJax is not defined

通过将 MathJax 推荐的命令粘贴到我网页的 <head> 元素中,我已成功加载和配置 MathJax。 MathJax 在我网页的 <body> 中渲染 LaTex 做得很好。

我的问题是在 <body> 元素的末尾使用 javascript 运行 访问 MathJax 对象。例如,下面的代码 returns undefined 到控制台。这让我感到困惑 - 我在 <head> 元素中的命令不应该创建 MathJax 作为可以在任何地方访问的全局变量吗?

这是我的代码的屏幕截图:

这是 <head> 元素中的相关代码部分:

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\(','\)']]}});
</script>
<script type="text/javascript" async
    src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
</script>

这是 <body> 元素中的相关代码部分:

<h1 class="header">
    If $ax^2+bx+c=0$, then $x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$.
</h1>

<script type="text/javascript" >
    console.log(window.MathJax);
</script>

您正在使用 async attribute 加载 MathJax.js。因此,浏览器在脚本加载之前不会阻止呈现,而是继续处理页面。所以现在你在获取和加载 MathJax.js 与浏览器的解析器获取页面更下方的 script 标记之间进行了一场竞赛。不可避免地,解析器会在 MathJax.js 完成加载之前获胜并执行日志。因此,没有全局 MathJax 对象。

如果您删除 async,那么浏览器将首先执行 MathJax.js,然后再解析剩余的页面,因此 console.log 将提供一些有意义的内容。 (同样,在不支持 async 属性的旧浏览器上,您将得到一个结果。)

但是请注意,MathJax 本身是高度异步的(加载其他组件、配置等),因此您很可能需要 synchronize your code with MathJax's APIs