Life in a Nutshell

hexo数学公式

在使用Hexo写博客的时候无法插入数学公 式,通过调研发现MathJax可以很好的在网页里 面显示数学公式,并且能够支持很多浏览器,下面分步骤描述生成公式的方法。

修改主题

MathJax的官方文档说只 要在每个页面的head标签里面插入下面的javascript代码:

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

接下来的步骤就是要把这个代码加入所有的文章页面里面,这里参考 greyshade中对这段代码的处理方式,在主题目录themes/light/layout/_partial/下 新建一个文件mathjax.ejs,内容如下:

<!-- mathjax config similar to math.stackexchange -->

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      processEscapes: true
    }
  });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>

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

然后在themes/light/layout/_partial/目录下的head.ejs里面添加以下几行:

<% if(theme.mathjax) {%>
    <%- partial('mathjax')%>
<% } %>

这几行的意思是如果在主题的_config.xml里面把mathjax变量设置成true那么就把 mathjax.ejs包含进来,所以还需要在themes/_config.xml里面添加:

mathjax: true

配置完之后生成的网页里面都包含有mathjax需要的一段script

生成公式

有些MarkDown渲染器本来支持,例如 kramdown。但是这个是Ruby 写的,Hexo无法支持,Hexo官方的MarkDown渲染器也无法对公式进行处理,现在 还可以采用hexo pandoc render 来进行渲染

行间公式

要产生行间公式就得用下面的代码:

$E=mc^2$

现在举一个行间公式的例子:

爱因斯坦提出了质能方程:$E=mc^2$。他是一个伟大的物理学家。

爱因斯坦提出了质能方程:\(E=mc^2\)。他是一个伟大的 物理学家。

方程组

我们可以用下面的一段代码来产生一个独立的方程组,由于一般Markdown\\需要转义 ,所以换行我们可以使用\cr

以下是几个三角恒等式:
$$
\begin{align}
\sin \left(x+y\right)=\sin x \cos y + \cos x \sin y\cr
\cos \left(x+y\right)=\cos x \cos y - \sin x \sin y
\end{align}
$$

以下是几个三角恒等式:

$$ \begin{align} \sin \left(x+y\right)=\sin x \cos y + \cos x \sin y\cr \cos \left(x+y\right)=\cos x \cos y - \sin x \sin y \end{align} $$

vim插入模板

上述方法插入公式的时候总是要时间去敲很多没有意义的html标签,我们可以利用vimvim-snipmate插件来做几个 模板加速我们的程序编写。 我写了两个snippets来插入公式:

snippet $
    $${1:Inline}$${0}

snippet $$
    $$  ${1:Displayed}
    $$  
    ${0}

把这个mkd.snippets文件放到~/.vim/snippets/目录下面就可以生效,然后我们在编 辑MarkDown文件的时候就可以通过$<Tab>来触发一个行间公式模板,通过$$<Tab>来 生成方程组模板。

Comments