是否可以在squarespace上使用MathJax?

时间:2014-09-15 00:42:36

标签: javascript html mathjax squarespace

我目前正在尝试使用squarespace创建一个新网站,我想使用MathJax排版数学。这与SE用于在physics.SE上呈现数学的引擎相同。

使用MathJax的标准方法是将某个代码段放在页面的标题中,您希望按照概述here使用MathJax。我试图通过使用“代码注入”功能在squarespace中执行此操作,该功能允许将所需代码放入方形空间站点上所有页面的标题中,但数学似乎不会呈现。

This person声称已经使我上面提到的程序工作,但是在他建议将数学公式输入HTML代码块之后,MathJax似乎没有工作。以下是代码示例。

JavaScript的:

<script type="text/javascript"
   src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

HTML:

When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$

更新。似乎MathJax确实使用上面列出的程序(即如果您将其输入到html代码块中)正确呈现,但仅限于您将该网站视为访问者,而不是在您登录到您的方空间帐户时。

2 个答案:

答案 0 :(得分:4)

我发现使用协议不可知:

<script type="text/javascript"
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

既可以嵌入HTML代码块,也可以作为注入代码。

Squarespace动态生成一些页面,因此在MathJax第一次看到页面后可能需要排版页面。在动态加载的内容中插入以下脚本会让MathJax在下一次机会时再次排版页面。

<script> 
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>

答案 1 :(得分:1)

由于竞争条件,上述答案对我不起作用。 Squarespace渲染Markdown块的方法是在运行时处理它们并在运行时将输出HTML插入到DOM中。如果在我们调用MathJax API来排版页面后发生这种情况,新插入的元素将显示原始LaTeX而不是排版输出。

为了解决这个问题,我将其放在页脚中:

<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

<script>
document.addEventListener("DOMNodeInserted", function(event){
  var element=event.target;
  MathJax.Hub.Queue(["Typeset",MathJax.Hub,element.parent]);
});

MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>

请注意,如果您使用此代码,则应非常小心,不要将LaTeX包装在HTML元素中的Markdown块中,以避免无限循环。

更新:由于MathJax CDN已关闭(并允许Markdown块中的LaTeX解决我在上面提到的问题),我使用的当前代码是:

<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<script>
document.addEventListener("DOMNodeInserted", function(event){
  var element=event.target;
  if (element.tagName.toLowerCase()!= 'script') {
    MathJax.Hub.Queue(["Typeset",MathJax.Hub,element.parent]);
  }
});

MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>