naive blog
LaTeX入门(十一)——公式
终于,终于我们要进入LaTeX最著名的部分了——公式编辑。不得不说,LaTeX对数学公式的处理还是比其他软件高超得多,而我们日常看到的绝大多数排版出来的公式,也都是LaTeX的功劳。LaTeX的数学公式排版功能如此强大,也是由于其关于数学公式方面有一整套完善的框架来完成。下面我们将一点点介绍LaTeX的数学模式。
 首先,LaTeX本身自带数学公式的排版指令,但并不是十分丰富和完善。美国数学学会(American Mathematical Society, AMS)为LaTeX提供了一个宏包
 
  amsmath
 
 . 这个宏包是我们在进行数学方面写作的时候必须使用的宏包。因此,我们首先需要在导言区写上
 \usepackage{amsmath}
行内公式与行间公式
总得来说,在一篇论文中,公式的表现形式有两种:行内公式与行间公式。行内公式是指与其前后上下文出现在同一行内的公式,而行间公式则是单独为一行的公式。行内公式一般并不是关键性公式,只是个别一个小步骤或者辅助性公式,而行间公式则一般是大型公式或事关键性公式。
说了这么多,行内公式和行间公式有什么区别呢?我们来看一下一个例子:
 
在这个例子中,关于 $\displaystyle x_i$ 的公式是行内公式,而关于 $\displaystyle y$ 的公式是行间公式。而我的源码则是:
If we let $x_i=\sum_{j=1}^ma_{ij}$, then we can get
\[
y=\sum_{i=1}^nx_i.
\]
 这里面具体的指令我们之后再说。但我们在这里发现,
 
  $...$
 
 中产生的是行内公式,
 
  \[...\]
 
 中产生的是行间公式。对于同样的指令
 
  \sum
 
 ,在行内公式里,
 
  $\displaystyle j=1$
 
 和
 
  $\displaystyle m$
 
 都在它的右边,而在行间公式中,则跑到了它的上面和下面。这也是数学论文写作的规范,也就是,在行内的公式应该压缩其上下,而行间的则不用。这就是行内公式与行间公式的主要区别。
 正如上面所说,
 
  $...$
 
 中产生的是行内公式,
 
  \[...\]
 
 中产生的是行间公式。而行间公式还有许许多多的环境可以使用,这个之后会提及。那么,怎么在行内产生行间公式的效果呢?用
 
  \displaystyle
 
 命令。也就是,
 
  $\displaystyle...$
 
 其后的行内公式都会有行间公式的效果。比如说,如果我的源码变成了
 If we let $\displaystyle x_i=\sum_{j=1}^ma_{ij}$, then we can get
\[
y=\sum_{i=1}^nx_i.
\]
那么最终排版出来的效果是:
 
此外,还有针对单个运算符的改变方式,这个会在之后讲到上标与下标的时候提及。
数学模式
 根据我们上面的例子,大家应该对LaTeX的数学模式有了一个大致的印象了。也就是说,在正常情况下,是文本模式,基本上就是啥都可以输入,但是不会排版出数学公式来。我如果在正常的文本模式下输入
 
  \sum_{j=1}^n
 
 这样的数学公式的指令,那么是会报错滴。进入数学模式,只有通过
 
  $...$
 
 ,
 
  \[...\]
 
 或者其他数学模式环境才能进入数学模式。在数学模式中,输入的都会被认作是数学公式。比如说,我如果在数学模式中输入
 
  naive
 
 , 排版出来的结果会是
 
  $\displaystyle naive$
 
 . 不仅字体不一样,而且其他文本信息也不一样。因为LaTeX自动会认为这是一个变量的名字。所以,除非特殊情况,否则在绝大多数情况下我们在数学模式中输入的应该只有数学公式。
基础的数学公式
下面,为了大家能尽快使用数学模式,就先给大家介绍一些基础的数学公式的指令。
- 
  四则运算
  
 加法+, 减法-, 叉乘\times, 点乘\cdot, 分数\frac{}{}, 第一个大括号内为分子,第二个大括号内为分母
- 
  指数对数
  
 指数{}^{}, 第一个大括号内为底数,第二个大括号内为指数;对数\log_{}, 大括号内为真数;根号\sqrt{}, 高次根号\sqrt[]{}, 中括号内为次数
- 
  上标下标
  
 上标同指数一样{}^{},下标为{}_{}.
 这里特别提一句,在有的指令后面,^和_不一定是上下标。比如说\sum_{}^{}, 在行间公式模式下,就代表正下方和正上方。如果要更改这个方式,可以用\limits和\nolimits指令。比如说,如果想让行间公式的求和符号的上下标在角上而不在上下方,可以写\sum\nolimits_{}\nolimits^{}, 如果想让行内公式的求和符号的上下标在上下方而不在角上,可以写\sum\limits_{}\limits^{}.
