前言
最近把个人博客换到Hexo的时候,还是发现和 Mathjax 的语法不是很兼容,其实我比较喜欢写latex,所以希望写Markdown的时候语法尽量贴近latex,这样二者转换的时候就不需要那么多修改,而且最近可能会尝试做一个符合自己需求和 latex 和 Markdown 的转化器,当然使用 pandoc
也是一个选择。
在网上查了比较多的资料,无非前篇一律,而且有些失去时效性,Hexo默认的Markdown 渲染器是 hexo-renderer-marked
,其中的正则表达式的匹配已经更新,所以可能以前的方法没那么好用了,本文就是基于这个目的,加上自己的实践。
也是基于修改 marked.js
中匹配下划线_
等的正则表达式来修改语法,使得 Mathjax 能够正确渲染
引入 Mathjax
Use hexo-math plugins for convenience.
步骤:
-
npm install hexo-math --save
下载。 - 对
hexo-math
1.0.6 或者以上的版本,已经不需要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
文件的目的是:
- 在公式中使用以下三个符号:
\{
,\}
,\\
,原来会将这三个符号进行转义,失去大括号、换行等效果。 - 在公式中使用
_
,两个_
会被解析成斜体。
在marked.js
中修改原有的escape
,em
,br
的正则表达式:
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]^_`|~])/,
em: /^\*([^\s*<\[])\*(?!\*)|^\*([^\s<"][\s\S]*[?^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
br: /^( {2,})\n(?!\s*$)/,
最后使用 hexo clean
清下cache,hexo s
重启服务器,本地中上述问题就可以正常显示了。
注意:
-
测试的
hexo-renderer-marked
的版本是0.7.0
,暂时没有发现公式的其他渲染问题。 - 修改后不能使用的原有的markdown的语法:
-
不能使用两个
_
转化斜体,可以使用两个*
替代:斜体。 -
不能使用
\\
进行换行,行末两个空格,或者用空行都可以。
-
不能使用两个
后言
暂时没发现问题。。。