Home > Archives > Mathjax 与 Markdown 公式简介

Mathjax 与 Markdown 公式简介

Publish:

[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}\]

括号

  1. 小括号与方括号:使用原始的 ( )[ ] 即可,如 (2+3)[4+4]:$(2+3)[4+4]$
  2. 大括号:时由于大括号 {} 被用来分组,因此需要使用 \{\} 表示大括号,也可以使用 \lbrace\rbrace 来表示。如 \{a*b\}: $a∗b$,\lbrace a*b \rbrace:$\lbrace a*b \rbrace$ 尖括号:使用 \langle\rangle 表示左尖括号和右尖括号。如\langle x \rangle:$\langle x \rangle$
  3. 上取整:使用 \lceil\rceil 表示。如 \lceil x \rceil:$\lceil x \rceil$
  4. 下取整:使用 \lfloor\rfloor 表示。如 \lfloor x \rfloor:$\lfloor x \rfloor$
  5. 不可见括号:使用 . 表示

需要注意的是,原始符号并不会随着公式大小缩放。如,(\frac12):$(\frac12)$。可以使用 \left(…\right) 来自适应的调整括号大小。如下,

\[\{\sum_{i=0}^{n}i^{2} = \frac{(n^2+n)(2n+1)}{6}\} \tag {1.1}\] \[\left\{\sum_{i=0}^{n}i^{2} = \frac{(n^2+n)(2n+1)}{6}\right\} \tag {1.2}\]

可以看到,公式1.2中的括号是经过缩放的。

字体

  1. 使用 \mathbb\Bbb 显示黑板粗体字,此字体经常用来表示代表实数、整数、有理数、复数的大写字母。如,$\mathbb{CHNQRZ}$
  2. 使用 \mathbf 显示黑体字,如,$\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathbf{abcdefghijklmnopqrstuvwxyz}$
  3. 使用 \mathtt 显示打印机字体,如,$\mathtt{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathtt{abcdefghijklmnopqrstuvwxyz}$
  4. 使用 \mathrm 显示罗马字体,如,$\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathrm{abcdefghijklmnopqrstuvwxyz}$
  5. 使用 \mathscr 显示手写体,如,$\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
  6. 使用 \mathfrak 显示 Fraktur 字母(一种德国字体),如$\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$,$\mathfrak{abcdefghijklmnopqrstuvwxyz}$

特殊函数与符号

  1. 常见的三角函数。如 $\sin x,\arctan x,\lim_{1 \to \infty}$。
  2. 比较运算符:\lt \gt \le \ge \neq :$\lt \gt \le \ge \neq$。可以在这些运算符前面加上 \not,如 \not\lt:$\not\lt$。
  3. \times \div \pm \mp 表示:$\times \div \pm \mp$,\cdot 表示居中的点,x \cdot y : $x \cdot y$。
  4. 集合关系与运算:\cup \cap \setminus \subset \subseteq \subsetneq \supset \in \notin \emptyset \varnothing :$\cup \cap \setminus \subset \subseteq \subsetneq \supset \in \notin \emptyset \varnothing$。
  5. 表示排列使用 {n+1 \choose 2k}\binom{n+1}{2k},$\binom{n+1}{2k}$。
  6. 箭头:\to \rightarrow \leftarrow \Rightarrow \Leftarrow \mapsto : $\to \rightarrow \leftarrow \Rightarrow \Leftarrow \mapsto$。
  7. 逻辑运算符:\land \lor \lnot \forall \exists \top \bot \vdash \vDash:$\land \lor \lnot \forall \exists \top \bot \vdash \vDash$。
  8. \star \ast \oplus \circ \bullet:$\star \ast \oplus \circ \bullet$。
  9. \approx \sim \cong \equiv \prec:$\approx \sim \cong \equiv \prec$。
  10. \infty \aleph_0 $\infty \aleph_0$ \nabla \partial $\nabla \partial$ \Im \Re $\Im \Re$。
  11. 模运算 \pmode, 如,a\equiv b\pmod n:$a\equiv b\pmod n$。
  12. \ldots\cdots,其区别是 dots 的位置不同,lots 位置稍低,codes 位置居中。$a1+a2+\dots+an$,$a1,a2,\ldots,an$。
  13. 一些希腊字母具有变体形式,如 \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 之间加入矩阵中的元素即可。矩阵的行之间使用 \\ 分隔,列之间使用 & 分隔,例如:

\[\begin{matrix} 1 & x & x^2 \\ 1 & y & y^2 \\ 1 & z & z^2 \\ \end{matrix}\]

矩阵的括号

如果要对矩阵加括号,可以像上文中提到的一样,使用 \left\right配合表示括号符号。也可以使用特殊的 matrix。即替换 \begin{matrix}…\end{matrix} 中的 matrix 为 pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix.

\[\begin{aligned} &\mbox{pmatrix:} \begin{pmatrix} a & b \\ c & d \end{pmatrix} \mbox{, bmatrix:} \begin{bmatrix} a & b \\ c & d \end{bmatrix} \mbox{, Bmatrix:} \begin{Bmatrix} a & b \\ c & d \end{Bmatrix},\\[1em] &\mbox{vmatrix:} \begin{vmatrix} a & b \\ c & d \end{vmatrix} \mbox{, Vmatrix:} \begin{Vmatrix} a & b \\ c & d \end{Vmatrix}. \end{aligned}\]

可以使用\cdots $\cdots$ \ddots $\ddots$ \vdots $\vdots$ 来省略矩阵中的元素,如:

\[\begin{pmatrix} 1 & a_1 & a_1^2 & \cdots & a_1^n \\ 1 & a_2 & a_2^2 & \cdots & a_2^n \\ \vdots & \vdots& \vdots & \ddots & \vdots \\ 1 & a_m & a_m^2 & \cdots & a_m^n \end{pmatrix}\]

增广矩阵

增广矩阵需要使用前面的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}。使用 & 指示需要对齐的位置。如:

