今天重拾网站, 打算把之前写的一些东西放上来, 结果一开始就遇到了给 Hexo 的 markdown 添加数学公式渲染的问题. 最终通过邪道解决了, 在这里记录一下. 并不确定所有步骤都是必要且正确的, 仅供参考.
- 卸载
hexo-renderer-marked
并安装hexo-math
和hexo-renderer-kramed
:1
2
3npm uninstall hexo-renderer-marked --save
npm install hexo-math
npm install hexo-renderer-kramed --save
由于我用的是 next 系列主题, 打开
(博客文件夹)\themes\next\_config.yml
文件, 将其中的1
2
3
4math:
mathjax:
enable: false
mhchem: false修改为
1
2
3
4
5math:
mathjax:
enable: true
per_page: true
cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML由于 markdown 和 tex 语法有部分冲突, 并且我存在在一篇文章里同时使用 _ 和 * 的需求, 所以我选择直接修改将 markdown 转为 html 的配置: 打开
(博客文件夹)\node_modules\kramed\lib\rules\inline.js
文件, 并将1
2
3
4
5
6
7var inline = {
escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
...
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
...
};修改为
1
2
3
4
5
6
7var inline = {
escape: /^\\([`*\[\]()#$+\-.!_>])/,
...
strong: /^___([\s\S]+?)___(?!_)/,
em: /^\b__((?:___|[\s\S])+?)__\b/,
...
};其中
escape
取消了\,{,}
的转义,strong
和em
取消了用*
控制斜/粗体, 并且将_
的控制改为了两个为斜体, 三个为粗体, 五个为粗斜体. 因为数学模式下不会出现超过一个的_
, 因此不会再发生匹配错误. 我知道\b
匹配的就是单词的末端, 但是我不希望类似$_12_$
这样错误的代码会被错误地作为斜体显示出来, 而不是报错. 这导致我以后只能使用这个变种的 markdown 来写文章了, 所以不推荐各位这么做.