在公式中输入 \sin 或 \log 这样的函数名时,它们会以直立体(罗马体)排版,并在前后带有正确的空白。这不是装饰。数学模式会把每个字母都当作变量,所以直接输入 sin(x) 会变成三个变量 s、i、n 的乘积;因此 LaTeX 预先把常用函数名定义成命令。本页介绍三角、对数和指数函数族;像 \lim、\max 这样把下标放在正下方的相关算子;\bmod、\pmod 等模运算写法;以及在所需算子不在列表中时如何自定义。
为什么需要具名算子
在数学模式中,每个英文字母都会被视为变量名,并以数学斜体排版。因此输入 sin x 得到的不是“正弦”,而是 s、i、n、x 四个量的乘积,字形倾斜,间距也按变量串处理。这违背了函数名和常数应使用直立体的数学惯例。
正确做法是使用 \sin 这样的专用命令。LaTeX 预定义了常用函数和算子的名称;它们都会以直立体排版,并自动获得算子前后的正确间距。例如 \sin x 会得到教科书式的结果:直立的“sin”后接一个细空白,再接变量 x。这些命令都属于标准 LaTeX,不需要额外宏包(只有自定义算子时需要 amsmath,见下文)。
三角、对数与指数
最常用的是三角函数、双曲函数、对数和指数这一组。它们是普通算子:即使带上下标,标记也放在符号右侧,而不是正下方(下方型见下一节)。
- 三角函数:
\sin\cos\tan\cot\sec\csc,以及反函数\arcsin\arccos\arctan。 - 双曲函数:
\sinh\cosh\tanh\coth。 - 对数:
\log(一般对数)、\ln(自然对数)、\lg(以 2 为底的对数)。 - 指数及其他:
\exp(指数函数)、\deg(次数)、\dim(维数)、\ker(核)、\hom、\arg(幅角)。
底数和指数直接使用普通的上下标机制。\log_2 x 会得到以 2 为底的对数,小小的 2 位于“log”右下;\sin^2\theta 则把指数 2 放在“sin”右上,也就是惯用的 sin²θ。\log、\ln、\lg 按含义选择:自然对数用 \ln,以 2 为底的对数(信息论中常见)用 \lg。
\[
\sin^2\theta + \cos^2\theta = 1, \qquad
\log_2 8 = 3, \qquad
\ln e = 1.
\]在这个陈列公式中,“sin”“cos”“log”“ln”都以直立体排版;\sin^2\theta 把 2 放在 sin 右上,\log_2 8 把 2 放在 log 右下。三个公式在同一行,用宽空白 \qquad 分隔。作为对比,如果像 sin^2\theta 那样省掉 \,s、i、n 会被当作斜体变量排版,间距也会错误。
把界标放在下方的算子
与上一节的函数不同,还有一组算子会把下标直接放在符号正下方。极限、上确界和下确界、最大值和最小值都属于这一类,因为数学惯例会把“在什么范围或条件下”醒目地写在符号下面。
\lim(极限)、\limsup(上极限)、\liminf(下极限)。\sup(上确界)、\inf(下确界)、\max(最大值)、\min(最小值)。\det(行列式)、\gcd(最大公约数)、\Pr(概率)。- amsmath 添加的命令:
\injlim与\projlim(直极限与逆极限,排成“inj lim”/“proj lim”)、带箭头装饰的变体\varinjlim和\varprojlim,以及\varlimsup/\varliminf,这些在范畴论和函子极限中常见。
这些算子在陈列样式中把下标放在正下方,在文本样式(行内)中则放在右下方。其行为与 \sum、\int 等大型算子完全相同,由样式决定(若想在行内也强制放到下方,可用 \displaystyle;参见“求和、积分与大型算子”)。例如 \lim_{x \to 0} 在陈列公式中会把 x→0 放在“lim”正下方,在正文行内则小小地放在“lim”右下。
\[
\lim_{x \to 0} \frac{\sin x}{x} = 1, \qquad
\max_{1 \le i \le n} a_i .
\]在这个陈列公式中,x→0 位于“lim”正下方,1≤i≤n 位于“max”正下方,各表达式主体接在右侧;\sin x 也正确地以直立体排版。若把同一公式写成行内 $\lim_{x\to0}\frac{\sin x}{x}$,范围就会小小地出现在“lim”右下。
模运算(mod)
模运算中的“mod”会根据上下文有几种写法,它们的间距和括号各不相同。标准 LaTeX 提供 \bmod 和 \pmod;amsmath 还添加了 \mod 和 \pod。
\bmod 是作为二元运算符的 mod(b 表示 binary)。写 5 \bmod 3 时,5、“mod”和 3 之间会得到二元运算符间距,排成“5 mod 3”。当你表示值本身,也就是余数时使用它。相比之下,\pmod{n} 是带括号的模数,附加在同余式末尾。写 a \equiv b \pmod{n} 会在公式右侧稍隔开地排出“(mod n)”,得到“a ≡ b (mod n)”(参数 n 用花括号传入)。加载 amsmath 后,行内公式中 \pmod 前的空白会自动收紧。
\[
5 \bmod 3 = 2, \qquad
17 \equiv 5 \pmod{12}.
\]在这个陈列公式中,左边表达式以二元运算符间距排成“5 mod 3 = 2”;右边表达式排成“17 ≡ 5 (mod 12)”,中间有同余符号 \equiv,末尾附加带括号的“(mod 12)”。
amsmath 添加的两个命令是 \pmod 的变体。\mod{n} 只排出“mod n”,不加括号(有些作者喜欢这种前面带空白的写法);\pod{n} 则省去“mod”但保留括号,排成“(n)”。下表区分这四种形式。
| 命令 | 输出(如 n=3) | 用途/备注 |
|---|---|---|
\bmod | a mod b | 二元运算符;表示余数值。标准 LaTeX |
\pmod | (mod 3) | 附加在同余式末尾;带括号。标准 LaTeX |
\mod | mod 3 | 无括号变体;需要 amsmath |
\pod | (3) | 省略“mod”,只保留括号;需要 amsmath |
定义自己的算子
有时你会想把列表中没有的函数名,例如符号函数 sgn、迹 tr、秩 rank、像 Im,也以正确的直立体排版。若只是临时使用,可用 amsmath 的 \operatorname{…}。写 \operatorname{sgn} x 会把“sgn”以直立体和适当间距排出,质量与 \sin 等命令相同。
如果同一个算子会反复使用,就在导言区用 \DeclareMathOperator{\sgn}{sgn} 定义一次。正文中只需写 \sgn,定义集中在一处。对于像 \lim 那样下标应直接放在下方的算子,使用带星号形式 \DeclareMathOperator*{\argmax}{arg\,max}(临时使用时,带星号的 \operatorname*{…} 也一样)。无星号把上下标放在右侧;有星号在陈列公式中放到下方。它们都由 amsmath 提供(内部是 amsopn 包,amsmath 会自动加载),因此需要 \usepackage{amsmath}。
\usepackage{amsmath}
\DeclareMathOperator{\sgn}{sgn}
\DeclareMathOperator*{\argmax}{arg\,max}
% 本文中 / in the body:
% \[ \sgn x, \qquad \argmax_{x \in S} f(x) \]完成这些声明后,在陈列公式中 \sgn x 会得到直立的“sgn”和变量 x,而 \argmax_{x \in S} 会排出“arg max”(两词之间有 \, 细空白),并把 x∈S 直接放在其下方。名称中的 \, 用来保持“arg”和“max”之间的合适间隔。只要定义一次,以后想改变记号时只改导言区一行即可影响整个文档。