在 LaTeX 里想打一个大写 alpha,输入 \Alpha,得到的却是 ! Undefined control sequence.——这是初学希腊字母时最常见的翻车现场。原因朴素得让人意外:大写 alpha 的字形和拉丁字母 A 一模一样,所以 LaTeX 认定直接敲 A 就行,压根没有为它定义命令。数学模式里的希腊字母全都遵循这一条方针:只给拉丁字母提供不了的字形起名字。本页就从这条方针出发,依次讲清小写与大写的完整命令表、\epsilon 与 \varepsilon 这类异体字形、如何排出粗体和直立的希腊字母,以及怎样在正文里使用它们。
为什么没有 \Alpha,以及该改打什么
大写希腊字母中有命令的只有 11 个:\Gamma、\Delta、\Theta、\Lambda、\Xi、\Pi、\Sigma、\Upsilon、\Phi、\Psi、\Omega。其余 13 个直接敲对应的拉丁大写字母 A B E Z H I K M N O P T X。翻开 LaTeX 内核的 fontmath.ltx 就会发现,声明的确实只有这 11 行,\Alpha、\Beta、\Epsilon 从一开始就不存在。Α 与 A、Β 与 B、Ε 与 E 在铅字上是同一个字形,没有理由再取第二个名字。
设计上干净利落,对检索的人却相当不友好。搜索 \Alpha 一无所获,不是因为命令「找不到」,而是因为它从来就不存在。报错也只说 ! Undefined control sequence.,并不会提示改敲 A。有意思的对照来自文本模式:正文用的 textgreek 宏包确实定义了 \textAlpha、\textBeta、\textEpsilon。正文里排的是真正的希腊字母而不是数学变量,所以 24 个字母都需要名字。换句话说,数学模式里的「11」根本不是希腊语的事实,而是 拉丁字母覆盖不到的字形数目。
% the eleven uppercase Greek letters that do have commands
\[ \Gamma(n) = (n-1)!, \qquad \Delta x, \qquad \Omega \]
% the other thirteen: type the Latin capital directly
\[ A, B, E, Z, H, I, K, M, N, O, P, T, X \]
% \Alpha, \Beta, \Epsilon ... -> ! Undefined control sequence.小写希腊字母一览:从 \alpha 到 \omega
小写字母中 除 omicron 外的 23 个 都有命令。唯独缺 omicron,原因和大写完全相同:ο 与拉丁小写 o 无法区分,直接在数学模式里敲 o 即可。大写缺 13 个、小写缺 1 个,并不是两条各自为政的例外,而是同一条规则在两处露面。命令名就是字母的英文拼写——\alpha、\beta、\gamma——与其说要背,不如说想一想就能拼出来。
| 命令 | 字形 | 读法 |
|---|---|---|
\alpha | α | 阿尔法 |
\beta | β | 贝塔 |
\gamma | γ | 伽马 |
\delta | δ | 德尔塔 |
\epsilon | ϵ | 伊普西龙(圆形字形) |
\zeta | ζ | 泽塔 |
\eta | η | 伊塔 |
\theta | θ | 西塔 |
\iota | ι | 约塔 |
\kappa | κ | 卡帕 |
\lambda | λ | 拉姆达 |
\mu | μ | 缪 |
\nu | ν | 纽(易与拉丁 v 混淆) |
\xi | ξ | 克西 |
o | o | 奥密克戎——没有命令,直接敲拉丁 o |
\pi | π | 派 |
\rho | ρ | 柔 |
\sigma | σ | 西格马 |
\tau | τ | 陶 |
\upsilon | υ | 宇普西龙 |
\phi | ϕ | 斐(闭合字形) |
\chi | χ | 希 |
\psi | ψ | 普西 |
\omega | ω | 欧米伽 |
有几组容易混淆:\xi(ξ)与 \zeta(ζ)、\nu(ν)与 \upsilon(υ),以及最危险的 \nu(ν)与拉丁小写 v。本想写 ν 却敲成 v,文档照样编译通过,不报任何错,只有印出来的页面是错的。写稿时应当 以命令名而不是字形来核对。另外记住一点:fontmath.ltx 从 letters 字体(Computer Modern 中即 cmmi,数学斜体)取小写字母,所以它们和变量一样是斜体。而下一节会看到,那 11 个大写字母来自完全不同的字体。
11 个大写命令,以及它们为何是直立的
在公式里写 \Gamma 或 \Omega,得到的与小写不同,是 直立(罗马体) 的字形。这并非偶然。查看 fontmath.ltx 的声明会发现,小写取自 letters 字体,而 11 个大写取自 operators 字体——在 Computer Modern 中即 cmr,也就是正文所用的直立字体。把 \Gamma 和 \gamma 并排放进同一个公式,一个笔直,一个倾斜。这是一处著名的不对称,LaTeX 几十年来一直未加改动。
| 命令 | 字形 | 读法 |
|---|---|---|
\Gamma | Γ | 伽马 |
\Delta | Δ | 德尔塔 |
\Theta | Θ | 西塔 |
\Lambda | Λ | 拉姆达 |
\Xi | Ξ | 克西 |
\Pi | Π | 派(不是 \prod) |
\Sigma | Σ | 西格马(不是 \sum) |
\Upsilon | Υ | 宇普西龙 |
\Phi | Φ | 斐 |
\Psi | Ψ | 普西 |
\Omega | Ω | 欧米伽 |
这里藏着两处实务上的麻烦。其一是字体不齐:没有命令的 13 个字母要敲拉丁大写,于是被当作「变量」排成 斜体。\Gamma(直立)与 A(斜体)落在同一行,样子就不统一。其二是把 \Sigma/\Pi 与 \sum/\prod 弄混。前者只是字母,后者是大型运算符——字号不同,行间公式中上下限的摆放位置也不同。求和求积一律写 \sum_{i=1}^{n}、\prod_{i=1}^{n},只有真正需要那个希腊大写字母时才用 \Sigma、\Pi。
\epsilon 与 \varepsilon、\phi 与 \varphi 的区别
\epsilon 排出圆形的 ϵ,\varepsilon 排出月牙形的 ε;同样,\phi 是闭合的 ϕ,\varphi 是开口的 φ。单看名字,\epsilon 像是「标准」的那个——但 数学惯例上多数用的是 ε。ε–δ 论证里的 ε,以及「对任意 ε > 0」中的 ε,印刷时通常都用月牙形。也就是说,要排出别人说「epsilon」时脑中浮现的那个字形,反倒必须敲带 var 的命令。名字与实际用法相互拧着,初学者在这里几乎必然绊一跤。
ϵ 身上还有一桩渊源更久的混淆。表示属于的 ∈ 最初就是希腊字母 epsilon:朱塞佩·皮亚诺在 1889 年的《Arithmetices principia, nova methodo exposita》中用 ε 表示属于关系,并自述这是拉丁语 est(「是」)的缩写。后来两个字形各自独立,但因为长得像,\epsilon 与 \in 至今仍常被搞混,而且写成 x \epsilon A 根本不会报错。\in 被声明为关系符(\mathrel),两侧带有间距;\epsilon 只是普通符号(\mathord)——于是这个错误 会悄无声息地印成一个间距被挤掉的公式。
% the epsilon-delta definition conventionally uses the lunate \varepsilon
\[ |x - a| < \delta \implies |f(x) - f(a)| < \varepsilon \]
% \epsilon is a letter, \in is a relation -- different commands, different spacing
\[ x \in A, \qquad \epsilon > 0 \]| 命令 | 字形 | 说明 |
|---|---|---|
\epsilon | ϵ | 圆形 epsilon |
\varepsilon | ε | 月牙形;数学中更常用 |
\theta | θ | 标准 theta |
\vartheta | ϑ | 手写体 theta |
\pi | π | 标准 pi |
\varpi | ϖ | 形似 ω,容易看错 |
\rho | ρ | 标准 rho |
\varrho | ϱ | 带尾的 rho |
\sigma | σ | 标准 sigma |
\varsigma | ς | 希腊语词尾 sigma;公式中几乎不用 |
\phi | ϕ | 闭合的 phi |
\varphi | φ | 开口的 phi;物理中常用 |
\varkappa | ϰ | 异体 kappa;需要 amssymb |
\digamma | ϝ | digamma(已废弃的古字母);需要 amssymb |
实用原则很简单:在一份文档里选定一种字形并贯彻到底。数学稿件通常选 \varepsilon 和 \varphi;若要迁就既有的版式规范,就依那份规范。上表中只有 \varkappa(ϰ)和 \digamma(ϝ)在标准 LaTeX 中未定义,需要在导言区写 \usepackage{amssymb}——忘了就又会看到 ! Undefined control sequence.。另外要注意,带 var 的异体字形只有小写才有。想让大写变成斜体,那不是异体字的问题,而是字体样式的问题,正是接下来两节的内容。
让希腊字母变粗体——以及 \mathbf{\alpha} 为何无效
要把希腊字母排成粗体,用 \boldsymbol{\alpha}(来自 amsmath 载入的 amsbsy)或 \bm{\alpha}(来自 bm 宏包)。\mathbf{\alpha} 不报错、不警告,也什么都不做。实测盒子宽度,在 10pt 的 Computer Modern 下,\alpha 与 \mathbf{\alpha} 都恰好是 6.43404pt。原因在于符号的「类」:\mathbf 这类数学字母表命令只对 \mathalpha 类符号生效,而 fontmath.ltx 把小写希腊字母声明为 \mathord,根本不在作用范围内。
真正让人费解的是:大写希腊字母 属于 \mathalpha,所以 \mathbf{\Gamma} 确实有效——在同样条件下宽度会从 6.25002pt 变成 6.91663pt。于是就有了那个莫名其妙的现象:大写变粗了,小写就是不变。如果要用希腊字母写向量或张量,一开始就统一使用 \boldsymbol 或 \bm 更稳妥。两者之中 \bm 更灵活:它可以作用于整个子公式,如 \bm{\nabla \times E},并在没有现成粗体时自行合成。
\usepackage{amsmath} % provides \boldsymbol (via amsbsy)
\usepackage{bm} % provides \bm
% ...
\[ \boldsymbol{\alpha} \cdot \bm{\omega}, \qquad \bm{\nabla \times E} \]
% \mathbf{\alpha} silently produces the same box as \alpha直立希腊字母与 ISO 规则:upgreek 和 unicode-math
用作常数和单位的希腊字母应当排成直立,这是 ISO 80000-2 的规矩;在 pdfLaTeX 中,答案是 upgreek 宏包。载入 \usepackage{upgreek} 后,小写可用 \upalpha、\upmu、\uppi,大写可用 \Upgamma、\Updelta……(大写同样只有 11 个,因为本页开头那条规则依旧在起作用)。ISO 80000-2 规定:变量用斜体,单位和取值恒定的数学常数用直立体。所以圆周率 π 本应写作 \uppi,单位词头「微」应写作 \upmu,而作为变量的 π 照旧写 \pi。
同一条规则也向反方向起作用。ISO 要求 所有变量都用斜体,因此作为变量使用的大写希腊字母本应倾斜——可标准 LaTeX 的 \Gamma 如上一节所示是直立的。在 pdfLaTeX 下,修正它的是 Walter Schmidt 的 fixmath,它把大写希腊字母改从 letters 而非 operators 中取(isomath 在此基础上还配齐了向量、矩阵、张量用的字体)。若用 XeLaTeX 或 LuaLaTeX,unicode-math 的 math-style 键一行就能解决:默认的 math-style=TeX 原样复现 LaTeX 沿袭下来的不对称——大写直立、小写斜体——而 math-style=ISO 则让两者都变斜体,此外还可选 french 与 upright。有一点要留心:作为函数名的 Γ(伽马函数)在 ISO 下同样是直立的,所以别把规则套得太机械。
\usepackage{upgreek}
% ...
% constants and units are upright
\[ C = 2 \uppi r, \qquad \lambda = 5\,\upmu\mathrm{m} \]
% variables stay italic
\[ \pi_1(X), \qquad \gamma \]
% XeLaTeX / LuaLaTeX: one line switches the whole convention
% \usepackage[math-style=ISO]{unicode-math}在正文里使用希腊字母:避开 ! Missing $ inserted
在正文里写 \alpha,编译会停在 ! Missing $ inserted.。希腊字母命令被声明为只能用于数学模式的数学字符(mathchar),所以 TeX 在水平模式下遇到它时会试图补一个 $ 并因此失败。最快的躲避办法是写 $\alpha$,但这会把字母排成斜体的「变量 α」,对于 作为正文一部分的希腊字母(比如单位 μm 或生物学名)其实并不合适。到底该用哪种工具,取决于你在写公式还是在写句子。
正文另有 textgreek 宏包:除 \textalpha、\textbeta、\textmu 外,还有从 \textAlpha 到 \textOmega——大小写各 24 个,一个不缺。在数学模式里只有 11 个的大写,在这里是齐全的。若要排希腊语文本本身,标准做法是用 babel 的 greek 选项(实际是 babel-greek 的 greek.ldf),在 \textgreek{…} 内写入 LGR 编码的转写形式,由它转换成希腊字母。如果只需要「微」这一个词头,siunitx 提供了 \micro。无论走哪条路,都请把 $\mu$m 当作最后的退路,而不是第一选择。
\usepackage{textgreek}
% ...
A wavelength of 5\,\textmu m, and a coefficient \textalpha.
% writing \alpha here instead -> ! Missing $ inserted.| 命令/选项 | 宏包 | 得到什么 |
|---|---|---|
\boldsymbol{\alpha} | amsmath (amsbsy) | 粗斜体希腊字母 |
\bm{\alpha} | bm | 粗体;可作用于整个子公式 |
\upalpha | upgreek | 直立小写希腊字母 |
\Upgamma | upgreek | 直立大写希腊字母(11 个) |
\varkappa | amssymb | 异体 kappa ϰ 与 \digamma ϝ |
\textalpha | textgreek | 文本模式下的 24 个希腊字母 |
math-style=ISO | unicode-math | 符合 ISO 的全斜体(XeLaTeX / LuaLaTeX) |