[转]如何在Hexo中支持Mathjax

在 hexo 中,你会发现我们不能用Latex语法来书写数学公式,这对于书写学术博客来说是很大的不便,因为我们会经常碰到很多的数学公式推导,但是我们可以通过安装第三方库来解决这一问题。

第一步: 使用Kramed代替 Marked

hexo默认的渲染引擎是marked,但是marked不支持mathjaxkramed是在marked的基础上进行修改。我们在工程目录下执行以下命令来安装kramed.

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

然后,更改/node_modules/hexo-renderer-kramed/lib/renderer.js,更改:

1
2
3
4
5
// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}

为:

1
2
3
4
// Change inline math rule
function formatText(text) {
return text;
}

第二步: 停止使用 hexo-math

首先,如果你已经安装hexo-math, 请卸载它:

1
npm uninstall hexo-math --save

然后安装 hexo-renderer-mathjax 包:

1
npm install hexo-renderer-mathjax --save

第三步: 更新 Mathjax 的 CDN 链接

首先,打开/node_modules/hexo-renderer-mathjax/mathjax.html

然后,把<script>更改为:

1
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>

第四步: 更改默认转义规则

因为 hexo 默认的转义规则会将一些字符进行转义,比如 _ 转为<em>, 所以我们需要对默认的规则进行修改.
首先, 打开/node_modules/kramed/lib/rules/inline.js

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

更改为:

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

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

更改为:

1
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

第五步: 开启mathjax

在主题_config.yml中开启Mathjax, 找到mathjax字段添加如下代码(笔者亲自验证,有些博客不需要设置):

1
2
mathjax:
enable: true

这一步可选,在博客中开启Mathjax, 添加以下内容:

1
2
3
4
5
6
---
title: Testing Mathjax with Hexo
category: Uncategorized
date: 2017/05/03
mathjax: true
---

通过以上步骤,我们就可以在hexo中使用Mathjax来书写数学公式。

转载自 https://blog.csdn.net/u014630987/article/details/78670258

分享到