- 
  括号
  
 如果我们直接输入(,)这类的括号,那么会被当作一个括号字符,并不会有变化。 我们也可以用\left(,\right)这样的命令来产生括号。具体区别是:
 如果我们源码是(\frac{1}{2}), 那么排版出来的结果是 $\displaystyle (\frac{1}{2})$ ; 如果我们的源码是\left(\frac{1}{2}\right), 那么排版出来的结果是 $\displaystyle \left(\frac{1}{2}\right)$ . 也就是说,括号的大小会跟着里面的内容而变。
 小括号为\left(...\right), 中括号为\left[...\right], 大括号为\left\{...\right\}(这里要注意{和}前均有\), 尖括号为\left<...\right>, 绝对值为\left|...\right|, 范数为\left\|...\right\|.
 此外,还有可能需要我们出现单边括号的情况。比如说 $\displaystyle \left.\frac{x^2}{e^x}\right|_{x=3}$ , 我们只需要将不需要的那半边括号用\left.代替即可。比如说刚刚的公式的源码就是\left.\frac{x^2}{e^x}\right|_{x=3}.
- 
  求和与求积
  
 $\displaystyle \sum_{a}^b$ :\sum_{a}^{b}; $\displaystyle \prod_{a}^{b}$ :\prod_{a}^{b}
- 
  积分与微分
  
 $\displaystyle \int_{a}^{b}$ :\int_{a}^{b}; $\displaystyle \iint_{D}$ :\iint_{D}; $\displaystyle \iiint_{D}$ :\iiint_{D}; $\displaystyle \oint_{C}$ :\oint_{C}
 此外,这个内置的积分符号如果觉得有der丑,可以使用宏包esint, 具体的使用指令可以用texdoc看宏包的说明文档。
 对于微分,有规定说 $\displaystyle \mathrm{d}x$ 中的d一定要是直立体。因此,请在导言区加上一句:
 \def\dif{\mathop{}\!{}\mathrm{d}}
 然后在正文中用\dif代替d
 此外,偏微分 $\displaystyle \partial$ :\partial
- 
  极限
  
 $\displaystyle \lim_{a\to b}$ :\limit_{a\to b}
此外,还有很多其他的符号,大家在网上都可以方便地找到。
数学环境
接下来,就介绍一些不同的数学环境。
 最基础的行间公式环境就是
 
  \[...\]
 
 . 这里面的公式默认居中,并且不能换行,没有编号。
 如果要添加编号,可以使用
 
  equation
 
 环境,即
 
  \begin{equation}...\end{equation}
 
 , 不过该环境依然不能换行
 能够换行的环境,最基础的是
 
  gather
 
 环境,即
 
  \begin{gather}...\end{gather}
 
 , 换行方式为
 
  \\
 
 断行。 该环境每行公式均居中,默认编号。其对应的不编号版本为
 
  gather*
 
 环境,即
 
  \begin{gather*}...\end{gather*}
 
 . 如果要在某一行不编号,则在该行的
 
  \\
 
 前加一个
 
  \notag
 
 .
 其次,可以用
 
  align
 
 环境实现换行且手动对齐。比如说有如下公式:
$\displaystyle \begin{align}f(x)&=\frac{x}{x^2+2x+1}\\&=\frac{1}{x+\frac{1}{x}+2}\end{align}$
它的源码就是
\begin{align}
f(x)&=\frac{x}{x^2+2x+1}\\
&=\frac{1}{x+\frac{1}{x}+2}
\end{align}
 也就是说,用
 
  &
 
 来表示对齐。
 
 
  align
 
 环境是默认编号的,其对应的不编号版本为
 
  align*
 
 环境。
数学模式内的字体
 数学模式下,LaTeX使用了不一样的字体。数学模式的字体族可以通过
 
  \setmathfont{}
 
 (需要使用
 
  unicode-math
 
 宏包)来设置。
 在数学模式下,是默认使用数学字体族的意大利斜体的。如果要使用数学字体族的直立体,可以使用
 
  \mathrm{}
 
 指令,使用数学字体族的粗体,可以使用
 
  \mathbf{}
 
 指令。如果要回到正文字体,可以使用
 
  \text{}
 
 指令。其中,
 
  \text{}
 
 指令还可以让我们在数学模式下输入中文,比如说:
$\displaystyle D(x)=\begin{cases}0&x\text{是有理数}\\1&x\text{是无理数}\end{cases}$
的源码就是
D(x)=\begin{cases}
0&x\text{是有理数}
\\1&x\text{是无理数}
\end{cases}