在 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$$