计算机技术学习札记

LaTeX 公式简明教程

作为 \(\LaTeX\) 引以为傲的功能之一,\(\LaTeX\) 的公式语法在许多 \(\TeX\) 排版引擎以外的地方被广泛运用,其已经成为了事实上的数学公式数字化表示的标准。本文旨在用最少的语言介绍清楚 \(\LaTeX\) 公式是什么,以及如何用它写出普通大学高等数学水平的各类公式。

LaTeX 和它的公式系统

\(\LaTeX\) 读作「拉泰克」「雷泰克」或者「~泰赫」,不应读成「~泰克斯」。它是一套基于 \(\TeX\) 的排版系统,用于排出高质量的各类文档和书籍。在处理数学公式上,\(\LaTeX\) 有一套自己的标记系统,使得用户只需要使用键盘输入类似于

\left\{
  \begin{aligned}
    & \nabla\cdot\mathbf{E}=\frac{\rho}{\varepsilon_0} \\
    & \nabla\cdot\mathbf{B}=0 \\
    & \nabla\times\mathbf{E}=-\frac{\partial\mathbf{B}}{\partial t} \\
    & \nabla\times\mathbf{B}=\mu_0\mathbf{J}+\mu_0\varepsilon_0\frac{\partial\mathbf{E}}{\partial t}
  \end{aligned}
\right.

的代码,即可排出复杂而美观的公式:

\[\left\{ \begin{aligned} & \nabla\cdot\mathbf{E}=\frac{\rho}{\varepsilon_0} \\ & \nabla\cdot\mathbf{B}=0 \\ & \nabla\times\mathbf{E}=-\frac{\partial\mathbf{B}}{\partial t} \\ & \nabla\times\mathbf{B}=\mu_0\mathbf{J}+\mu_0\varepsilon_0\frac{\partial\mathbf{E}}{\partial t} \end{aligned} \right.\]

请千万不要被上面的代码吓到——只需读完本文,你也可以理解并写出上面这样的公式。本文不会介绍和 \(\LaTeX\) 有关的更多内容,而只介绍其公式语法的使用。这是因为,\(\LaTeX\) 这套公式标记系统简便好用,使得许多其他地方也用这样的方式来输入公式,因此将 \(\LaTeX\) 公式部分独立出来介绍,合情合理。

哪里会用到 LaTeX 公式

许多编辑器都接受以 \(\LaTeX\) 公式格式输入公式,例如:

  • 诸如 Typora 等的许多 Markdown 编辑器;

  • 诸如 NotionFlowUs 等在线笔记平台;

  • 自 2019 版本起的 MS Word;

  • MediaWiki 等平台;

  • 本网站 的编辑后台;……

在不同地方输入公式的方法是不同的。对于多数 Markdown 编辑器,将 \(\LaTeX\) 公式用 $ 包裹起来,就能正确解析公式。而在 Notion 中,按 / 并选择 Inline equation 或者 Block equation,即可进入公式输入模式。一些其他的平台则亦有不同的公式输入入口。但无论是哪个平台,只要它支持 \(\LaTeX\) 公式格式,那么下面所介绍的内容都是适用的。下图是在 Notion 上进入公式输入的图片。

简单线性公式的输入

这里的简单线性公式,指的是不换行的简单公式,公式中穿插有各种数学符号。例如:

\[g(x)=x^2\sin(2x-3)\]

数字、字母和上下标

键盘上可以直接打出的数字、字母,全部按原样即可输入。例如,2x + 3 - y 即可排出 \(2x + 3 - y\)(5 - 3a) / 2 则能排出 \((5 - 3a) / 2\)。和许多编程语言一样,空格是可选的,1 + 21+2 没有什么不同。

上标用 ^ 输入,下标用 _ 输入。比如,x^2 可以排出 \(x ^ 2\),而 (3 - 2x)_i 可排出 \((3 - 2x)_i\)。但当上 / 下标多于一个字时,要用 {} 把它们包起来,例如:

  • 3^{22} 会排出 \(3^{22}\),但 3^22 则排出 \(3^22\)

  • x^{5y+6} 可以排出 \(x^{5y+6}\)。如果没有花括号,它会变成 \(x^5y+6\)

导数符号即是 ',可以算一种特殊的上标,如 f'(x) 即可排出 \(f'(x)\)。二阶导就是 f''(x),即 \(f''(x)\)。超过三阶的 \(n\) 阶导数一般就写成 \(f^{(n)}(x)\) 了。

分式与根式

在键盘上不能打出来的东西,需要使用一种叫做「控制序列」的字符串来输入。在 \(\LaTeX\)(准确来说是 \(\TeX\))中,所有以反斜杠 \ 开头的字串都会被理解为「控制序列」。下面我们介绍我们遇到的第一个控制序列:分式。

分式使用 \frac 输入。它的用法是 \frac{分子}{分母}。例如:

  • \frac{1}{2} 即是 \(\frac{1}{2}\)

  • \frac{f(x)}{g(x-2)} 即是 \(\frac{f(x)}{g(x-2)}\)

  • 分式当然可以套分式,例如 \frac{2x+5}{3x-\frac{1}{1-x}} 可以排出 \(\frac{2x+5}{3x-\frac{1}{1-x}}\)

而根式是我们介绍的第二个控制序列。它使用 \sqrt 输入,用法是 \sqrt{式子}。例如:

  • \sqrt{2}\(\sqrt{2}\)

  • \sqrt{x^2-3} 能排出 \(\sqrt{x^2-3}\)

  • 对于高次根式,使用 \sqrt[3]{式子}。如 \sqrt[3]{x^4+2}\(\sqrt[3]{x^4+2}\)

  • 当然也可以套,如 \(\sqrt{\sqrt{\sqrt{\sqrt{x}}}}\)

  • 也可以和分式套在一起,比如 \(\sqrt{\frac{\sqrt{x}}{2x+\sqrt{3}}}\)

希腊字母、关系符和算符

显然,希腊字母是无法直接用键盘打出来的,因此也需要用控制序列。简单来说,用 \ 加上希腊字母的名称就能打出这个字母,如 \omega 打出小写的 \(\omega\),而 \Omega 打出大写的 \(\Omega\)\(\alpha\)\(\beta\)\(\gamma\) 分别用 \alpha\beta\gamma 打出。常见希腊字母的名称请自行上网搜索,这里不再赘述。

一个特例是部分希腊字母有多种不同的写法:

字母名写法 1写法 2
Epsilon\epsilon \(\epsilon\)\varepsilon \(\varepsilon\)
Theta\theta \(\theta\)\vartheta \(\vartheta\)
Pi
\pi \(\pi\)\varpi \(\varpi\)
Rho\rho \(\rho\)\varrho \(\varrho\)
Sigma\sigma \(\sigma\)\varsigma \(\varsigma\)
Phi\phi \(\phi\)\varphi \(\varphi\)

在各种关系符中,只有大于 \(<\) 小于 \(>\) 等几个简单的关系符可以直接用键盘打出。其他的需要依赖控制序列。常用的关系符有:

  • 大于等于 \geq 即 Greater than or EQual to \(\geq\)。此外,\geqslant 用于打出斜边的 \(\geqslant\)

  • 小于等于 \leq 即 Less than or EQual to \(\leq\)。同样,\leqslant\(\leqslant\)

  • 不等于 \neq 即 Not EQual \(\neq\)

  • 约等于 \approx 即 APPROXimate \(\approx\)

类似的,算符中,也只有加减法等几个简单算符能直接打出。我们需要使用控制序列来打出其他算符。例如:

  • 乘法(叉乘)\times \(\times\)

  • 除法 \div \(\div\)

  • 点乘 \cdot \(\cdot\)。例如,a\cdot b \(a\cdot b\)

  • 蕴含 \to 或者 \rightarrow \(\rightarrow\)。事实上,你可以试试 \leftarrow\leftrightarrow 以及将它们的第一个字母大写,看看能打出什么。

前面我们提到,控制序列以反斜杠 \ 开始,那控制序列到哪里结束呢?诸如分式 \frac 和根式 \sqrt 这样后面带 {} 的控制序列,它最后一对花括号闭合时,整个控制序列就结束了。我们可以在后面直接写内容,如 \frac{1}{2}x 即可排出 \(\frac{1}{2}x\)。但对于上面的各种希腊字母、算符、关系符,它们的控制序列后面并不带东西,因此需要一个空格来标记「本控制序列到此为止」,否则会造成公式解析出错,如:

  • a\times b 将排出 \(a\times b\),但 a\timesb 会出错,因为解析器会认为 \timesb 是一个整体,而这是一个无效的控制序列。

  • \alpha_53\times\beta 则没有空格也能排出 \(\alpha_5\)\(3\times\beta\),那是因为上下标和其他控制序列出现时,必然标志着前一个控制序列结束。

巨算符

巨算符指的是求和号、积分号、极限号等体积较大的算符。它们不仅不能直接打出,往往还「拖泥带水」。它们也需要使用控制序列来输入。

常用的巨算符有:

名字控制序列符号
求和\sum\(\sum\)
求积\prod\(\prod\)
积分、二重和三重积分\int \iint\iiint\(\int\) \(\iint\) \(\iiint\)
环路积分
\oint\(\oint\)
极限\lim\(\lim\)

巨算符往往会带有一些其他部分,如积分上下限和求和起终点。它们在 \(\LaTeX\) 公式中以上下标的形式处理。例如,对 1 到 100 求和,可以用 \sum_{i=1}^{100}i 来打出:

\[\sum_{i=1}^{100}i\]

而将 \(f(x)\)\(a\) 定积分到 \(b\),可以用 \int_a^bf(x)\mathrm{d}x 打出(\mathrm{d} 用来打出正体的 \(\mathrm{d}\)):

\[\int_a^bf(x)\mathrm{d}x\]

其他巨算符的用法类似,读者可以自行尝试。

常用函数

诸如三角函数、对数函数这类常用函数,往往要求使用正体排版,而 \(\LaTeX\) 公式中字母默认为斜体,这使得 sin(x) \(sin(x)\) 这样的用法并不正确(但很多人在这样用)。幸运的是,\(\LaTeX\) 中已经内置好了这些常用函数的控制序列,如:

  • \sin 用于打出 \(\sin\),如 \sin(x+2) 即有 \(\sin(x+2)\)

  • \log 可以打出 \(\log\),借助下标我们可以打出 \log_2x\(\log_2x\)

其他还有诸如 \ln\arcsin 等许多函数。与 \(sin(x+2)\) 这种用法相比,\(\sin(x+2)\) 是正确的,更加适合正式场合。

数学重音

最后我们介绍数学重音,即「穿靴戴帽」的数字字母。常用的数学重音有:

  • \bar 用于给字母头上加一杠,如 \bar{x} \(\bar{x}\)。多个字母请用 \overline,如 \overline{AB} \(\overline{AB}\)

  • \vec 用于给字母头上加一个右箭头,如 \vec{x} \(\vec{x}\)。多个字母请用 \overrightarrow,如 \overrightarrow{AB} \(\overrightarrow{AB}\)。事实上还有 \overleftarrow,不妨试试。

  • \hat 用于给字母戴个帽子,如 \hat{a} \(\hat{a}\)。多个字母……有这种情况吗?

更多的控制序列

受限于篇幅,本文不会介绍更多的控制序列,亦不会罗列一张张符号总表。事实上,我们应当充分利用我们的搜索引擎:当你不知道一个符号如何用 \(\LaTeX\) 打出时,直接上网搜索「某符号 LaTeX」,一般都能很快找到答案:

如果你有收藏癖,想要一个包罗万象的 \(\LaTeX\) 符号总表,那么你或许可以搜索《一份(不太)简短的 LaTeX 2e 介绍》,然后翻到它第四章第九节。那里也许有你想要的东西。

多行公式的输入

下面我们来介绍多行公式的输入。这里的多行公式是一个广义的概念,像

\[\begin{aligned} \sum_{i=1}^\infty\frac{1}i &= 1+\frac{1}2+\frac{1}3+\frac{1}4+\cdots+\frac{1}n+\frac{1}{n+1}+\cdots \\ &= 1 + (\frac{1}2+\frac{1}3)+(\frac{1}4+\frac{1}5+\frac{1}6+\frac{1}7)+\cdots \\ &>1+(\frac{1}2+\frac{1}2)+(\frac{1}4+\frac{1}4+\frac{1}4+\frac{1}4)+\cdots \\ &= 1+1+1+\cdots \end{aligned}\]

这样由多个单行公式组成的复合公式属于多行公式,而如

\[\boldsymbol{A}=\left[ \begin{matrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{matrix} \right]\]

这样的含矩阵公式也是多行公式。显然,上一节所介绍的公式都是单行线性的。要输入这样多行的复杂公式,我们就需要使用一些特殊的东西——「环境」。

多行公式环境 aligned

环境是 \(\LaTeX\) 中的概念,用来标记一些特殊的排版元素,例如表格、图片。在 \(\LaTeX\) 公式中也会使用环境,而这些环境就是我们使用多行公式的关键。

我们介绍的第一个环境是 aligned 环境,它用来产生支持对齐功能的多行公式。要使用环境,我们需要使用 \begin 控制序列和 \end 控制序列来标记环境开始和结束。例如:

\begin{aligned}
  % 一些公式代码
\end{aligned}

就能产生一个 aligned 环境。如果你的编辑器不支持公式源码换行,那么写在一行也是可以的:

\begin{aligned}  一些公式代码  \end{aligned}

aligned 环境的基本用法是:将你要输入的公式罗列其中,用 \\ 控制序列来换行。例如:

\begin{aligned}
  f(x)=2x+3 \\
  g(x)=e^x-5
\end{aligned}

就能排出:

\[\begin{aligned} f(x)=2x+3 \\ g(x)=e^x-5 \end{aligned}\]

也可以把整个公式源码写在一行上。但请注意,和其他控制序列一样,\\ 后面要留一个空格:

\begin{aligned}f(x)=2x+3\\ g(x)=e^x-5\end{aligned}

aligned 环境支持将多行公式在特定的位置对齐。使用 & 标记要对齐的位置。如

\begin{aligned}
  a+b+c+d&=e \\
  f&=g+h+i+j
\end{aligned}

就能让两个公式在 \(=\) 处对齐:

\[\begin{aligned} a+b+c+d&=e \\ f&=g+h+i+j \end{aligned}\]

现在你应该能试着打出上面那个调和级数求和的公式组合了。

环境是一个盒子

如果在一个 aligned 环境前后再打一些公式会怎么样呢?

e^x+2x-3=\begin{aligned} f(x)=x^2 \\ g(x)=e^x \end{aligned}-2

\[e^x+2x-3=\begin{aligned} f(x)=x^2 \\ g(x)=e^x \end{aligned}-2\]

前面提到了多行公式的环境 aligned,其实本质是产生了一个「盒子」,这个盒子很大,里面装了一些东西。整个盒子其实还是单行公式的一部分——不如说,在 \(\LaTeX\) 中的多行公式,是通过一个盒子「模拟」出来的。这个盒子也能成为其他公式的一部分,也能像一个数字或者字母一样「塞」到其他公式之中。

在这一思想之上,我们便很容易想到诸如

\[\left\{ \begin{aligned} & f(x)=x^2-3x+6 \\ & g(x)=\log_2f(x)+e^x \end{aligned} \right.\]

的公式组怎么输入了。如果不看左侧的花括号,它就是一个靠左对齐的 aligned 环境。而花括号呢?我们也许只要找一个比较大的花括号放在 aligned 环境之前。为了产生这个比较大的花括号,我们先介绍两个控制序列:\left\right

长高的括号与公式组

\left\right 用来生成能随着公式高度变化的符号。举个例子:

  • 括号是不会随着公式「长高」而变长的,如 (\frac{\sum_{i=1}^ni}{\prod_{j=1}^nj}) 排出的是

    \[(\frac{\sum_{i=1}^ni}{\prod_{j=1}^nj})\]

    注意看两个括号的大小,它们并没有完全「包」住中间的公式。

  • 使用 \left(\right) 分别来生成左、右括号,上面的代码改为 \left(\frac{\sum_{i=1}ni}{\prod_{j=1}nj}\right),则排出公式

    \[\left(\frac{\sum_{i=1}^ni}{\prod_{j=1}^nj}\right)\]

    可以看到括号「长高」了。我们容易明白,\left\right 能够生成它们后面紧跟的那个符号的「增大」版。例如 \left[\right] 就能生成一对长大的中括号:

    \[\left[\frac{1}{2}\right]\]

\left\right 必须成对出现,但不要求两边是同一种括号——也就是说,不能只有 \left 而没有 \right,但 \left[\right) 也是算一对的。幸运的是,\(\LaTeX\) 提供了一种生成单边增高括号的方法:用 \left(\right.,即可生成一对只有左括号的增高圆括号;同理,用 \left.\right),则可以只要右半边。

那么,回到我们之前的公式组场景,答案已经很明朗了:我们只要在 aligned 环境之前加一个 \left{,之后加一个 \right.,就……

报错啦!花括号 {} 在整个 \(\LaTeX\) 系统中都是非常特殊的存在——大量控制序列用它来输入参数,因此当我们要排出真正的花括号时,我们需要转义——用 \{\} 才能排出真正的花括号。因此,我们要用 \left\{\right. 包裹我们的 aligned 环境:

\left\{
  \begin{aligned}
    & f(x)=x^2-3x+6 \\
    & g(x)=\log_2f(x)+e^x
  \end{aligned}
\right.

\[\left\{ \begin{aligned} & f(x)=x^2-3x+6 \\ & g(x)=\log_2f(x)+e^x \end{aligned} \right.\]

当然,写在一行也是可以的:

\left\{\begin{aligned}& f(x)=x^2-3x+6 \\ & g(x)=\log_2f(x)+e^x\end{aligned}\right.

矩阵环境 matrix

我们再介绍另一种特殊的「多行」公式环境——矩阵 matrix 环境。它用来生成一个数表或者说阵列。例如:

\begin{matrix}
  1 & 2 & 3 & 4 \\
  5 & 6 & 7 & 8
\end{matrix}

就能排出:

\[\begin{matrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \end{matrix}\]

配合之前提到的 \left[\right],很容易想到矩阵的写法,就是在 matrix 环境前后用括号包住。至于行列式,则可以用 \left|\right| 来包住:

\left[\begin{matrix}1&2&3&4\\ 5&6&7&8 \end{matrix}\right]

\[\left[\begin{matrix}1&2&3&4\\ 5&6&7&8 \end{matrix}\right]\]

试试打几个矩阵吧!这里再提几个「省略号」的用法,它们分别是:

  • 横向省略号:\cdots\(\cdots\),用于水平方向的省略;

  • 纵向省略号:\vdots\(\vdots\),用于竖直方向的省略;

  • 对角省略号:\ddots\(\ddots\),一般用在矩阵中,用于斜向的省略。

到这里,本文的主要内容就已经介绍完毕了。作为一门工具,\(\LaTeX\) 公式需要在使用中熟练,各种控制序列和排版的技巧也要在使用中积累,因此本文只能起到一个「敲门砖」的作用。现在,打开一个支持 \(\LaTeX\) 的平台,试试将你所了解的数学公式变成指尖下的代码吧!

再多说一些东西

排版是一门学问,有着它自己的知识体系。而作为科技类文章中的常客,数学公式的排版也有它自己的规矩。借着这里介绍完 \(\LaTeX\) 公式的基本语法,我们再介绍一些数学公式排版的注意事项。

字形

在数学公式中会同时出现「正体字」和「斜体字」。请看下面的公式:

\[\left\{ \begin{aligned} & M=\iiint_\Omega\rho\mathrm{d}x\mathrm{d}y\mathrm{d}z \\ & \rho=1.0\ \mathrm{kg}/\mathrm{m}^3 \end{aligned} \right.\]

在上述公式中,\(M\)\(\rho\)\(x\)\(y\) 等字母都是斜体,而 \(\mathrm{d}\)、数字和单位 \(\mathrm{kg}/\mathrm{m}^3\) 则是正体。显然,我们需要按一个规则来给这些元素合适的字形。

一个简单的原则(尽量符合国家标准 GB/T 3101 系列)是:

  • 数字都是正体。没有特殊意义的字母,如变量 \(x\)、函数 \(f(x)\) 等都是斜体。下面提到的是「特殊意义」。

  • 表示常用函数的字母是正体,比如三角函数 \(\sin(x)\)、对数函数 \(\log_a(b)\),指数函数 \(\exp(x)\)。在 \(\LaTeX\) 中,它们可以用 \sin \log \exp 打出来。如果那个函数比较少见,无法用这样的方式打出(如\arctanh,这个控制序列会报错),用 \mathrm{}手动产生,如\mathrm{arctanh}。如果不这么打,产生的公式如 \(sin(x)\) 是不合规的。

  • 积分算子 \(\mathrm{d}\) 是正体,用 \mathrm{d} 手动产生。

  • 自然对数的底数 \(\mathrm{e}\) 是正体,用 \mathrm{e} 手动产生,如 \(\mathrm{e}^x\) \mathrm{e}^x

  • 虚数单位 \(\mathrm{i}\) 是正体,用 \mathrm{i} 手动产生。

  • 单位是正体,用 \mathrm{} 手动产生公式中的字母,如 \(\mathrm{kg}/\mathrm{m}^3\) \mathrm{kg}/\mathrm{m}^3

数学公式中除了正体和斜体这两种常见字形,还有一些常用的其他字形,这里也一并介绍:

  • 粗正体,用 \mathbf{} 产生。如实数集 \(\mathbf{R}\)、自然数集 \(\mathbf{N}\)

  • 粗斜体,用 \boldsymbol{} 产生。用于向量和矩阵,如向量 \(\boldsymbol{a}\)、矩阵 \(\boldsymbol{X}\)

  • 花体,用 \mathcal{} 产生,如 \(\mathcal{K}\)

参考文献与书籍推荐

  • 《科技论文写作教程》——强烈建议所有需要写作自然科学文章的同学,都仔细阅读此书。

  • 《一份(不太)简短的 LaTeX 2e 介绍》——一份 \(\LaTeX\ 2_\varepsilon\) 入门教程。