前言
最近把個人博客換到Hexo的時候,還是發(fā)現(xiàn)和 Mathjax 的語法不是很兼容,其實我比較喜歡寫latex,所以希望寫Markdown的時候語法盡量貼近latex,這樣二者轉(zhuǎn)換的時候就不需要那么多修改,而且最近可能會嘗試做一個符合自己需求和 latex 和 Markdown 的轉(zhuǎn)化器,當(dāng)然使用 pandoc 也是一個選擇。
在網(wǎng)上查了比較多的資料,無非前篇一律,而且有些失去時效性,Hexo默認(rèn)的Markdown 渲染器是 hexo-renderer-marked,其中的正則表達(dá)式的匹配已經(jīng)更新,所以可能以前的方法沒那么好用了,本文就是基于這個目的,加上自己的實踐。
也是基于修改 marked.js 中匹配下劃線_等的正則表達(dá)式來修改語法,使得 Mathjax 能夠正確渲染
引入 Mathjax
Use hexo-math plugins for convenience.
步驟:
-
npm install hexo-math --save下載。 - 對
hexo-math1.0.6 或者以上的版本,已經(jīng)不需要hexo math install。 - 在
_config.yml中添加 Mathjax 的配置:
# MathJax Support
math:
engine: 'mathjax'
mathjax:
src: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js
config:
# MathJax config
tex2jax:
inlineMath: [ ['$','$'], ["\\(","\\)"] ]
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
processEscapes: true
TeX:
equationNumbers:
autoNumber: "AMS"
extensions: ["tex2jax.js"]
jax: ["input/TeX", "output/HTML-CSS"]
- 在所有需要啟用 Mathjax 的 post 的 header 處添加:
mathjax: true
修改 marked.js 文件
修改 marked.js 文件的目的是:
- 在公式中使用以下三個符號:
\{,\},\\,原來會將這三個符號進行轉(zhuǎn)義,失去大括號、換行等效果。 - 在公式中使用
_,兩個_會被解析成斜體。
在marked.js 中修改原有的escape,em,br的正則表達(dá)式:
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]^_`|~])/,
em: /^\*([^\s*<\[])\*(?!\*)|^\*([^\s<"][\s\S]*[?^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
br: /^( {2,})\n(?!\s*$)/,
最后使用 hexo clean 清下cache,hexo s重啟服務(wù)器,本地中上述問題就可以正常顯示了。
注意:
-
測試的
hexo-renderer-marked的版本是0.7.0,暫時沒有發(fā)現(xiàn)公式的其他渲染問題。 - 修改后不能使用的原有的markdown的語法:
-
不能使用兩個
_轉(zhuǎn)化斜體,可以使用兩個*替代:斜體。 -
不能使用
\\進行換行,行末兩個空格,或者用空行都可以。
-
不能使用兩個
后言
暫時沒發(fā)現(xiàn)問題。。。