在网页上写数学公式怎么少得了MathJax. 然而这玩意因为功能复杂所以比showdown之类的库要难配置一些.

首先从Github上把它clone下来. 然后发现这玩意真的好大. 后来发现是有一堆迷之png.

别人家的cdn的速度从我这来看都不怎么样, 所以还是只能扔到自已的server上.

最简单的用法就是在html head里加一行

<script src='xxx/MathJax.js?config=default'></script>

然后它就会用默认配置在网页加载的时候把那些玩意给转换了.

这里有一个config的文件可以选择. 在unpacked里的default.js里有很详细的说明. (虽然是英文的)

看上去能用了? 然后问题来了. 我的前端是先加载网页框架, 再用js去加载内容, 然而内容加载出来的时候MathJax已经把活干完歇菜了. 显然应该有什么控制单元能随时更新某个element. google了一下发现MathJax有个子类控制单元叫Hub. Hub有个方法叫Typeset, 能重新检查页面.

于是这么写?

$.post("xxx", {xx}, function(res) {
	$("#xxx").html(res.content);
	MathJax.Hub.Typeset();
});

然而这样的话是不是我每加载一个listitem或者comment都要重新扫一遍整个页面啊? 卡死啦.

于是加了个triggerCount. 麻烦死了.

然后想想觉得没对, 肯定能直接改某个元素啊. 仔细看看document.

Typeset([element[, callback]])

对啊ovo可以直接指定element. 而且还各种类型都资瓷. 在类型这种问题上js比c高到不知道哪里去了.

于是代码写成

$.post("xxx", {xx}, functoin(res) {
	$("#xxx").html(res.content);
	MathJax.Hub.Typeset(getMyId());
});

搞定啦.

然后config里还可以指定是用$$还是$之类的玩意.

然后似乎MathJax还自带Async一类的玩意?

感觉很赞.