[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进制数,如
未完待续!