搭建一个支持LaTEX的hexo博客

What is Hexo?

首先安利一下hexo博客:https://github.com/hexojs/hexo
这是一个运行在nodejs上的支持markdown的博客。在安装完nodejsnpm后你可以这样来安装hexo——

$ npm install hexo-cli -g

以下Quick Start部分摘自官方说明——

安装博客

$ hexo init blog    #这里blog是你文件夹的名字
$ cd blog
$ npm install       #这样会在blog文件夹中生成整个博客程序

开启服务,默认是监听4000端口

hexo server

写一篇新文章

hexo new "Hello World"这样以来它会在你博客目录的./source/_posts下生成一个.md文件,文件名默认是标题,当然可以之后更改的。

其他的博客设置,请参考github上官方文档

利用MathJax来渲染LaTeX数学公式

经过一番google之后,发现有位高手已经写好了一个自动部署MathJax的hexo插件
http://catx.me/2014/03/09/hexo-mathjax-plugin/
安装方式也很简单,在你的博客文件夹下执行——

npm install hexo-math --save
hexo math install

然后在新建的博文中写上一个麦克斯韦方程组查看LaTeX效果——

$$
\begin{eqnarray}
\nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \\
\nabla\cdot\vec{B} &=& 0 \\
\nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \\
\nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right)
\end{eqnarray}
$$

这时如果你会发现出了一些问题,原因是hexo先用marked.js渲染,然后再交给MathJax渲染。在marked.js渲染的时候下划线_是被escape掉并且换成了标签,即斜体字,另外LaTeX中的\\也会被转义成一个\,这样会导致MathJax渲染时不认为它是一个换行符了。

使Marked.js与MathJax共存

因此我提供一个修改marked.js源码的方式来避开这些问题
- 针对下划线的问题,我决定取消_作为斜体转义,因为marked.js中*也是斜体的意思,所以取消掉_的转义并不影响我们使用markdown,只要我们习惯用*作为斜体字标记就行了。
- 针对marked.js与Mathjax对于个别字符二次转义的问题,我们只要不让marked.js去转义\\,\{,\}在MathJax中有特殊用途的字符就行了。
具体修改方式,用编辑器打开marked.js(在./node_modules/marked/lib/中)

Step 1:

  escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,

替换成

  escape: /^\\([`*\[\]()# +\-.!_>])/,

这一步是在原基础上取消了对\\,\{,\}的转义(escape)

Step 2:

  em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

替换成

  em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

这样一来MathJax就能与marked.js共存了。重启一下hexo看一下吧

你可能感兴趣的:(马克部落)