hexo测试4——Latex
Latex 公式
行内公式
行内的分式支持\(\frac12\),\(\frac{1}{\sqrt{1-x^2}}\)。
行间公式
注意跨行大括号可能会渲染错误,建议避免序号。
\[ f(x) = x^2 \]
\[ g(x)=\left\{ \begin{aligned} & 1, x<1\\ & x, otherwise \end{aligned} \right. \]
\[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \nu \nabla^2 \mathbf{u}\\ \nabla \cdot \mathbf{u} &= 0\\ \mathbf{u}|_{\partial \Omega} &= \mathbf{u}_b\\ \mathbf{u}|_{t=0} &= \mathbf{u}_0 \end{aligned} \]
Kramed 支持 Latex
选择了 MathJax 而非 Katex,因为后者好像语法不一样还是不全面?无法满足需求。
记录一下做了哪些更改,主要参考这篇博客
第一步,插件替换
更换渲染插件为 kramed,Hexo 默认的渲染引擎是 marked,但 marked 不支持 mathjax,所以需要更换渲染引擎为 hexo-renderer-kramed,主要步骤如下:
1
2npm uninstall hexo-renderer-marked --save # 卸载 marked
npm install hexo-renderer-kramed --save # 安装 kramed在_config.yml 添加如下片段
1
2
3
4
5
6
7
8kramed:
gfm: true
pedantic: false
sanitize: false
tables: true
breaks: true
smartLists: true
smartypants: true停用 hexo-math 并安装 mathjax
1
2npm uninstall hexo-math --save # 卸载 hexo-math
npm install hexo-renderer-mathjax --save # 安装 mathjax在主题的配置文件打开 mathjax 选项,例如_config.butterfly.yml
1
2
3
4# MathJax
mathjax:
enable: true
per_page: true
第二步,直接修改 js 文件
更改
/node_modules/hexo-renderer-kramed/lib/renderer.js
中的片段1
2
3
4
5
6
7
8
9
10
11
12// before
// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}
//after
// Change inline math rule
function formatText(text) {
return text;
}更改默认转义规则
因为 LaTeX 与 markdown 语法有语义冲突,所以 hexo 默认的转义规则会将一些字符进行转义,我们需要对默认的规则进行修改。
打开
\node_modules\kramed\lib\rules\inline.js
,将 escape 和 em 参数更改如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// before
var inline = {
escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
// ...
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
// ...
};
// after
var inline = {
escape: /^\\([`*\[\]()#$+\-.!_>])/,
// ...
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
// ...
};注意,修改转义规则后,
*
仍在 markdown 的转义规则中,所以使用 mathjax 时,代码的*
需写成\*
更新 Mathjax 配置文件
/node_modules/hexo-renderer-mathjax/mathjax.html
最后一行替换为1
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
pandoc 支持 Latex
(首先将上面的配置恢复原状) 最终的渲染还是选择了基于 pandoc
的插件,因为 kramed
太麻烦,并且有很多细节的问题,比如换行和行内公式的星号问题。
1
2
3npm uninstall hexo-renderer-marked --save # 卸载 marked
npm uninstall hexo-renderer-kramed --save # 卸载 kramed
npm install hexo-renderer-pandoc --save # 安装pandoc插件
注意,这需要本地已经安装 pandoc。
使用了一段时间,并没有发现对 latex 的渲染有什么问题,因此使用这个方案。