[TOC]
MathJax 是一款运行在浏览器中的开源的数学符号渲染引擎,使用 MathJax 可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax 可以解析 Latex、MathML 和 ASCIIMathML 的标记语言。MathJax 项目于 2009 年开始,发起人有 American Mathematical Society, Design Science 等,还有众多的支持者,本篇博文主要参考自Mathjax 官方文档、Doswa 的博客、StackExchange 的 MathJax in Markdown 教程、Ryan Zhao 的博客。
网页中使用 Mathjax
注:目前已使用 MathJax 3,相比版本2有些许更新,这里仅展示新版本的使用特性。
使用 CDN 服务器可以安全地使用 Mathjax 。在我的网页中添加一段 Javascript 脚本:
<script type="text/javascript", id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
进一步的配置
在 MathJax 中,默认的 displayed 公式分隔符有 $$...$$
和 \[…\]
,而默认的 inline 公式分隔符为 (…)
,和MathJax 2一样,也可以自定义行内公式的配置。
<script type="text/javascript">
MathJax = {
tex:{
inlineMath: [['$', '$'], ['\\(', '\\)']]
},
svg:{
fontCache: 'global'
}
};
</script>
其它配置可以详见TeX Input Processor Options。
使用 Latex 书写网页公式
基础
\[\begin{array}{lclcl} \textbf{Name} & \textbf{Upper} & \textbf{Tex} & \textbf{Lower} & \textbf{Tex} \\ \mbox{alpha} & A & \mbox{A} & \alpha & \backslash\mbox{alpha} \\ \mbox{beta} & B & \mbox{B} & \beta & \backslash\mbox{beta} \\ \mbox{gamma} & \Gamma & \backslash\mbox{Gamma} & \gamma & \backslash\mbox{gamma} \\ \mbox{delta} & \Delta & \backslash\mbox{Delta} & \delta & \backslash\mbox{delta} \\ \mbox{epsilon} & E & \mbox{E} & \epsilon & \backslash\mbox{epsilon} \\ \mbox{zeta} & Z & \mbox{Z} & \zeta & \backslash\mbox{zeta} \\ \mbox{eta} & H & \mbox{H} & \eta & \backslash\mbox{eta} \\ \mbox{theta} & \Theta & \backslash\mbox{Theta} & \theta & \backslash\mbox{theta} \\ \mbox{iota} & I & \mbox{I} & \iota & \backslash\mbox{iota} \\ \mbox{kappa} & K & \mbox{K} & \kappa & \backslash\mbox{kappa} \\ \mbox{lambda} & \Lambda & \backslash\mbox{Lambda} & \lambda & \backslash\mbox{lambda} \\ \mbox{mu} & M & \mbox{M} & \mu & \backslash\mbox{mu} \\ \mbox{nu} & N & \mbox{N} & \nu & \backslash\mbox{nu} \\ \mbox{xi} & \Xi & \backslash\mbox{Xi} & \xi & \backslash\mbox{xi} \\ \mbox{omicron} & O & \mbox{O} & \omicron & \backslash\mbox{omicron} \\ \mbox{pi} & \Pi & \backslash\mbox{Pi} & \pi & \backslash\mbox{pi} \\ \mbox{rho} & P & \mbox{P} & \rho & \backslash\mbox{rho} \\ \mbox{sigma} & \Sigma & \backslash\mbox{Sigma} & \sigma & \backslash\mbox{sigma} \\ \mbox{tau} & T & \mbox{T} & \tau & \backslash\mbox{tau} \\ \mbox{upsilon} & \Upsilon & \backslash\mbox{Upsilon} & \upsilon & \backslash\mbox{upsilon} \\ \mbox{phi} & \Phi & \backslash\mbox{Phi} & \phi & \backslash\mbox{phi} \\ \mbox{chi} & X & \mbox{X} & \chi & \backslash\mbox{chi} \\ \mbox{psi} & \Psi & \backslash\mbox{Psi} & \psi & \backslash\mbox{psi} \\ \mbox{omega} & \Omega & \backslash\mbox{Omega} & \omega & \backslash\mbox{omega} \\ \end{array}\]括号
- 小括号与方括号:使用原始的
( )
,[ ]
即可,如(2+3)[4+4]
:$(2+3)[4+4]$ - 大括号:时由于大括号
{}
被用来分组,因此需要使用\{
和\}
表示大括号,也可以使用\lbrace
和\rbrace
来表示。如\{a*b\}
: $a∗b$,\lbrace a*b \rbrace
:$\lbrace a*b \rbrace$ 尖括号:使用\langle
和\rangle
表示左尖括号和右尖括号。如\langle x \rangle
:$\langle x \rangle$ - 上取整:使用
\lceil
和\rceil
表示。如\lceil x \rceil
:$\lceil x \rceil$ - 下取整:使用
\lfloor
和\rfloor
表示。如\lfloor x \rfloor
:$\lfloor x \rfloor$ - 不可见括号:使用
.
表示
需要注意的是,原始符号并不会随着公式大小缩放。如,(\frac12)
:$(\frac12)$。可以使用 \left(…\right)
来自适应的调整括号大小。如下,
可以看到,公式1.2中的括号是经过缩放的。
字体
- 使用
\mathbb
或\Bbb
显示黑板粗体字,此字体经常用来表示代表实数、整数、有理数、复数的大写字母。如,$\mathbb{CHNQRZ}$ - 使用
\mathbf
显示黑体字,如,$\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathbf{abcdefghijklmnopqrstuvwxyz}$ - 使用
\mathtt
显示打印机字体,如,$\mathtt{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathtt{abcdefghijklmnopqrstuvwxyz}$ - 使用
\mathrm
显示罗马字体,如,$\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathrm{abcdefghijklmnopqrstuvwxyz}$ - 使用
\mathscr
显示手写体,如,$\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ - 使用
\mathfrak
显示 Fraktur 字母(一种德国字体),如$\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathfrak{abcdefghijklmnopqrstuvwxyz}$
特殊函数与符号
- 常见的三角函数。如 $\sin x,\arctan x,\lim_{1 \to \infty}$。
- 比较运算符:
\lt
\gt
\le
\ge
\neq
:$\lt \gt \le \ge \neq$。可以在这些运算符前面加上\not
,如\not\lt
:$\not\lt$。 \times
\div
\pm
\mp
表示:$\times \div \pm \mp$,\cdot
表示居中的点,x \cdot y
: $x \cdot y$。- 集合关系与运算:
\cup
\cap
\setminus
\subset
\subseteq
\subsetneq
\supset
\in
\notin
\emptyset
\varnothing
:$\cup \cap \setminus \subset \subseteq \subsetneq \supset \in \notin \emptyset \varnothing$。 - 表示排列使用
{n+1 \choose 2k}
或\binom{n+1}{2k}
,$\binom{n+1}{2k}$。 - 箭头:
\to
\rightarrow
\leftarrow
\Rightarrow
\Leftarrow
\mapsto
: $\to \rightarrow \leftarrow \Rightarrow \Leftarrow \mapsto$。 - 逻辑运算符:
\land
\lor
\lnot
\forall
\exists
\top
\bot
\vdash
\vDash
:$\land \lor \lnot \forall \exists \top \bot \vdash \vDash$。 \star
\ast
\oplus
\circ
\bullet
:$\star \ast \oplus \circ \bullet$。\approx
\sim
\cong
\equiv
\prec
:$\approx \sim \cong \equiv \prec$。\infty
\aleph_0
$\infty \aleph_0$\nabla
\partial
$\nabla \partial$\Im
\Re
$\Im \Re$。- 模运算
\pmode
, 如,a\equiv b\pmod n
:$a\equiv b\pmod n$。 \ldots
与\cdots
,其区别是 dots 的位置不同,lots 位置稍低,codes 位置居中。$a1+a2+\dots+an$,$a1,a2,\ldots,an$。- 一些希腊字母具有变体形式,如
\epsilon \varepsilon
: $\epsilon \varepsilon$,\phi \varphi
: $\phi \varphi$。
使用 Detexify,你可以在网页上画出符号,Detoxify 会给出相似的符号及其代码。这是一个方便的功能,但是不能保证它给出的符号可以在 MathJax 中使用,你可以参考 supported-latex-commands 确定 MathJax 是否支持此符号。
顶部符号
对于单字符,\hat
:$\hat{x}$,多字符可以使用 \widehat
,$\widehat{xy}$。类似的还有 \hat
, \overline
, \vec
, \overrightarrow
, \dot
, \ddot
: $\hat{x}, \overline{xyz}, \vec{a}, \vec{x}, \overrightarrow{xyz}, \dot{x}, \ddot{x}$。
表格
使用 $$\begin{array}{列样式}…\end{array}$$
这样的形式来创建表格,列样式可以是 clr
表示居中,左,右对齐,还可以使用 |
表示一条竖线。表格中各行使用 \\
分隔,各列使用 &
分隔。使用 \hline
在本行前加入一条直线。 例如,
\(\begin{array}{c|lcr} n & \text{Left} & \text{Center} & \text{Right} \\ \hline 1 & 0.24 & 1 & 125 \\ 2 & -1 & 189 & -8 \\ 3 & -20 & 2000 & 1+10i \\ \end{array}\)
array 环境还可以嵌套使用,比如这样:
\[% outer vertical array of arrays \begin{array}{c} % inner horizontal array of arrays \begin{array}{cc} % inner array of minimum values \begin{array}{c|cccc} \text{min} & 0 & 1 & 2 & 3\\ \hline 0 & 0 & 0 & 0 & 0\\ 1 & 0 & 1 & 1 & 1\\ 2 & 0 & 1 & 2 & 2\\ 3 & 0 & 1 & 2 & 3 \end{array} & % inner array of maximum values \begin{array}{c|cccc} \text{max}&0&1&2&3\\ \hline 0 & 0 & 1 & 2 & 3\\ 1 & 1 & 1 & 2 & 3\\ 2 & 2 & 2 & 2 & 3\\ 3 & 3 & 3 & 3 & 3 \end{array} \end{array} \\ % inner array of delta values \begin{array}{c|cccc} \Delta&0&1&2&3\\ \hline 0 & 0 & 1 & 2 & 3\\ 1 & 1 & 0 & 1 & 2\\ 2 & 2 & 1 & 0 & 1\\ 3 & 3 & 2 & 1 & 0 \end{array} \end{array}\]矩阵
基本用法
使用 $$\begin{matrix}…\end{matrix}$$
这样的形式来表示矩阵,在 \begin
与 \end
之间加入矩阵中的元素即可。矩阵的行之间使用 \\
分隔,列之间使用 &
分隔,例如:
矩阵的括号
如果要对矩阵加括号,可以像上文中提到的一样,使用 \left
与 \right
配合表示括号符号。也可以使用特殊的 matrix。即替换 \begin{matrix}…\end{matrix}
中的 matrix 为 pmatrix
, bmatrix
, Bmatrix
, vmatrix
, Vmatrix
.
可以使用\cdots
$\cdots$ \ddots
$\ddots$ \vdots
$\vdots$ 来省略矩阵中的元素,如:
增广矩阵
增广矩阵需要使用前面的array来实现,如
\[\left[ \begin{array}{cc|c} 1&2&3\\ 4&5&6 \end{array} \right]\]对齐的公式
有时候可能需要一系列的公式中等号对齐,如:
\[\begin{align} \sqrt{37} & = \sqrt{\frac{73^2-1}{12^2}} \\ & = \sqrt{\frac{73^2}{12^2}\cdot\frac{73^2-1}{73^2}} \\ & = \sqrt{\frac{73^2}{12^2}}\sqrt{\frac{73^2-1}{73^2}} \\ & = \frac{73}{12}\sqrt{1 - \frac{1}{73^2}} \\ & \approx \frac{73}{12}\left(1 - \frac{1}{2\cdot73^2}\right) \end{align}\]就是由
\begin{align}
\sqrt{37} & = \sqrt{\frac{73^2-1}{12^2}} \\
& = \sqrt{\frac{73^2}{12^2}\cdot\frac{73^2-1}{73^2}} \\
& = \sqrt{\frac{73^2}{12^2}}\sqrt{\frac{73^2-1}{73^2}} \\
& = \frac{73}{12}\sqrt{1 - \frac{1}{73^2}} \\
& \approx \frac{73}{12}\left(1 - \frac{1}{2\cdot73^2}\right)
\end{align}
构成。
分类的公式
定义函数的时候经常需要分情况给出表达式,可使用 \begin{cases}…\end{cases}
。使用 &
指示需要对齐的位置。如:
上述公式的括号也可以移动到右侧,不过需要使用 array
来实现,如下:
最后,如果想分类之间的垂直间隔变大,可以使用 \\[2ex]
代替 \\
来分隔不同的情况。(3ex
, 4ex
也可以用,1ex
相当于原始距离)。
空间问题
在使用Latex公式时,有一些不会影响公式正确性,但却会使其看上去很槽糕的问题。
不要再在指数或者积分中使用 \frac
在指数或者积分表达式中使用\frac会使表达式看起来不清晰,因此在专业的数学排版中很少被使用。应该使用一个水平的/来代替,效果如下:
\[\begin{array}{cc} \mathrm{Bad} & \mathrm{Better} \\ \hline \\ e^{i\frac{\pi}2} \quad e^{\frac{i\pi}2}& e^{i\pi/2} \\ \int_{-\frac\pi2}^\frac\pi2 \sin x\,dx & \int_{-\pi/2}^{\pi/2}\sin x\,dx \\ \end{array}\]使用 \mid 代替 | 作为分隔符
符号 |
作为分隔符时有排版空间大小的问题,应该使用 \mid
代替。效果如下:
多重积分
对于多重积分,不要使用 \int\int
此类的表达,应该使用 \iint
,\iiint
等特殊形式。效果如下:
此外,在微分前应该使用 \,
来增加些许空间,否则TEX会将微分紧凑地排列在一起。如下:
连分数
书写连分数表达式时,请使用 \cfrac
代替 \frac
或者 \over
, 两者效果对比如下:
和
\[x = a_0 + \frac{1^2}{a_1 + \frac{2^2}{a_2 + \frac{3^2}{a_3 + \frac{4^4}{a_4 + \cdots}}}} \tag {\frac}\]流程图
我们可以使用 \require
命令来调用相应的包,例如这样的代码:
\require{amscd}
\begin{CD}
A @>a>> B\\
@V b V V\# @VV c V\\
C @>>d> D
\end{CD}
会调用 amscd 包来画流程图,而且整个页面只需要在第一次使用前调用一次即可。
\[\require{amscd} \begin{CD} A @>a>> B\\ @V b V V\# @VV c V\\ C @>>d> D \end{CD}\]@>>>
是向右的箭头,
@<<<
是向左的箭头,
@VVV
是向下的箭头,
@AAA
是向上的箭头,
@=
是水平双线,
@|
是竖直双线,
@.
是没有线条。
另一个例子:
\[\begin{CD} A @>>> B @>{\text{very long label}}>> C \\ @. @AAA @| \\ D @= E @<<< F \end{CD}\]方程组
使用 \begin{array} … \end{array}
与 \left{…\right.
配合,表示方程组,如:
同时,还可以使用 \begin{cases}…\end{cases}
表达同样的方程组,如:
对齐方程组中的 =
号,可以使用 \being{aligned} .. \end{aligned}
,如:
如果要对齐 =
号和项,可以使用 \being{array}{列样式} .. \end{array}
,如:
颜色
命名颜色是浏览器相关的,如果浏览器没有定义相关的颜色名称,则相关文本将被渲染为黑色。以下颜色是 HTML4 与 CSS2 标准中定义的一些颜色,其应该被大多数浏览器定义了。
\[\begin{array}{|rc|} \hline \verb+\color{black}{text}+ & \color{black}{text} \\ \verb+\color{gray}{text}+ & \color{gray}{text} \\ \verb+\color{silver}{text}+ & \color{silver}{text} \\ \verb+\color{white}{text}+ & \color{white}{text} \\ \hline \verb+\color{maroon}{text}+ & \color{maroon}{text} \\ \verb+\color{red}{text}+ & \color{red}{text} \\ \verb+\color{yellow}{text}+ & \color{yellow}{text} \\ \verb+\color{lime}{text}+ & \color{lime}{text} \\ \verb+\color{olive}{text}+ & \color{olive}{text} \\ \verb+\color{green}{text}+ & \color{green}{text} \\ \verb+\color{teal}{text}+ & \color{teal}{text} \\ \verb+\color{aqua}{text}+ & \color{aqua}{text} \\ \verb+\color{blue}{text}+ & \color{blue}{text} \\ \verb+\color{navy}{text}+ & \color{navy}{text} \\ \verb+\color{purple}{text}+ & \color{purple}{text} \\ \verb+\color{fuchsia}{text}+ & \color{magenta}{text} \\ \hline \end{array}\]此外,HTML5 与 CSS3 也定义了一些颜色名称,参见。 同时,颜色也可以使用 #rgb
的形式来表示,r、g、b 分别表示代表颜色值得16进制数,如
未完待续!