前言
最近在学习深度学习,总是需要在博客中添加一些公式,就选择使用LaTex来添加,结果发现使用hexo默认的hexo-renderer-marked解释器问题很多,还没有办法修改(网上没找到),索性更换一个解释器,记录一下。
选择解释器
选择 hexo-renderer-kramed,原因无他,只是找到了一篇通过修改 hexo-renderer-kramed使hexo对公式的支持达到不错效果的文章,照葫芦画瓢抄起来~
参考:https://blog.csdn.net/weixin_44441126/article/details/119745642
卸载、安装
npm uninstall hexo-renderer-marked --save
卸载默认解释器npm install hexo-renderer-kramed --save
安装新的~
解决问题
问题1:下划线_被转义为斜体而非LaTeX下标
如图:
Markdown本身的语法是支持*和_都被转义为斜体的,所以我们需要取消掉kramed对_的转义。
打开本地hexo文件夹下的/node_modules/kramed/lib/rules/inline.js,找到第20行如下代码:em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
把正则中对下划线匹配的部分去掉,修改后如下:em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
这样修改以后斜体就只能用*了,不过足够的~
问题2:反斜杠\\被转义为\而非LaTeX换行
如图:
当公式中出现\\表示换行时,会被kramed渲染为\,导致公式显示异常。
找到inline.js中第11行如下代码:1
escape: /^\\([\\`*\[\]()#$+\-.!_>])/,
修改如下:1
escape: /^\\([`*\[\]()#$+\-.!_>])/,`
问题3:公式中花括号无法渲染
如图:
本来我写的代码是:1
\left\{\left(\mathbf{x}_{1}, y_{1}\right), \ldots,\left(\mathbf{x}_{n}, y_{n}\right)\right\}
后来去看了下原文的代码,是:1
\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}
但更换后,左右两个花括号还是不能正常显示,这就很费解了。查了一下Mathjax语法,发现原文代码没有问题,所以总结一下问题就是使用的Markdown渲染引擎无法渲染行内公式中的转义花括号。
这个问题就先搁置一下,解决的话估计需要读一下kramed的源码,由于目前我的JS水平实在太差,等我先学习了语法再来修改这个BUG~(22.06.18)