2012年8月10日

利用 MathJax 在博客中写数学公式

终于找到了比较完美的在博客中支持 LaTeX 的方案。wordpress.com 虽然也支持 LaTeX,但是有 2 个缺点:
  1. wordpress.com 是利用 wordpress 的wp latex 插件支持 latex 的,必须使用 \$latex \$ 这样的格式,而不能直接使用 \$ \$ 来输入公式,这使得无法直接利用在其他地方已写好的 tex 源码;
  2. 生成的公式是图片格式的,不支持矢量缩放和拷贝。
今天发现了一个在线生成 LaTeX 的利器:MathaJax,它支持多种数学公式语言,其中也包括 LaTeX,并且生成的公式支持矢量缩放和拷贝(拷贝方法参见这里)。但要在博客上获得 MathJax 的支持,必须要求博客空间提供自定义模板的功能,而大部分比较 popular 的国内免费博客空间,如新浪、网易、百度等都不提供该功能。下面提供两种解决方案:

方案一:墙内免费博客空间博客园支持自定义模板。当你在博客园开通博客后,在博客管理的“设置”页面的“页首Html代码”处拷入下面的代码即可:

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
  inlineMath: [['$','$'], ['\\(','\\)']],
  processEscapes: true
  },
TeX: {
            equationNumbers: {
                autoNumber: ["AMS"],
                useLabelIds: true
            }
        },
        "HTML-CSS": {
            linebreaks: {
                automatic: true
            },
            scale: 85
        },
        SVG: {
            linebreaks: {
                automatic: true
            }
        }
});
</script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
其中的 scale: 85 是指公式大小的缩放比例,你可以根据需要进行调整。这样设置后你不但可以直接像在 LaTeX 中那样写行内公式和行间公式,而且还可以使用 LaTeX 的公式自动编号和引用的功能。不过目前还不支持定理环境。

这里是一个测试页面,可以看到生成的公式还是非常漂亮的。这里是我翻译和稍作改写的阿罗不可能性定理的证明。在 Ubuntu 下的 Chrome 浏览器、Firefox 浏览器和 Windows 下的 Firefox 浏览器下测试均显示正常,但在 IE 浏览器中公式下标会有显示不完整的情况,不知是不是我的个别现象,大家也帮忙测试一下。

方案二:墙外博客空间 www.blogger.com 是 google 提供的博客服务,具有较强的可定制性,开通后在自定义模板的 html 代码中找到 </head>,在这之前填入上面的代码即可。

利用 MathJax 生成数学公式仍然有两个缺点:
  1. 生成公式的速度较慢;
  2. 在 RSS 阅读器中只能显示公式的源码,必须点击文章的原始链接才能看到公式,这个在某种意义上也可以看作是优点,因为方便了代码的重用。
本文中的代码参考了http://zhiqiang.org/blog/it/mathjax-make-mathematics-beautiful.html,特此致谢!关于更多对 MathJax 的定制,请参考 MathJax 的帮助文档。

1 条评论:

  1. 貌似这个设置失效了……

    我最后还是按照你的博客园的那个帖子(http://www.cnblogs.com/ilogic/archive/2012/08/05/latex.html)配置成功的。

    回复删除