在 Hexo butterFly 中支持 LaTeX(排版系统)
如果使用 Hexo 作为静态博客的话,自身带的 Marked 并不能很好的展示 LaTeX 公式,所以要做一些操作才能显示 LaTeX 公式的渲染。支持 web LaTeX 公式的渲染 有 MathJax 与 KaTeX 插件。
  KaTeX 优点在于轻量级,而 LaTeX 对数学公式的支持更全面一些。因此,这里主要是配置一下 LaTeX 的支持。可以任意选择一个使用,不过,官方建议使用 KaTeX 渲染。
安装基于 Mathjax 的支持
- 
安装 kramed插件,移除 marked 插件 1 
 2npm 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 | // Change inline math rule | 
- 
安装 hexo-renderer-mathjax 插件: 1 npm install hexo-renderer-mathjax --save 
- 
更新 Mathjax 配置 
 打开/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> 
- 
更改默认转义原则 
 打开/node_modules\kramed\lib\rules\inline.js做如下更改(注意被注释的两行2 与 12 行):1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19var inline = { 
 //escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
 escape: /^\\([`*\[\]()#$+\-.!_>])/,
 autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
 url: noop,
 html: /^<!--[\s\S]*?-->|^<(\w+(?!:\/|[^\w\s@]*@)\b)*?(?:"[^"]*"|'[^']*'|[^'">])*?>([\s\S]*?)?<\/ \1>|^<(\w+(?!:\/|[^\w\s@]*@)\b)(?:"[^"]*"|'[^']*'|[^'">])*?>/,
 link: /^!?\[(inside)\]\(href\)/,
 reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
 nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
 reffn: /^!?\[\^(inside)\]/,
 strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
 //em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
 em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
 code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
 br: /^ {2,}\n(?!\s*$)/,
 del: noop,
 text: /^[\s\S]+?(?=[\\<!\[_*`$]| {2,}\n|$)/,
 math: /^\$\$\s*([\s\S]*?[^\$])\s*\$\$(?!\$)/,
 };
- 
在主题中开启 Mathjax 支持 
 在主题配置文件中打开mathjax:1 
 2
 3
 4# MathJax 
 mathjax:
 enable: true
 per_page: false
如果使用 KaTeX 的话,应当同时禁用掉 KaTeX选项:
| 1 | katex: | 
- 
在需要渲染 LaTeX 的文章中开启 mathjax 支持 
 在文章的 matterFront-matter 中加入mathjax: true
- 
测试 
 LaTeX 需要使用 “$ $ $$”(居中显示) 包裹起来
 例如:1 $\lim_{h \rightarrow 0 } \frac{f(x+h)-f(x)}{h}$$ 将显示为:   
- 
注意事项: 在 Hexo 改变渲染插件后,需要注意特殊字符的用法 
 比如:{#name}就无法渲染,需要改动为:{ #name }
安装基于 Katex 的支持
- 如果你曾配置过 MathJax 的话,需要首先禁用 MathJax,开启 KaTeX:
如果使用 KaTeX 的话,应当同时禁用掉 KaTeX选项:
禁用 MathJax
| 1 | # MathJax | 
开启 KaTeX
| 1 | katex: | 
- 安装 hexo-renderer-markdown-it 插件,如果使用过 MathJax 可能还需要卸载其他 渲染插件:
| 1 | npm un hexo-renderer-marked --save # 如果有安裝這個的話,卸載 | 
由于我这里配置过 MathJax 并安装了 hexo-renderer-mathjax,所以,需要卸载:
| 1 | npm un hexo-renderer-mathjax --save # 如果有安裝這個的話,卸載 | 
- 配置 KaTeX 到配置文件:
 在 hexo 根目录中,找到 _config.yml 中配置:
| 1 | markdown: | 
- 如果 butterfly 配置中, KaTeX 的per_page 为false,则不要忘记在 文章的 matterFront-matter 中加入 mathjax: true
| 1 | katex: true | 
- 测试
 KaTeX 需要使用 “$ $ $$”(居中显示) 包裹起来
- 
例一: 1 \lim_{h \rightarrow 0 } \frac{f(x+h)-f(x)}{h}$ 将显示为: 
- 
例二: 1 $\lim_{h \rightarrow 0 } \frac{f(x+h)-f(x)}{h}$$ 将显示为: 
- 
例三: 1 \sqrt{3x-1}+(1+x)^2$ 
- 
例四: 1 $\sqrt{3x-1}+(1+x)^2$$ 






