问题
用markdown写博客,mathjax解析数学公式,二者对于一些符号会发生冲突,到时公式无法正确解析:
_
的转义,在markdown中,_
是斜体,但是在latex中,是下标测意思,会出现冲突\\
的换行,在markdown中,\\
会被转义为\
,这样也会影响影响mathjax对公式中的\\
进行渲染*
的转义,在markdown中,*
是加粗
原因
hexo默认使用marked.js
去解析我们写的markdown,比如一些符号,_
代表斜体,会被处理为<em>
标签,
比如x_i
在开始被渲染的时候,处理为x<em>i</em>
,这个时候mathjax就无法渲染成下标了。
很多符号都有这个问题,比如粗体*
,也是无法在mathjax渲染出来的,好在有替代的乘法等,包括\
同理。
解决方法
更换Hexo的markdown渲染引擎
hexo-renderer-kramed引擎是在默认的渲染引擎hexo-renderer-marked的基础上修改了一些bug,两者比较接近,也比较轻量级。
npm uninstall hexo-renderer-marked --savenpm install hexo-renderer-kramed --save修改Hexo渲染源码
找到blog/node_modules\kramed\lib\rules\inline.js
文件
- 修改
\
转义
|
修改
_
转义em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,改为:em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,重新启动hexo(先clean再generate),问题完美解决。哦,如果不幸还没解决的话,看看是不是还需要在使用的主题中配置mathjax开关。