在使用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}
$$
以下是几个三角恒等式:
vim插入模板
上述方法插入公式的时候总是要时间去敲很多没有意义的html
标签,我们可以利用vim
的vim-snipmate插件来做几个
模板加速我们的程序编写。
我写了两个snippets
来插入公式:
snippet $
$${1:Inline}$${0}
snippet $$
$$ ${1:Displayed}
$$
${0}
把这个mkd.snippets
文件放到~/.vim/snippets/
目录下面就可以生效,然后我们在编
辑MarkDown
文件的时候就可以通过$<Tab>
来触发一个行间公式模板,通过$$<Tab>
来 生成方程组模板。