Markdown-数学公式

1. 配置

Hexo 的自带的 Markdown 引擎并不支持 LaTeX 公式。 但是 MathJax 支持,因此首先要 启用 MathJax 才能渲染 LaTeX 公式。如果你已经安装了 NexT theme,开启 MathJax 支持非常容易,在最新版的 NexT 主题的 _config.yml 文件里,找到 MathJax 相关部分,使用以下配置:

1
2
3
4
5
6
7
math:
enable: true
# Default(true) will load mathjax/katex script on demand
# That is it only render those page who has 'mathjax: true' in Front Matter.
# If you set it to false, it will load mathjax/katex srcipt EVERY PAGE.
per_page: false
engine: mathjax

但是由于 LaTeX 中的一些符号在 Markdown 中有特殊含义,例如 两个 _ 在 Markdown 中用来表示斜体(italic),因此两者的配合使用会产生一些问题。

解决方案:

使用 hexo-renderer-kramed 替换 Hexo 默认的渲染器 hexo-renderer-markedhexo-renderer-kramedhexo-renderer-markedFork 修改版,仅针对 MathJax 渲染的语义冲突问题进行了修改,因此可以放心使用。在 Hexo 根目录下执行以下命令替换默认渲染引擎:

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

更换渲染引擎后,整行公式就可以正常显示了,然而行内公式还是会遇到<em>标签语义冲突的问题。在 Markdown 语法中,用$$$$包括起来的内容表示整行公式,用$包括起来的内容表示行内公式。之所以行内公式的渲染依然存在问题,是因为 hexo-renderer-kramed 引擎同样存在语义冲突的问题。在博客根目录下,找到node_modules/kramed/lib/rules/inline.js文件,在inline变量中做出如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var inline = {
// escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/, 第 11 行, 将其修改为
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])+?)\*(?!\*)/, 第 20 行,将其修改为
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*\$\$(?!\$)/,
};

依然可以在 Hexo 中使用*表示斜体,但_表示_斜体_就不会生效了

2. 矩阵

2.1 不带括号的矩阵

1
2
3
4
5
6
7
$$
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix} \tag{1}
$$

效果:

2.2 带括号{}的矩阵

1
2
3
4
5
6
7
8
9
$$
\left\{
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix}
\right\} \tag{2}
$$

效果:

不使用left和right的方法:

1
2
3
4
5
6
7
$$
\begin{Bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{Bmatrix} \tag{5}
$$

效果:

2.3 带括号[]的矩阵

1
2
3
4
5
6
7
8
9
$$
\left[
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix}
\right] \tag{3}
$$

效果:

不使用left和right的方法:

1
2
3
4
5
6
7
$$
\begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix} \tag{4}
$$

效果:

2.4 带省略号的矩阵

1
2
3
4
5
6
7
8
9
10
$$
\left[
\begin{matrix}
1 & 2 & \cdots & 4 \\
7 & 6 & \cdots & 5 \\
\vdots & \vdots & \ddots & \vdots \\
8 & 9 & \cdots & 0 \\
\end{matrix}
\right]
$$

效果:

2.5 行间矩阵

1
2
3
4
5
Test$\bigl(
\begin{smallmatrix}
l&l\\j&z
\end{smallmatrix}
\bigr)$Test

效果:

Test$\bigl(
\begin{smallmatrix}
l&l\\j&z
\end{smallmatrix}
\bigr)$Test

3. 方程组

1
2
3
4
5
\begin{cases}
x+y+z=0 \\
x+2y+3z=0 \\
x+4y+5z=0
\end{cases}

效果:

4. Greek and Hebrew Letters

$\alpha$ \alpha $\beta$ \beta $\gamma$ \gamma $\chi$ \chi $\delta$ \delta $\epsilon$ \epsilon
$\eta$ \eta $\iota$ \iota $\kappa$ \kappa $\lambda$ \lambda $\mu$ \mu $\nu$ \nu
$o$ o $\omega$ \omega $\phi$ \phi $\pi$ \pi $\psi$ \psi $\rho$ \rho
$\sigma$ \sigma $\tau$ \tau $\theta$ \theta $\upsilon$ \upsilon $\xi$ \xi $\zeta$ \zeta
$\digamma$ \digamma $\varepsilon$ \varepsilon $\varkappa$ \varkappa $\varphi$ \varphi $\varpi$ \varpi $\varrho$ \varrho
$\varsigma$ \varsigma $\vartheta$ \vartheta $\Delta$ \Delta $\Gamma$ \Gamma $\Lambda$ \Lambda $\Omega$ \Omega
$\Phi$ \Phi $\Pi$ \Pi $\Psi$ \Psi $\Sigma$ \Sigma $\Theta$ \Theta $\Upsilon$ \Upsilon
$\Xi$ \Xi $\aleph$ \aleph $\beth$ \beth $\daleth$ \daleth $\gimel$ \gimel

5. Binary Operations / Relation Symbols

10. 参考