文章目录(Table of Contents)
简介
这里是关于 LaTeX 中公式书写的相关部分。会包含一些常用的符号的总结。以及一些使用的时候需要注意的小技巧(如多行公式的标号,LaTeX 公式中输入中文)。
这里也是作为一个小的总结的部分,方便查询。
LaTeX 符号总结
小于等于与大于等于
- \begin{equation} \label{1_5}
- \begin{aligned}
- a \geq b & \cdots \mbox{geq, 大于等于} \\
- a \leq b & \cdots \mbox{leq, 小于等于}
- \end{aligned}
- \end{equation}
不等号
使用 neq 表示不等号:
- \begin{equation}
- a \neq b
- \end{equation}
最终的效果如下图所示:
约等于
使用 approx
表示约等于。一些其他的符号对应如下所示:
叉乘
- \begin{itemize}
- \item 叉乘, $a \times b$;
- \item 点乘, $a \cdot b$;
- \end{itemize}
除法
使用 div
来表示除号,如下所示:
- \begin{equation}
- a \div b \approx c
- \end{equation}
最终的结果如下所示:
根号的书写
平方根(square root)的输入命令为\sqrt, n次方根相应地为: \sqrt[n].
任意和存在
- \begin{itemize}
- \item $\forall s \in S$, 任意的写法;
- \item $\exists s \in S$, 存在的写法;
- \end{itemize}
最终的效果如下所示:
上标撇
在输入公式上标「撇」的时候,使用 d^{\prime}
而不要使用 d^{'}
,下面是两者的区别:
求极限
使用 lim
的写法来表示极限,我们看下面的例子,
- \begin{equation}
- \lim_{n \to \infty}{(\frac{n+3}{n+2})^{n}}
- \end{equation}
最终编译之后的结果如下所示:
关于微分算子的使用
微分算子使用nabla表示. 下面看一个简单的例子:
- \begin{equation}
- \begin{aligned}
- \Delta w & = -\frac{1}{2} \alpha \nabla_{w} J(w) \\
- & = \alpha E_{\pi}[(v_{\pi}(S) - x(S)^\top w)] \nabla_{w} (x(S)^\top w) \\
- & = \alpha (v_{\pi}(S) - x(S)^\top w) x(S)
- \end{aligned}
- \end{equation}
最终微分算子的结果如下所示:
偏导数和导数
使用 partial
来表示偏导数,使用 mathrm{d}
来表示导数,可以看下面的例子:
- \begin{equation}
- \begin{aligned}
- & = \frac{\partial{\epsilon }}{\partial{x}} \\
- & = \frac{\mathrm{d}y}{\mathrm{d}x_1} + \frac{\mathrm{d}y}{\mathrm{d}x_2}
- \end{aligned}
- \end{equation}
最终生成的结果如下图所示:
各种括号总结
- \begin{equation} \label{1_6}
- \begin{aligned}
- \left\{ A \right\} & \cdots \mbox{花括号} \\
- \left| A \right| & \cdots \mbox{单竖线} \\
- \left\| A \right\| & \cdots \mbox{双竖线} \\
- \left \langle A \right \rangle & \cdots \mbox{角括号} \\
- \left \lfloor A \right\rfloor & \cdots \mbox{下取证} \\
- \left \lceil A \right\rceil & \cdots \mbox{上取证}
- \end{aligned}
- \end{equation}
LaTeX 在公式中写入删除线
有的时候我们在进行公式化简的时候,需要用到删除线。这个时候可以利用 cancel
这个 package
来完成。首先需要在最前面导入 package
:
- \usepackage{cancel} % 公式删除线
下面来看一个简单的例子,分别对应不同形状的删除线:
- \begin{equation}
- \begin{aligned}
- x+\cancel{5y}=0 \\
- x+\bcancel{5y}=0 \\
- x+\xcancel{5y}=0 \\
- x+\cancelto{\infty}{5y}=0
- \end{aligned}
- \end{equation}
编译上面的代码,最终效果如下所示:
通常情况下,我们会利用 cancel
来进行一些公式化简得操作,例如:
- \begin{equation}
- \frac{\cancel{(x+1)}(x+2)}{\cancel{(x+1)}(x+3)}
- =
- \frac{x+2}{x+3}
- \end{equation}
上面编译后的结果如下所示:
参考链接,How to write crossed-out math in LaTeX?
LaTeX输入交集并集等符号
第一个我们贴一下完整的代码, 后面就只贴出关键的部分.
- \documentclass{article}
- % 使用中文包
- \usepackage[UTF8]{ctex}
- \usepackage{algorithmic}
- \usepackage{amsmath, amssymb,amsfonts}
- \begin{document}
- \begin{align}
- & \mathbb{R}, \mbox{实数集} \label{part1:1}\\
- & \mathbb{Z}, \mbox{整数集} \label{part1:2}\\
- & \subset, \mbox{真包含} \label{part1:3}\\
- & \subseteq, \mbox{包含} \label{part1:4}\\
- & \in, \mbox{属于} \label{part1:5}\\
- & \cap, \mbox{交集} \label{part1:6}\\
- & \cup, \mbox{并集} \label{part1:7}\\
- & \mid, \mbox{或} \label{part1:8}\\
- & \notin, \mbox{不属于} \label{part1:9}
- \end{align}
- \end{document}
编译之后的效果如下, 可以对照上面的代码进行查看每一个符号的书写:
LaTeX 公式中的空格
- \begin{align}
- & a \qquad b, \mbox{两个宽度} \label{part2:1}\\
- & a \quad b, \mbox{一个宽度} \label{part2:2}\\
- & a \ b, \mbox{大空格} \label{part2:3}\\
- & a \; b, \mbox{中等空格} \label{part2:4} \\
- & a \, b, \mbox{小空格} \label{part2:5} \\
- & a \! b, \mbox{紧贴} \label{part2:6}
- \end{align}
编译之后的效果如下, 可以对照上面的代码进行查看每一个符号的书写:
LaTeX 各种箭头符号
- \begin{align}
- & \rightarrow, \mbox{右箭头} \label{part3:1}\\
- & \leftarrow, \mbox{左箭头} \label{part3:2}\\
- & \Rightarrow, \mbox{两横右箭头} \label{part3:3}\\
- & \Leftarrow, \mbox{两横左箭头} \label{part3:4} \\
- & \leftrightarrow, \mbox{双向箭头} \label{part3:5} \\
- & \Leftrightarrow, \mbox{双向箭头} \label{part3:6} \\
- & \leftrightarrows, \mbox{双向箭头} \label{part3:7} \\
- & \nleftarrow, \mbox{不是左箭头} \label{part3:8} \\
- & \nrightarrow, \mbox{不是右箭头} \label{part3:9} \\
- \end{align}
编译之后的效果如下, 可以对照上面的代码进行查看每一个符号的书写:
LaTeX 向量的输入
- \vec显示结果: $\vec x$
- \boldsymbol显示结果: $\boldsymbol x$
最后的显示结果:
矩阵的转置
使用 \top
来完成矩阵转置符号。
- \begin{equation} \label{4_8}
- \hat{v}(S,w) =
- \begin{pmatrix}
- 1(S=s_{1})\\
- \vdots\\
- 1(S=s_{n})\\
- \end{pmatrix}^\top
- \cdot
- \begin{pmatrix}
- w_{1}\\
- \vdots\\
- w_{n}\\
- \end{pmatrix}
- \end{equation}
最终结果如下所示:
LaTeX 矩阵第一行第一列为注释
如果我们想要在矩阵的边界上加上注释,可以使用 bordermatrix
的方式。下面是一个例子:
- \begin{equation}
- \bordermatrix{
- \text{corner}&c_1&c_2&\ldots &c_n \cr
- r_1&a_{11} & 0 & \ldots & a_{1n} \cr
- r_2& 0 & a_{22} & \ldots & a_{2n} \cr
- r_3& \vdots & \vdots & \ddots & \vdots \cr
- r_4& 0 & 0 &\ldots & a_{nn}
- }
- \end{equation}
最终的效果如下图所示:
LaTeX 中矩阵输入
- $$
- \begin{bmatrix}
- A & B & C\\
- D & E & F\\
- G & H & I\\
- \end{bmatrix}
- $$
可以修改大括号里的关键词, matrix
、 pmatrix
、 bmatrix
、 Bmatrix
、 vmatrix
、 Vmatrix
. 每一个的特点如下所示.
具体可以参考链接, LaTeX 数学符号语法速查表
Latex的矩阵乘法
其实有了上面的矩阵的写法, 就很容易写出矩阵乘法, 下面给出一个例子.
- \begin{equation} \label{part0_9}
- \begin{bmatrix}
- v(s_{1}) \\
- \vdots \\
- v(s_{n}) \\
- \end{bmatrix}
- =
- \begin{bmatrix}
- R_{1} \\
- \vdots \\
- R_{n} \\
- \end{bmatrix}
- + \gamma \cdot
- \begin{bmatrix}
- P_{11} & \cdots & P_{1n} \\
- \vdots & \ddots & \vdots \\
- P_{n1} & \cdots & P_{nn}
- \end{bmatrix}
- \begin{bmatrix}
- v(s_{1}) \\
- \vdots \\
- v(s_{n}) \\
- \end{bmatrix}
- \end{equation}
最终的结果如下所示:
模型中的上标和下标
- \begin{align}
- & \hat{X}_{train} \\ % 顶部折线
- & \overline{X}_{train} \\ % 上划线
- & \underline{X}_{train} \\ % 下划线
- & \tilde{X}_{train} \\ % 顶部曲线
- \end{align}
省略号与波浪线
关于波浪线, 我们可以使用\sim来进行表示.
- $S_{t+1} \sim p(\cdot |s_{t}, a)$
关于其他的一些省略号的用法.
- \begin{itemize}
- \item 横向单个点: $\cdot$
- \item 横向多个点: $\cdots$
- \item 竖向多个点: $\vdots$
- \item 斜向多个点: $\ddots$
- \end{itemize}
关于分子分母
我没使用\frac{A}{B}来表示A/B, 下面看个例子(这个例子是之前写别的时候留下来的, 已经截了图了, 就不想换了).
- \documentclass{article}
- % 使用中文包
- \usepackage[UTF8]{ctex}
- \usepackage{algorithmic}
- \usepackage{amsmath, amssymb,amsfonts}
- \begin{document}
- \begin{align}
- & \mbox{环比增长率}: \\
- &&\frac{\mbox{2010年12月}}{\mbox{2010年11月}}-1=\frac{\mbox{(2010年12月-2010年11月)}}{\mbox{2010年11月}} \\
- & \mbox{同比增长率}: \\
- && \frac{\mbox{2010年12月}}{\mbox{2009年12月}}-1=\frac{\mbox{(2010年12月-2009年12月)}}{\mbox{2009年12月}}
- \end{align}
- \end{document}
最终的效果如下:
LaTeX 下方括号
有的时候我们需要把 LaTeX 的括号放在等式的下方,这个时候可以使用 underbrace
来完成。下面看一个简单的例子:
- \begin{equation}
- \underbrace{E_{t-2}v_t}_{=0}
- \end{equation}
最终的结果如下所示:
我们也可以将其变得稍微复杂一些,由多个下括号组成:
- \begin{equation}
- m_{i} = (
- \underbrace{A, B, C}_{=1},
- \underbrace{D, D, E, E, F, F}_{Group \quad Two},
- \underbrace{G, H, I}_{=3},
- )
- \end{equation}
最终的结果如下所示,可以看到小括号里面被分为了三份:
参考资料:Curly brackets below a word in an equation
连加符号,连乘与积分
我们使用\sum_{}^{}{}的方式来表示连加.
- Loss = -\sum_{i=1}^{N}{\hat{y_{i}}*Log(y_{i})}
我么使用\prod_{}^{}{}的方式来表示连乘.
- F(x) = \prod_{i=1}^{n}{f_{i}(x)}
积分我们使用\int_{}^{}{}的方式来表示积分. 同时, 我们要注意积分算子的表示, 也就是dx的表示, 可以参考在 LaTeX 中使用微分算子的正确姿势. 下面是一个总体的例子.
- % 微分算子
- \newcommand*{\dif}{\mathop{}\!\mathrm{d}}
- $\int_{-\infty}^{+\infty}{Q_{\pi}(s_{t}, a) \cdot \pi(a|s_{t})} \dif a$
连加符号换行
有的时候连加符号条件过长,我们希望可以有换行。这个时候可以使用 amsmath
包中的\substack
命令来完成。下面看一个简单的例子:
- \begin{equation}
- d(\vec{x},\vec{y}) =
- \sum_{\substack{Z_{xy}\in\vec{Z}_{xy}\\
- \forall x\in\vec{x}\\
- \forall y\in\vec{y}}}
- f(Z_{xy})
- \end{equation}
最终的结果如下所示,可以看到连加符号中三个「属于」分别占一行:
参考资料,Separate long math text under sum symbol into different lines?
argmax 与 argmin的写法
- \usepackage{amsmath}
- \DeclareMathOperator*{\argmax}{arg\,max}
- \DeclareMathOperator*{\argmin}{arg\,min}
- a_{t}=\argmax_{a}{Q^{*}(s_{t}, a)}
参考资料: Command for argmin or argmax?
参考资料
LaTeX 算法的输入
算法的简单例子
我们使用 algorithm2e
包来实现伪代码。下面是一个简单的例子。关于更加详细的 algorithm2e
包的使用,可以参考链接,科研神器Latex:algorithm2e算法常用技巧小结。
- \usepackage[ruled,vlined]{algorithm2e}
- \begin{algorithm}[H]
- \SetAlgoLined
- Initialize $Q(s, a)$, $\forall s \in S, a \in A(s)$, $Q(s,a)=0$, $N=0$ \;
- \While{$N<$Max Episode}{
- Initialize $S$ \;
- Choose A from S using ploicy derived Q (e.g., using $\epsilon$-greedy) \;
- \While{$S$ is not terminal}{
- Take action A, observe $R$, $S'$ \;
- Choose $A'$ from $S'$ using policy derived Q (e.g., using $\epsilon$-greedy) \;
- 更新$Q(S,A)$, $Q(S,A) \leftarrow Q(S,A) + \alpha [R + \gamma Q(S',A') - Q(S,A)]$ \;
- $S \leftarrow S'$, $A \leftarrow A'$\;
- }
- }
- \caption{Sarsa算法简介}
- \end{algorithm}
最终的效果如下所示:
算法加上注释
我们利用 SetKwComment
可以加上注释的样式,这里我们使用向右的三角表示。这部分可以参考链接,Overleaf -- Algorithms。
- \usepackage[ruled]{algorithm2e} % 算法描述
- \SetKwInput{KwInput}{Input}
- \SetKwComment{Comment}{$\triangleright \;$}{}
- \begin{algorithm}
- \caption{An algorithm with caption}\label{alg:two}
- \KwInput{batch size $B$}
- \KwData{$n \geq 0$}
- \KwResult{$y = x^n$}
- $y \gets 1$\;
- $X \gets x$\;
- $N \gets n$\;
- \While{$N \neq 0$}{
- \eIf{$N$ is even}{
- $X \gets X \times X$\;
- $N \gets \frac{N}{2}$ \Comment*[r]{This is a comment}
- }{\If{$N$ is odd}{
- $y \gets y \times X$\;
- $N \gets N - 1$\;
- }
- }
- }
- \end{algorithm}
最终的效果如下所示,可以看到可以正常显示注释:
控制算法的行间距
有的时候因为在伪代码中会包含公式,默认的行间距过小,导致公式有重叠。这个时候可以使用 setspace
这个包来手动的控制行间距。还是对于上面的例子,此时将间距改为之前的两倍:
- \usepackage{setspace}
- \begin{algorithm}
- \setstretch{2} % 控制间距
- \caption{An algorithm with caption}\label{alg:two}
- \KwInput{batch size $B$}
- \KwData{$n \geq 0$}
- \KwResult{$y = x^n$}
- $y \gets 1$\;
- $X \gets x$\;
- $N \gets n$\;
- \While{$N \neq 0$}{
- \eIf{$N$ is even}{
- $X \gets X \times X$\;
- $N \gets \frac{N}{2}$ \Comment*[r]{This is a comment}
- }{\If{$N$ is odd}{
- $y \gets y \times X$\;
- $N \gets N - 1$\;
- }
- }
- }
- \end{algorithm}
最终的效果如下所示,可以看到伪代码每一行的间距变大了:
一些其他的
LaTeX 公式中输入中文
我们可以使用\mbox来在latex公式中进行中文的输入. 具体的例子见上面LaTeX符合总结部分.
LaTeX 公式定义颜色
有两种设置颜色的方式:
- 使用 color 会对剩下的所有式子上色;
- 使用
xcolor
package 中的\textcolor
可以具体对某个符号上色;
下面的例子来展示一下上面的两种上色方式:
- \begin{equation}
- \color{yellow} A = \textcolor{blue}{B} \textcolor{red}{-} \textcolor{green}{C}
- \end{equation}
最终的效果如下图所示:
参考资料:How to color math symbols?
公式编号的设定
有的时候, 我们不希望公式的编号从1开始, 或者说我们希望指定某个公式的编号, 我们就可以使用tag来进行指定公式的编号. 我们来看下面的一个例子来进行简单的说明, 看下面第二个式子中tag的使用:
- \begin{equation}
- 1 + 1 = 2
- \end{equation}
- \begin{equation} \tag{5}
- 1 + 1 = 2
- \end{equation}
- \begin{equation}
- 1 + 1 = 2
- \end{equation}
最终的显示结果如下所示, 可以看到第一个式子编号是1, 第二个编号是我们指定的, 是5, 接着最后的一个式子的编号是2:
参考文献: Change equation number latex
LaTeX 长公式换行并对齐
有的时候公式较长的时候, 我们希望公式会有换行, 于是我们使用\来进行换行. 同时, 我们还希望换行之后公式可以指定地方进行对齐, 于是我们可以使用&来指定对齐的地方. 下面我们来看一个例子.
首先第一个例子我们希望换行之后与第一行的等号进行对齐, 于是在等号的位置加上&.
- \begin{equation} \label{part3_shapley_eq3}
- \begin{aligned}
- f_{x}(z^{\prime}) & = f_{x}(z) + z^{\prime}, \\
- & for \; all \; z^{\prime} \subseteq \{x^{\prime}_1,...,x^{\prime}_n\}
- \end{aligned}
- \end{equation}
第二个例子我们希望在加号的位置进行对齐, 于是我们在加号的位置加上&.
- \begin{equation} \label{part3_shapley_eq3}
- \begin{aligned}
- f_{x}(z^{\prime}) = f_{x}(z) & + z^{\prime}, \\
- & for \; all \; z^{\prime} \subseteq \{x^{\prime}_1,...,x^{\prime}_n\}
- \end{aligned}
- \end{equation}
最终上面两个生成的效果如下所示:
关于大括号的使用(对齐)
下面举一个使用大括号的例子, 可以将多行公式包起来. 注意在right后面有一个点.
- \begin{equation} \label{part1_2}
- \left\{
- \begin{aligned}
- & \pi(s, UP) & = & P(A=UP|S=s) & = & 0.1 \\
- & \pi(s, DOWN) & = & P(A=DOWN|S=s) & = & 0.2 \\
- & \pi(s, LEFT) & = & P(A=LEFT|S=s) & = & 0.3 \\
- & \pi(s, RIGHT) & = & P(A=RIGHT|S=s) & = & 0.4 \\
- \end{aligned}
- \right.
- \end{equation}
最终的效果如下所示.
关于多列的对齐
我们可以将公式按照多列来进行对齐,使用 align
即可完成。下面是一个简单的例子:
- \documentclass{article}
- \usepackage{amsmath}
- \begin{document}
- \begin{align*}
- x&=y & w &=z & a&=b+c\\
- 2x&=-y & 3w&=\frac{1}{2}z & a&=b\\
- -4 + 5x&=2+y & w+2&=-1+w & ab&=cb
- \end{align*}
- \end{document}
最终的结果如下图所示:
如果我们想要加上引用,只需要按照下面进行修改即可:
- \begin{align*}
- x&=y & w &=z & a&=b+c\\
- 2x&=-y & 3w&=\frac{1}{2}z & a&=b\\
- -4 + 5x&=2+y & w+2&=-1+w & ab&=cb
- \stepcounter{equation}\tag{\theequation}\label{myeq1}\\
- \end{align*}
- See~\eqref{myeq1}
运行上面代码,最终结果如下图所示:
参考资料,Label one line in align* environment
限制 align 的宽度
有的时候使用 align
可能会公式过宽,就像下面这样:
于是我们可以使用 resizebox
配合 minipage
完成缩放,下面是一个简单的例子:
- \resizebox{.99\linewidth}{!}{
- \begin{minipage}{\linewidth}
- \begin{align*}
- R(2,draw,4) &= 0 & R(2,draw,5) &= 0 & R(2,draw,done(6)) &= 0 & R(2,stop,done) &= 2 \\
- R(3,draw,5) &= 0 & R(3,draw,done(6)) &= 0 & R(3,draw,done(7)) &= 0 & R(3,stop,done) &= 3 \\
- R(4,draw,done(6)) &= 0 & R(4,draw,done(7)) &= 0 & R(4,draw,done(8)) &= 0 & R(4,stop,done) &= 4 \\
- R(5,draw,done(7)) &= 0 & R(5,draw,done(8)) &= 0 & R(5,draw,done(9)) &= 0 & R(5,stop,done) &= 5 \\
- \stepcounter{equation}\tag{\theequation}\label{eq_q_2_2_2} \\
- \end{align*}
- \end{minipage}
- }
最终的效果如下图所示:
参考资料:How to rescale equations formatted using 'align'? Resizebox doesn't appear to work
关于多行公式后面的条件
- \begin{equation}
- pow(x, n) =
- \left\{
- \begin{aligned}
- & pow(x, n//2)^{2} & \text{if } n \% 2 == 0 \\
- & pow(x, n//2)^{2} \cdot x & \text{if } n \% 2 == 1
- \end{aligned}
- \right.
- \end{equation}
结果如下所示:
参考资料: How to write conditional equations with one-sided curly brackets [duplicate]
多行公式标号
使用align来进行多行的公式, 同时在后面加上\label来进行每一行公式的标号.
- \documentclass{article}
- % 使用中文包
- \usepackage[UTF8]{ctex}
- \usepackage{algorithmic}
- \usepackage{amsmath, amssymb,amsfonts}
- \begin{document}
- \begin{align}
- & \mathbb{R}, \mbox{实数集} \label{part1:1}\\
- & \mathbb{Z}, \mbox{整数集} \label{part1:2}\\
- \end{align}
- \end{document}
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论