我平常用Atom来写markdown,而Atom的markdown-preview-enhanced
插件用来实时预览最后显示的情况。这是个特别棒的插件,支持KaTeX
和MathJax
渲染,插件的中文文档在这里
Markdown Preview Enhanced 使用 KaTeX 或者 MathJax 来渲染数学表达式。
KaTeX 拥有比 MathJax 更快的性能,但是它却少了很多 MathJax 拥有的特性。你可以查看 KaTeX supported functions/symbols 来了解 KaTeX 支持那些符号和函数。
Hexo也支持KaTeX
和MathJax
,为了使插件和博客二者同步,你最好将他们的渲染引擎改成同一个。在Hexo
中,使用不同的渲染引擎,要安装或者卸载不同的插件,具体请参考主题的配置文件。
在markdown-preview-enhanced
的设置里,选择渲染引擎的选项是Math Rendering Option
。
MathJax添加扩展
在使用的过程中,我首先遇到的问题是,命令\Omicron
的显示在KaTeX
引擎下的渲染是正常的,而在MathJax
的引擎下渲染是有问题的。我们来看一下MathJax官网的描述
While MathJax includes nearly all of the Plain TeX math macros, and many of the LaTeX macros and environments, not everything is implemented in the core TeX input processor. Some less-used commands are defined in extensions to the TeX processor. MathJax will load some extensions automatically when you first use the commands they implement (for example, the \def and \newcommand macros are implemented in the newcommand.js extension, but MathJax loads this extension itself when you use those macros). Not all extensions are set up to load automatically, however, so you may need to request some extensions explicitly yourself.
大意是说MathJax
包含了很多数学公式,但是有些不常用的数学公式是需要通过扩展来显示的,而\Omicron
命令正好在mediawiki-texvc
扩展之中。
那么如何添加这些扩展呢?一个最简单的方式,是在这个公式之后添加\require{extension}
。
例如,\Omicron \require{mediawiki-texvc}
即可正常显示。
这种方式是"非标准"的,但是它可以防止你必须将扩展加载到所有页面中,即使它们未被使用。
标准的方式是在MathJax
的设置中添加扩展。
markdown-preview-enhanced中添加MathJax扩展
按ctrl+shift+p
打开toogle命令面板,搜索并点击markdown-preview-enhanced:Open Mathjax Config
,这会打开一个.js
文件,只需修改其中的extensions
项,添加你需要的扩展即可。
1 | TeX: { |
下面的操作添加了mediawiki-texvc
扩展
1 | TeX: { |
Hexo的Next主题中添加MathJax扩展
在\themes\next\layout\_third-party\math\
文件夹下,有个mathjax.swig
文件,请找到如下代码
1 | TeX: { |
如果想添加mediawiki-texvc
扩展,我们只需在其中加入一行代码即可,将其改为:
1 | TeX: { |
如果想添加更多扩展,请参考MathJax
官网的说明。
而如果你使用的是KaTeX
引擎,则不需要像MathJax
一样添加扩展。这可能也是KaTeX
速度更快的原因。实际上,在我使用的过程中,插件使用MathJax
引擎渲染实时预览的速度会明显变慢。
使用KaTeX进行渲染时的注意事项
如果你使用KaTeX
进行渲染,那么在你的文档中,$ $
之间不能出现中文字符,甚至出现一个中文的标点符号hexo
都会报警告。比如,下面一句话
对任意
如果你的代码是这样
1 | $对任意x \in \mathbb{R}$ |
那么很抱歉,会报三个warning
,提示你的公式中出现了“对”、“任”、“意”"的unicode
字符。因此你需要把中文字符放在外面:
1 | 对任意$x \in \mathbb{R}$ |
以下是我汇总的常用命令及显示,使用KaTeX
语法。
希腊字母
名称 | 大写 | 命令 | 小写 | 命令 | 斜体 | 命令 |
---|---|---|---|---|---|---|
alpha | A | \alpha | ||||
beta | B | \beta | ||||
gamma | \Gamma | \gamma | \varGamma | |||
delta | \delta | \delta | \varDelta | |||
epsilon | E | \epsilon | ||||
zeta | Z | \zeta | ||||
eta | H | \eta | ||||
theta | \Theta | \theta | \varTheta | |||
iota | I | \iota | ||||
kappa | K | \kappa | ||||
lambda | \Lambda | \lambda | \varLambda | |||
mu | M | \mu | ||||
nu | N | \nu | ||||
xi | \Xi | \xi | \varXi | |||
omicron | \Omicron | \omicron | ||||
pi | \Pi | \pi | \varPi | |||
rho | \rho | \rho | ||||
sigma | \sigma | \sigma | \varSigma | |||
tau | T | \tau | ||||
upsilon | \Upsilon | \upsilon | \varUpsilon | |||
phi | \Phi | \phi | \varPhi | |||
chi | X | \chi | ||||
psi | \Psi | \psi | \varPsi | |||
omega | \Omega | \omega | \varOmega |
上下标
上标与下标分别使用^
和_
,默认情况下,上下标符号仅对下一个字符起作用。如果你想表示,正确的写法不是e^x^2
,你需要将x^2
用大括号{}
包裹起来,即e^{x^2}
。
如果需要将下标放在正下方,需要借助\underset
,如
多行公式等号对齐
1 | $$ |
求和与积分
有些命令,行内公式显示的效果和整行显示的效果稍有不同,例如
前一个是行内公式,后一个是整行显示。
命令 | 显示 |
---|---|
\sum_{i=0}^n |
|
\prod_i^n P_i |
|
\int_{-\infty}^{+\infty} |
|
\underset{\tiny D_{xy}}{\iint} |
|
\underset{\tiny \Omega}{\iiint} |
|
\underset{\tiny L}{\oint} |
|
\underset{\tiny \sigma}{\oiint} |
括号
命令 | 显示 |
---|---|
(a) |
|
[a] |
|
\{a+b\} |
|
\lbrace a+b \rbrace |
|
\langle x \rangle |
|
\lceil x \rceil |
|
\lfloor x \rfloor |
使用\left \lbrace
和\right \rbrace
来自适应的调整括号大小
导数
矩阵
markdown支持的矩阵,格式如下
1 | \begin{bmatrix} |
行之间用\\
分隔
例如,下面的语句
1 | \begin{bmatrix} |
将显示为
公式编号
公式的编号命令如下:
1 | e^{\pi i} + 1 = 0 \tag{1} |
(未完待续)