有时候我们需要在文档中写数学公式,常用的markdown编辑器大多都集成了Mathjax,可以用Latex格式书写数学公式。而基于Hexo的博客中很多主题也集成了对mathjax的支持。但是实际上默认情况下并不能直接编辑和显示数学公式。下面以我所使用的Hexo 6.0为例,详细记录数学公式不能显示的解决办法。
修改next主题配置文件
在next的主题配置文件themes\next\_config.yml
中搜索mathjax
,找到以下这段设置。
1 | # Math Equations Render Support |
设置enable为true,并确认engine为mathjax。
更换hexo的渲染引擎
按照网上的教程,hexo 默认的渲染引擎是 marked,但是 marked 不支持 mathjax。另外 marked 引擎会把一些特殊的 markdown 符号转换为相应的 html 标签,比如在 markdown 语法中,下划线_代表斜体,会被渲染引擎处理为<em>
标签而出错。
因此需要更换渲染引擎,将 marked 卸载,然后安装 kramed。执行以下两条命令:
1 | npm uninstall hexo-renderer-marked --save |
而我刚做到这一步就出错 >_< 报错信息第一行是一个warning:
npm WARN checkPermissions Missing write access to …
后面还有一串ERR。
一番查找后发现,可能是因为在安装时没有使用管理员权限,导致node_modules文件夹没有安装完全,再安装时无法覆盖写入。
解决办法很简单,删除node_modules文件夹,然后以管理员身份运行cmd,执行npm install
即可。
解决语义冲突
更换引擎后行间公式可以正确渲染,但是行内公式还是会有问题。解决办法是,到hexo目录下,找到node_modules\kramed\lib\rules\inline.js,修改第11行的escape,取消对\,{,}的转义。
1 | //escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/, |
另外还有第20行em的修改
1 | //em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, |
现在可以hexo clean
, hexo g
查看效果了!
文章头设置开关
最后,在每次写新的文章时,需要在Front-matter里设置是否启用mathjax.
1 |
|
另外在这里提一下,每次new的文章头格式可以自己设置,比如如果希望默认mathjax是true,可以在hexo目录下的scaffolds\post.md中设置默认格式,在title:
、date:
等后面添加 mathjax: true
即可。
Done~