1. 程式人生 > >如何在 hexo 中支援 Mathjax?

如何在 hexo 中支援 Mathjax?

在 hexo 中,你會發現我們不能用 Latex 語法來書寫數學公式,這對於書寫學術部落格來說是很大的不便,因為我們會經常碰到很多的數學公式推導,但是我們可以通過安裝第三方庫來解決這一問題。

第一步: 使用Kramed代替 Marked

hexo 預設的渲染引擎是 marked,但是 marked 不支援 mathjaxkramed 是在 marked 的基礎上進行修改。我們在工程目錄下執行以下命令來安裝 kramed.

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

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

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

為:

// Change inline math rule
function formatText(text) {
    return text;
}

第二步: 停止使用 hexo-math

首先,如果你已經安裝 hexo-math, 請解除安裝它:

npm uninstall hexo-math --save
npm install hexo-renderer-mathjax --save

第三步: 更新 Mathjax 的 CDN 連結

首先,開啟/node_modules/hexo-renderer-mathjax/mathjax.html

然後,把<script>更改為:

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

第四步: 更改預設轉義規則

因為 hexo 預設的轉義規則會將一些字元進行轉義,比如 _ 轉為 <em>, 所以我們需要對預設的規則進行修改.
首先, 開啟

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

更改為:

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

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

更改為:

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

第五步: 開啟mathjax

在主題 _config.yml 中開啟 Mathjax, 找到 mathjax 欄位新增如下程式碼:

mathjax:
    enable: true

這一步可選,在部落格中開啟 Mathjax,, 新增以下內容:

---
title: Testing Mathjax with Hexo
category: Uncategorized
date: 2017/05/03
mathjax: true
---

通過以上步驟,我們就可以在 hexo 中使用 Mathjax 來書寫數學公式。