解决next主题和mathjax下划线冲突问题

源于网络

在markdown写技术文章时,经常会用到latex渲染公式,markdwon集成了mathjax用于渲染公式。
默认next主题是集成公式的,只需要在每篇博客前面加上mathjax: true即可。

Hexo默认使用hexo-renderer-marked引擎渲染网页,该引擎会把一些特殊的markdown符号转换为相应的html标签,比如在markdown语法中,下划线_代表斜体,会被渲染引擎处理为标签。
因为类Latex格式书写的数学公式下划线 _ 表示下标,有特殊的含义,如果被强制转换为标签,那么MathJax引擎在渲染数学公式的时候就会出错。例如,xi在开始被渲染的时候,处理为$xi$,这样MathJax引擎就认为该公式有语法错误,因为不会渲染。

解决办法
更换markdown公式渲染引擎

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

hexo 默认渲染引擎是hexo-renderer-marked, 另一个渲染引擎 hexo-renderer-kramed 在默认引擎上修复了一下bug。

修改语义转义规则
更换引擎后,行间公式确实可以正常渲染了,但行内公式$ $还是有一些问题,接下来到node_modules\kramed\lib\rules\inline.js下,修改第11行

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

修改第20行:

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

重启hexo

1
2
hexo clean 
hexo g