0%

Mathjax in hexo and gitbook

介绍一下 mathjax 在 vscode,hexo,gitbook 中的使用以及 LaTeX 中数学公式书写的基本规则

MathJax 简介

MathJax 是一款运行在浏览器中的开源的数学符号渲染引擎,使用 MathJax 可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax 可以解析 Latex、MathML 和 ASCIIMathML 的标记语言。

顺便安利一款软件 ,可以直接截图将图片公式转化为 LaTeX 代码
Mathpix Snipping Tool

VScode

在 VScode 中进行实施浏览,我使用的是Markdown+Math这个插件,安装好之后直接在 markdown 中进行书写公式就可以非常方便得进行转化
VScode-math.jpg

Hexo

我使用的是 Hexo博客next 主题,非常贴心地在主题的配置文件中给出了是否打开的选项。在 blog/themes/next/_config.yml 中进行修改,将 math 选项打开,我这里对于 per_page 的选项选择的是 true(我觉得并不是每一篇文章都需要显示数学公式,让每一页都加载对应的 CSS 之类的反而比较臃肿)
对于需要的文章,在文章开头的部分添加 mathjax: true 即可。在使用 hexo ghexo s 之后就可以看到对应的公式了。

Gitbook

Gitbook 官方插件地址 -> https://plugins.gitbook.com/

Gitbook 里面当然也有对应的插件了。有两种插件 katexmathjax,我还是先选择了 mathjax。在官网上katex上写的是比 mathjax 更快,但是我选择 mathjax 还有的一个点是因为可以在网页上右键非常方便得显示出 MathML 格式的代码和 LaTeX 格式的代码。
首先对 book.json 进行编辑,在 plugins 中加入对应的插件名字(去掉插件则是加个 -,如何 -search)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"title" : "Gitbook Use",
"author" : "Xuan",
"language" : "zh-hans",
"links" : {
"sidebar" : {
"Home" : "http://notes.cugxuan.cn"
}
},
"plugins": [
"mathjax",
"splitter",
"github-buttons",
"copy-code-button",
"-lunr",
"-search",
"search-plus",
"ad"
]
}

然后在该目录下面进行gitbook install就会自动安装所需要的插件

基本效果

1
$2_{X1}*1^1$

显示出来的效果是

$2_{X1}*1^1$

在公式上右键可以查看该公式的 MathML 的写法和 LaTeX 的写法
Web-Mathjax.jpg

LaTeX 公式书写

上面说了一堆安装使用的方法,最重要的当然还是怎么进行公式的书写。

公式标记

使用$来进行公式的表标记

  • $...$表示行内公式
  • $$...$$表示整行公式

希腊字母表

名称 大写 Tex 小写 Tex
alpha $A$ A $\alpha$ \alpha
beta $B$ B $\beta$ \beta
gamma $\Gamma$ \Gamma $\gamma$ \gamma
delta $\Delta$ \Delta $\delta$ \delta
epsilon $E$ E $\epsilon$ \epsilon
zeta $Z$ Z $\zeta$ \zeta
eta $H$ H $\eta$ \eta
theta $\Theta$ \Theta $\theta$ \theta
iota $I$ I $\iota$ \iota
kappa $K$ K $\kappa$ \kappa
lambda $\Lambda$ \Lambda $\lambda$ \lambda
mu $M$ M $\mu$ \mu
nu $N$ N $\nu$ \nu
xi $\Xi$ \Xi $\xi$ \xi
omicron $O$ O $\omicron$ \omicron
pi $\Pi$ \Pi $\pi$ \pi
rho $P$ P $\rho$ \rho
sigma $\Sigma$ \Sigma $\sigma$ \sigma
tau $T$ T $\tau$ \tau
upsilon $\Upsilon$ \Upsilon $\upsilon$ \upsilon
phi $\Phi$ \Phi $\phi$ \phi
chi $X$ X $\chi$ \chi
psi $\Psi$ \Psi $\psi$ \psi
omega $\Omega$ \Omega $\omega$ \omega

