问题

Hexo 在使用 Mathjax 渲染数学公式的时候,由于 Markdown 语法与 Mathjax 语法冲突的问题,可能会导致使用到_, \ 符号的公式渲染出现错误。

解决方法

有多种解决该问题的方法,但是不同的方法都有各自的优缺点,根据自己的需要选择合适的方法即可。

  1. 修改源码

    优点:部署简单,渲染的兼容性最好

    缺点:修改源码可能引入额外的bug,不利于自动化部署

  2. 使用pandoc渲染引擎

    优点:操作简单,可用于自动化部署

    缺点:需要安装pandoc, 引入额外的开销,博客的部分格式需要注意

修改源码

更换kramed渲染引擎

hexo-renderer-kramed渲染引擎是基于hexo-renderer-marked引擎修改的,该引擎修复了一些marked引擎存在的bug,但是仍然无法完美的渲染数学公式。

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

修改kramed引擎代码

到博客根目录下,找到node_modules/kramed/lib/rules/inline.js文件,把第11行的escape值做出以下修改:

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

在把第20行的em值做出相应的修改:

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

在配置文件中配置插件

在根目录下找到_config.yml文件,粘贴下列内容到里面:

1
2
3
4
5
6
7
8
9
## Markdown Katex
kramed:
gfm: true
pedantic: false
sanitize: false
tables: true
breaks: true
smartLists: true
smartypants: true

更换pandoc作为渲染引擎

安装pandoc

不同的操作系统,在pandoc官网提供了不同的安装包,建议下载v2.0以上的版本进行安装。下面以ubuntu64位为例:

下载链接:https://github.com/jgm/pandoc/releases/download/2.10/pandoc-2.10-1-amd64.deb

下载完毕后在终端中输入以下命令安装pandoc

1
sudo dpkg -i pandoc*

安装完毕后,可以测试pandoc是否运行正常

1
pandoc --version

更换渲染引擎

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

如果已经安装了hexo-renderer-kramed,建议将其也同时卸载,只保留hexo-renderer-pandoc

自动化部署

Github Actions中也可以利用pandoc作为渲染引擎,在main.yml文件中加入以下代码即可:

1
2
3
4
5
6
7
8
9
10
steps:
- name: 安装pandoc
run: |
wget https://github.com/jgm/pandoc/releases/download/2.7/pandoc-2.7-1-amd64.deb
sudo dpkg -i ./pandoc-2.7-1-amd64.deb

- name: 安裝 Hexo CI
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g && npm uninstall hexo-renderer--marked --save && npm install hexo-renderer-pandoc --save

完整的main.yml配置可以查看main.yml

参考