## 在博客中插入数学公式(LaTeX的使用)
> 在写算法相关的文章时,尤其是Markdown文档,总会遇到复杂的数学公式。插入一些复杂的数学公式是不可避免的事,总是截图并不是一个完美的解决方法,在此总结一下如何使用LaTeX编辑数学公式,包括常用的符号。
### 什么是LaTeX
LaTeX(LATEX,音译“拉泰赫”)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。
### LaTeX编辑数学公式基本语法元素
#### 排版方式
- **行间公式**(Inline):用`$...$`将公式括起来。
例如:输入`$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$`,显示:$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$
- **块间公式**(displayed):用`$$...$$`将公式括起来是无编号的形式。块间元素默认是居中显示的。
- 例如:输入`$$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$`显示:
$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$
#### 希腊字母编辑表
![希腊字母编辑表](http://p6.qhimg.com/t01750bac46a4735efb.png)
#### 常用符号
- **上标(superscripts)**和**下标(subscripts)**
使用`^`和` _` 表示上标和下标. 例如,`$x_i^2$`表示$x_i^2$,`$\log_2 x$`表示$\log_2 x$
- **分组(groups)**
上标和下标作用于分组,使用花括号(curly braces)。**特别注意,由于我们通常插入数学公式特别复杂,通常嵌套好几层数学公式,所以在使用LaTeX时,尤其需要注意分组。会正确地使用分组,也就基本上学会Latex。**例如:$10^{10}$,它的表达式该如何表示?错误示范:`$10^10$`,然而它表示为$10^10$。来看正确示范:`$10^{10}$`。再看看$x^{y^z}$与${x^y}^z$,有什么区别?一个是以x为底,一个是以x的y次方为底。它们的表达式分别是`$x^{y^z}$`和`${x^y}^z$`。
- **括号**
小括号和中括号直接使用,大括号由于用来分组,所以需要转义。
`$\{1=2\}$`表示$\{1=2\}$
- **分数**
`$\frac{}{}$`,例如:`\frac{1+1}{2}+1`表示$\frac{1+1}{2}+1$
- 求和
`$\sum_1^n$`表示$\sum_1^n$
- **聚合和积分**
`$\prod$`表示$\prod$
`$\sum_{i=0}i^2$`表示$\sum_{i=0}i^2$
`$\int$`表示$\int$
`$\iint$`表示$\iint$
`$\iiint$`:表示$\iiint$
`$\bigcup$`表示$\bigcup$
`$\bigcap$`表示$\bigcap$
- 极限
`$lim_{x \to \infty}$`表示$lim_{x \to \infty}$
- 开方
`$\sqrt {x^3}$`表示$\sqrt {x^3}$
`$\sqrt[4]{\frac xy}$`表示$\sqrt[4]{\frac xy}$
`$\left(\frac xy \right)^{1/4}$`表示$\left(\frac xy \right)^{1/4}$
- 运算符
小的运算符(operator)例如 + - * /等可以直接输入,其他特殊的有$\pm$ $\times$ $\div$ $\cdot$ $\cap$ $\cup$ $\geq$ $\leq$ $\neq$ $\approx$ $\equiv$
转义字符(escape character)\,反斜线\backslash:`∖ `,
$\lt$ $\gt$ $\le$ $\leq$ $\leqq$ $\ge$ $\geq$ $\geqq$ $\neq$$\land$ $\lor$ $\lnot$ $\forall$ $\exists$ $\top$ $\bot$ $\vdash$ $\vDash$
| 运算符 | 表达式 | 运算符 | 表达式 |
| :-------: | :---------: | :----------: | :------------: |
| $\pm$ | `$\pm$` | $\lt$ | `$\lt$` |
| $\times$ | `$\times$` | $\gt$ | `$\gt$` |
| $\div$ | `$\div$` | $\land$ | `$\land$` |
| $\cdot$ | `$\cdot$` | $\lor$ | `$\lor$` |
| $\cap$ | `$\cap$` | $\forall$ | `$\forall$` |
| $\cup$ | `$\cup$` | $\exists$ | `$\exists$` |
| $\geq$ | `$\geq$` | $\top$ | `$\top$` |
| $\leq$ | `$\leq$` | $\bot$ | `$\bot$` |
| $\neq$ | `$\neq$` | $\vdash$ | `$\vdash$` |
| $\approx$ | `$\approx$` | $\vDash$ | `$\vDash$` |
| $\equiv$ | ` $\equiv$` | $\backslash$ | `$\backslash$` |
- 矩阵
`$$\begin{matrix}…\end{matrix}$$`,使用`&`分隔同行元素,`\\`换行。例如:
```
\left(
\begin{matrix}
1& x & x^2 \\
1 & y & y^2 \\
1 & z & z^2 \\
\end{matrix}
\right)
```
$$
\left(
\begin{matrix}
1 & x & x^2 \\
1 & y & y^2 \\
1 & z & z^2 \\
\end{matrix}
\right)
$$
```
\left[
\begin{matrix}
1 & x & x^2 \\
1 & y & y^2 \\
1 & z & z^2 \\
\end{matrix}
\right]
```
$$
\left[
\begin{matrix}
1 & x & x^2 \\
1 & y & y^2 \\
1 & z & z^2 \\
\end{matrix}
\right]
$$
- 行列式
```
X=\left|
\begin{matrix}
x_{11} & x_{12} & \cdots & x_{1d}\\
x_{21} & x_{22} & \cdots & x_{2d}\\
\vdots & \vdots & \ddots & \vdots\\
x_{m1} & x_{m2} & \cdots & x_{md}\\
\end{matrix}
\right|
```
$$
X=\left|
\begin{matrix}
x_{11} & x_{12} & \cdots & x_{1d}\\
x_{21} & x_{22} & \cdots & x_{2d}\\
\vdots & \vdots & \ddots & \vdots\\
x_{m1} & x_{m2} & \cdots & x_{md}\\
\end{matrix}
\right|
$$
- 分段函数
```
f(n) =
\begin{cases}
n/2, & \text{if $n$ is even} \\
3n+1, & \text{if $n$ is odd}
\end{cases}
```
$$
f(n) =
\begin{cases}
n/2, & \text{if $n$ is even} \\
3n+1, & \text{if $n$ is odd} \\
\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.
```
$$
\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.
$$
- 分开输入
当公式很长,无法在一行中显示;又或者在分步计算时,需要将公式拆分,这时可以使用`split`参数
```
\begin{equation}
\begin{split}
(x + y)(x + 4y) & = x^2 + 4xy + xy + 4y^2\\\\
& = x^2 +5xy + 4y^2
\end{split}
\end{equation}
```
$$
\begin{equation}
\begin{split}
(x + y)(x + 4y) & = x^2 + 4xy + xy + 4y^2\\\\
& = x^2 +5xy + 4y^2
\end{split}
\end{equation}
$$
- 分类输入
当一个公式是分段函数时,就需要使用`cases`参数
```
\begin{equation}
a_{i1}A_{j1} + a_{i2}A_{j2} + \cdots + a_{in}A_{jn} =
\begin{cases}
\begin{vmatrix}A\end{vmatrix},& i =j\\\\
0, & i \neq j
\end{cases}
\end{equation}
```
$$
\begin{equation}
a_{i1}A_{j1} + a_{i2}A_{j2} + \cdots + a_{in}A_{jn} =
\begin{cases}
\begin{vmatrix}A\end{vmatrix},& i =j\\\\
0, & i \neq j
\end{cases}
\end{equation}
$$
- 等式对齐
当我们需要输入多个有编号的公式,并且要让它们自动对齐时,可以使用参数`align`
```
<!--使用align参数-->
\begin{align}
x + y = 1\\\\
2x + y \neq 1\\\\
3x +4y \leq 2\\\\
4x \geq y
\end{align}
```
$$
<!--使用align参数-->
\begin{align}
x + y = 1\\\\
2x + y \neq 1\\\\
3x +4y \leq 2\\\\
4x \geq y
\end{align}
$$
- 表格
既然提到了array的用法,就稍微介绍一些latex中的表格。
```
\begin{array}{|c|c|}
\hline
0 & 1 \\\\\hline
1 & 0 \\\\\hline
0 & 1 \\\\\hline
1 & 0 \\\\\hline
\end{array}
```
$$
\begin{array}{|c|c|}
\hline
0 & 1 \\\\\hline
1 & 0 \\\\\hline
0 & 1 \\\\\hline
1 & 0 \\\\\hline
\end{array}
$$
- 积分
如果想要输入积分,则需要使用`\int_{}^{}`来表示
```
$$\int_0^1 x^2 dx$$
<!--来看一个更加复杂的例子-->
<!--正态分布的分布函数-->
$$F(x) = \int_{- \infty}^{+ \infty} \frac{1}{\sqrt{2\pi}\sigma}e^{-(\frac{x-\mu}{\sigma})^2} dx$$
```
$$
\int_0^1 x^2 dx
$$
$$
F(x) = \int_{- \infty}^{+ \infty} \frac{1}{\sqrt{2\pi}\sigma}e^{-(\frac{x-\mu}{\sigma})^2} dx
$$
- 对齐
从本质上来说,array是将一些事物对齐显示的阵列,所以也可以对齐其他数学对象。例如我们可以这样做:
```
\begin{array}{cc}
(A)\quad 4 & \hspace{4cm}(B)\quad 3\\\\
(B)\quad 2 & \hspace{4cm}(D)\quad 1
\end{array}
```
$$
\begin{array}{cc}
(A)\quad 4 & \hspace{4cm}(B)\quad 3\\\\
(B)\quad 2 & \hspace{4cm}(D)\quad 1
\end{array}
$$
- 梯度
使用`$nabla$`来表示
```
$\nabla f(x) = [\frac{\partial f(x)}{\partial x_1}, \frac{\partial f(x)}{\partial x_2}, ..., \frac{\partial f(x)}{\partial x_d}]^T$
```
$$
$\nabla f(x) = [\frac{\partial f(x)}{\partial x_1}, \frac{\partial f(x)}{\partial x_2}, ..., \frac{\partial f(x)}{\partial x_d}]^T$
$$
#### 常用到的公式
- 线性模型
`$$h(\theta)=\sum_{j=0}^n \theta_jx_j$$`
$$
h(\theta)=\sum_{j=0}^n \theta_jx_j
$$
- 均方误差
`$$J(\theta)=\frac1{2m}\sum_{i=0}^m(h_\theta(x^i)-y^i)^2$$`
$$
J(\theta)=\frac1{2m}\sum_{i=0}^m(h_\theta(x^i)-y^i)^2
$$
#### 扩展
推荐两个网站,可以很方便我们直接得到公式,毕竟LaTeX的语法很复杂。
[链接:在线latex编辑器](http://private.codecogs.com/latex/eqneditor.php)
可以在线编辑公式,得出相应的LaTeX的字符串,也可以用来验证自己写的LaTeX是否正确。
[链接:在线手写公式识别](https://webdemo.myscript.com/)
这个就厉害了,我们可以在上面直接手写公式,只要一般写的标准点字体,都能识别出来,生成相应的图片,也可以生成latex格式的公式,我们把这个部分拷贝出来,然后插入到任何我们想使用这个公式的地方就可以了。
#### 参考
[LaTex-Project官方网站](https://www.latex-project.org/about/)
![image-20220322201903024](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220322201903024.png)
在博客中插入数学公式(LaTeX的使用)