注:此表的 markdown 形式是alpha | $A$ | A | $\alpha$ | \alpha
如果想要进行摘录复制,只能复制三列的话(网页复制下来是alpha A \alpha)可以存到文件中使用 awk 进行转换,awk '{print $1,"$"$2"$",$2,"$"$3"$",$3}' in.txt,可得到alpha $A$ A $\alpha$ \alpha

上标与下标

  • 上标和下标分别使用^与_
  • 例如x_i^2显示的效果就是$x_i^2$
  • 使用大括号{}括起来表示一个单元,同时可以消除二义性

括号

  • 小括号与方括号: 使用原始的(),[]即可,如(2+3)[4+4]的显示效果就是$(2+3)[4+4]$
  • 大括号: 由于大括号{}被用来分组,因此需要使用\{ 和 \}表示大括号,也可以使用\lbrace\rbrace来表示。如\{a*b\}的显示效果为${ab}$,\lbrace a*b \rbrace的效果也为$\lbrace ab \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)(\left\lbrave...\right\rbrace,可以理解成\left,\right是对括号的修饰词)来自适应的调整括号大小。如下,
1
2
3
$$\lbrace \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}\rbrace \tag{1.1}$$

$$\left\lbrace \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}\right\rbrace \tag{1.2}$$

$$\lbrace \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}\rbrace \tag{1.1}$$

$$\left\lbrace \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}\right\rbrace \tag{1.2}$$
可以看到,公式 1.2 中的括号是经过缩放的。

求和与积分

  • \sum 用来表示求和符号,其下标表示求和下限,上标表示上限。如,\sum_1^n:$\sum_1^n$。
  • \int 用来表示积分符号,同样地,其上下标表示积分的上下限。如,\int_1^\infty:$\int_1^\infty$。
  • 与此类似的符号还有,\prod:$\prod$,\bigcup:$\bigcup$,\bigcap:$\bigcap$,\iint:$\iint$。

分式与根式

  • 分式的表示。第一种,使用\frac ab\frac作用于其后的两个组 a,b,结果为$\frac ab$。如果你的分子或分母不是单个字符,请使用{..}来分组。第二种,使用\over 来分隔一个组的前后两部分,如{a+1\over b+1}:${a+1\over b+1}$。
  • 根式使用\sqrt来表示。如,\sqrt[4] {\frac xy}:$\sqrt[4] {\frac xy}$

字体

  • 使用\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表示为$\sin x$,\arctan表示为$\arctan$,lim_{1\to\infty}表示为$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表示居中的点$\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 的位置不同,ldots 位置稍低,cdots 位置居中。$a_1+a_2+\cdots+a_n$,$a_1, a_2, \ldots ,a_n$。
  • 一些希腊字母具有变体形式,如 \epsilon \varepsilon : $\epsilon \varepsilon$, \phi \varphi: $\phi \varphi$。

空间

通常 MathJax 通过内部策略自己管理公式内部的空间,因此 a…b 与 a…….b(.表示空格)都会显示为。可以通过在 ab 间加入,增加些许间隙,;增加较宽的间隙,\quad 与 \qquad 会增加更大的间隙,如a\qquad b: $a\qquad b$。

顶部符号

对于单字符,\hat x:$\hat x$,多字符可以使用\widehat xy: $\widehat xy$.类似的还有\hat x \quad \overline {xyz} \quad \vec a \quad \overrightarrow {x} \quad \dot x \quad \ddot x : $\hat x \quad \overline {xyz} \quad \vec a \quad \overrightarrow {x} \quad \dot x \quad \ddot x$。

特殊字符

特殊字符可以使用\转义为原来的含义。如\$表示 $$$,\_表示下划线 $_$。

参考资料

听说好看的人都关注了我的公众号《泫言》