\[f(n) = \begin{cases} n/2, & \text{if $n$ is even} \\[0.3em] 3n+1, & \text{if $n$ is odd} \end{cases}\]

上述公式的括号也可以移动到右侧,不过需要使用 array 来实现,如下:

\[\left. \begin{array}{l} \text{if $n$ is even:}&n/2\\ \text{if $n$ is odd:}&3n+1 \end{array} \right\} =f(n)\]

最后,如果想分类之间的垂直间隔变大,可以使用 \\[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 代替。效果如下:

\[\begin{array}{cc} \mathrm{Bad} & \mathrm{Better} \\ \hline \\ \{x|x^2\in\Bbb Z\} & \{x\mid x^2\in\Bbb Z\} \\ \end{array}\]

多重积分

对于多重积分,不要使用 \int\int 此类的表达,应该使用 \iint\iiint 等特殊形式。效果如下:

\[\begin{array}{cc} \mathrm{Bad} & \mathrm{Better} \\ \hline \\ \int\int_S f(x)\,dy\,dx & \iint_S f(x)\,dy\,dx \\ \int\int\int_V f(x)\,dz\,dy\,dx & \iiint_V f(x)\,dz\,dy\,dx \end{array}\]

此外,在微分前应该使用 \, 来增加些许空间,否则TEX会将微分紧凑地排列在一起。如下:

\[\begin{array}{cc} \mathrm{Bad} & \mathrm{Better} \\ \hline \\ \iiint_V f(x)dz dy dx & \iiint_V f(x)\,dz\,dy\,dx \end{array}\]

连分数

书写连分数表达式时,请使用 \cfrac 代替 \frac 或者 \over, 两者效果对比如下:

\[x = a_0 + \cfrac{1^2}{a_1 + \cfrac{2^2}{a_2 + \cfrac{3^2}{a_3 + \cfrac{4^4}{a_4 + \cdots}}}} \tag {\cfrac}\]

\[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. 配合,表示方程组,如:

\[\left\{ \begin{array}{c} a_1x+b_1y+c_1z=d_1 \\ a_2x+b_2y+c_2z=d_2 \\ a_3x+b_3y+c_3z=d_3 \end{array} \right.\]

同时,还可以使用 \begin{cases}…\end{cases} 表达同样的方程组,如:

\[\left\{ \begin{array}{c} a_1x+b_1y+c_1z=d_1 \\ a_2x+b_2y+c_2z=d_2 \\ a_3x+b_3y+c_3z=d_3 \end{array} \right.\]

对齐方程组中的 = 号,可以使用 \being{aligned} .. \end{aligned},如:

\[\left\{ \begin{aligned} a_1x+b_1y+c_1z &=d_1+e_1 \\ a_2x+b_2y&=d_2 \\ a_3x+b_3y+c_3z &=d_3 \end{aligned} \right.\]

如果要对齐 = 号和项,可以使用 \being{array}{列样式} .. \end{array},如:

\[\left\{ \begin{array}{ll} a_1x+b_1y+c_1z &=d_1+e_1 \\ a_2x+b_2y &=d_2 \\ a_3x+b_3y+c_3z &=d_3 \end{array} \right.\]

颜色

命名颜色是浏览器相关的,如果浏览器没有定义相关的颜色名称,则相关文本将被渲染为黑色。以下颜色是 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进制数,如

\[\begin{array}{|rrrrrrrr|}\hline \verb+#000+ & \color{#000}{text} & & & \verb+#00F+ & \color{#00F}{text} & & \\ & & \verb+#0F0+ & \color{#0F0}{text} & & & \verb+#0FF+ & \color{#0FF}{text}\\ \verb+#F00+ & \color{#F00}{text} & & & \verb+#F0F+ & \color{#F0F}{text} & & \\ & & \verb+#FF0+ & \color{#FF0}{text} & & & \verb+#FFF+ & \color{#FFF}{text}\\ \hline \end{array}\] \[\begin{array}{|rrrrrrrr|} \hline \verb+#000+ & \color{#000}{text} & \verb+#005+ & \color{#005}{text} & \verb+#00A+ & \color{#00A}{text} & \verb+#00F+ & \color{#00F}{text} \\ \verb+#500+ & \color{#500}{text} & \verb+#505+ & \color{#505}{text} & \verb+#50A+ & \color{#50A}{text} & \verb+#50F+ & \color{#50F}{text} \\ \verb+#A00+ & \color{#A00}{text} & \verb+#A05+ & \color{#A05}{text} & \verb+#A0A+ & \color{#A0A}{text} & \verb+#A0F+ & \color{#A0F}{text} \\ \verb+#F00+ & \color{#F00}{text} & \verb+#F05+ & \color{#F05}{text} & \verb+#F0A+ & \color{#F0A}{text} & \verb+#F0F+ & \color{#F0F}{text} \\ \hline \verb+#080+ & \color{#080}{text} & \verb+#085+ & \color{#085}{text} & \verb+#08A+ & \color{#08A}{text} & \verb+#08F+ & \color{#08F}{text} \\ \verb+#580+ & \color{#580}{text} & \verb+#585+ & \color{#585}{text} & \verb+#58A+ & \color{#58A}{text} & \verb+#58F+ & \color{#58F}{text} \\ \verb+#A80+ & \color{#A80}{text} & \verb+#A85+ & \color{#A85}{text} & \verb+#A8A+ & \color{#A8A}{text} & \verb+#A8F+ & \color{#A8F}{text} \\ \verb+#F80+ & \color{#F80}{text} & \verb+#F85+ & \color{#F85}{text} & \verb+#F8A+ & \color{#F8A}{text} & \verb+#F8F+ & \color{#F8F}{text} \\ \hline \verb+#0F0+ & \color{#0F0}{text} & \verb+#0F5+ & \color{#0F5}{text} & \verb+#0FA+ & \color{#0FA}{text} & \verb+#0FF+ & \color{#0FF}{text} \\ \verb+#5F0+ & \color{#5F0}{text} & \verb+#5F5+ & \color{#5F5}{text} & \verb+#5FA+ & \color{#5FA}{text} & \verb+#5FF+ & \color{#5FF}{text} \\ \verb+#AF0+ & \color{#AF0}{text} & \verb+#AF5+ & \color{#AF5}{text} & \verb+#AFA+ & \color{#AFA}{text} & \verb+#AFF+ & \color{#AFF}{text} \\ \verb+#FF0+ & \color{#FF0}{text} & \verb+#FF5+ & \color{#FF5}{text} & \verb+#FFA+ & \color{#FFA}{text} & \verb+#FFF+ & \color{#FFF}{text} \\ \hline \end{array}\]

未完待续!

声明: 本文采用 BY-NC-SA 授权。转载请注明转自: Omega