源于网络
在markdown写技术文章时,经常会用到latex渲染公式,markdwon集成了mathjax用于渲染公式。
默认next主题是集成公式的,只需要在每篇博客前面加上mathjax: true即可。
Hexo默认使用hexo-renderer-marked引擎渲染网页,该引擎会把一些特殊的markdown符号转换为相应的html标签,比如在markdown语法中,下划线_代表斜体,会被渲染引擎处理为标签。
因为类Latex格式书写的数学公式下划线 _ 表示下标,有特殊的含义,如果被强制转换为标签,那么MathJax引擎在渲染数学公式的时候就会出错。例如,xi在开始被渲染的时候,处理为$xi$,这样MathJax引擎就认为该公式有语法错误,因为不会渲染。
解决办法
更换markdown公式渲染引擎1
2npm 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 | // escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/, |
修改第20行:1
2// em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
重启hexo
1 | hexo clean |