数学公式

使用hexo搭建在github上的博客,编写复杂的数学公式可以用mathjax引擎


HOW_TO_DO

可手动在markdown文本中添加MathJax引擎:<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

  • 公式语法 : Latex
  • 行间公式 : $$公式$$
  • 行内公式 : $公式$ or \\(公式\\) (\符号在markdown中为转义字符故须使用\\符号)

也可使用hexo-math插件

自动部署MathJax,可安装自动部署的hexo插件
命令(已安装node.js、npm和hexo):
npm install hexo-math –save
hexo math install
参考:http://blog.csdn.net/emptyset110/article/details/50123231

PROBLEM

实际使用中,由于markdown中的特殊符号与latex中的符号有冲突,hexo默认的markdown引擎渲染方式会造成一些转义问题:

  • _符号在markdown中是斜体,在latex中表示下标
  • \\符号在markdown中被转义为\,影响latex中许多公式(如矩阵等)的渲染
  • *符号在markdown中表示斜体,而在latex中可能只是普通符号
  • …..等等

出现冲突的原因:hexo先用marked.js渲染(解析markdown文本),然后再交给MathJax渲染
一些符号,如_符号代表斜体,会被处理为<em>标签,比如x_i在开始被渲染的时候,处理为x<em>i</em>,此时mathjax就无法渲染成下标了。
很多符号都有这个问题。
参考:https://segmentfault.com/a/1190000007261752

解决方案(使marked.js与mathjax兼容)

修改hexo渲染方式的源码marked.js

取消转义符号\\,\{,\}

  • 在node_modules\marked\lib\marked.js中
  • escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
  • 修改成 escape: /^\\([`*\[\]()# +\-.!_>])/,

取消_符号作为斜体转义:

  • 在node_modules\marked\lib\marked.js中
  • em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
  • 修改成 em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

其他解决方案

代码块保护

  • 将公式放入代码块中,即用符号\包围起来;会被markdwon加上标签<code></code>
    • MathJax处理文档时会跳过这部分
    • 可以用JavaScript处理所有<code>标签,将其中的数学公式剥离并用MathJax处理
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
$(document).ready(function(){
$("code").map(function(){
match = /^\$(.*)\$$/.exec($(this).html());
if (match){
//$(this).after("<span class=mathjax_inline>" + match + "</span>");
//$(this).hide();
$(this).replaceWith("<span class=hpl_mathjax_inline>" + $(this).html() + "</span>");
MathJax.Hub.Queue(["Typeset",MathJax.Hub,$(this).get(0)]);
}
});
});
</script>

更换hexo的markdown引擎

从根本上解决冲突的方法。

hexo-renderer-pandoc 未能正常工作,原因未明
hexo-renderer-kramed 使用中,也无法正常渲染latex公式…

问题尚未解决,需要更多探索…(http://2wildkids.com/2016/10/06/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86Hexo%E5%92%8CMathJax%E7%9A%84%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98/#小结)


其他(插入数学公式的)方法

①使用google chart服务器
公式为latex语法,图片格式,复杂latex公式可能无法解析
<img src="http://chart.googleapis.com/chart?cht=tx&chl= 在此插入Latex公式" style="border:none;">
②使用forkosh服务器
<img src="http://www.forkosh.com/mathtex.cgi? 在此处插入Latex公式">
参考:http://blog.csdn.net/xiahouzuoxin/article/details/26478179