如何在Hexo中使用MathJax

MathJax是一款运行在浏览器中的开源的数学符号渲染引擎,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex(wiki百科使用的)、MathML和ASCIIMathML的标记语言。 MathJax项目于2009年开始,发起人有American Mathematical Society, Design Science等,还有众多的支持者,个人感觉MathJax会成为今后数学符号渲染引擎中的主流,也许现在已经是了。
注:wiki拷贝过来的公式需要做一定的修改,才能正确显示。具体的差异可以通过一下网站生成一个公式的LaTeX代码比较一下!《黄金分割》这篇博客是第一次用MathJax书写数学公式。

一、Math的使用及安装

1、在线手写数学工具生成器

推荐一个在线手写公式转Tex格式的利器:Web Equation
通过手写公式,即可得到公式所对应的Tex格式,非常好用。

2、语法

请注意:当你需要在编辑器中插入数学公式时,可以使用两个美元符 $$ 包裹 TeX 或 LaTeX 格式的数学公式来实现。提交后,问答和文章页会根据需要加载 Mathjax 对数学公式进行渲染。

$a + b^2$  
$x = {-b \pm \sqrt{b^2-4ac} \over 2a}$  
$$\dfrac {a+b} {a}=\dfrac {a} {b}=\phi$$  
$$\Delta_A(\lambda)=\det(\lambda I-A)$$  

显示如下:
\(a + b^2\)
\(x = {-b \pm \sqrt{b^2-4ac} \over 2a}\)
\(\dfrac {a+b} {a}=\dfrac {a} {b}=\phi\)
\(\Delta_A(\lambda)=\det(\lambda I-A)\)

3、安装

npm install hexo-math --save  

安装之后重启hexo server

二、Hexo主题与Math的冲突解决

1、在hexo主题下的文件_config.yml中找到如下语句,修改为true

# ---------------------------------------------------------------  
# Third Party Services Settings  
# ---------------------------------------------------------------  
# MathJax Support  
mathjax:  
  enable: true  
  cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML  

2、如何处理Hexo和MathJax的兼容问题

简单来说,要让你的Hexo支持MathJax渲染公式,你只需要使用两条命令:
To fully support MathJax in your Hexo blog, you can simply use the following commands:

npm uninstall hexo-renderer-marked --save  
npm install hexo-renderer-kramed --save  

第一条命令用于卸载 hexo-renderer-marked(注意,如果你使用了其他的渲染插件,请卸载对应的插件),它是hexo自带的Markdown渲染引擎。
The first command uninstall Hexo’s default Markdown renderer.

第二条命令用于安装 hexo-renderer-kramed 插件,这个渲染插件针对MathJax支持进行了改进。安装完成后,重新生成博客就会惊喜地发现你的公式已经能够正常显示了。
The second command install new Markdown renderer which can support MathJax fully. After installation, you should regenerate your blog to see the changes.

安装完以后,先 hexo clean && hexo g 重新生成静态网页,然后 hexo s 查看,这回公式能正常显示了:

P.S. 其实,这个问题就是因为Markdown渲染和MathJax渲染冲突造成的,除了换别的渲染器,直接修改渲染用的正则表达式也是一种解决思路,但是这个思路有一定风险,如果引起了别的bug而没有及时发现,自己又没有做好备份和记录,就需要浪费很多额外的时间来定位问题。