希腊字母

在 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」根本不是希腊语的事实,而是 拉丁字母覆盖不到的字形数目

latex
% 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ξ克西
oo奥密克戎——没有命令,直接敲拉丁 o
\piπ
\rhoρ
\sigmaσ西格马
\tauτ
\upsilonυ宇普西龙
\phiϕ斐(闭合字形)
\chiχ
\psiψ普西
\omegaω欧米伽

有几组容易混淆:\xi(ξ)与 \zeta(ζ)、\nu(ν)与 \upsilon(υ),以及最危险的 \nu(ν)与拉丁小写 v。本想写 ν 却敲成 v,文档照样编译通过,不报任何错,只有印出来的页面是错的。写稿时应当 以命令名而不是字形来核对。另外记住一点:fontmath.ltxletters 字体(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)——于是这个错误 会悄无声息地印成一个间距被挤掉的公式

latex
% 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},并在没有现成粗体时自行合成。

latex
\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 规则:upgreekunicode-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-mathmath-style 键一行就能解决:默认的 math-style=TeX 原样复现 LaTeX 沿袭下来的不对称——大写直立、小写斜体——而 math-style=ISO 则让两者都变斜体,此外还可选 frenchupright。有一点要留心:作为函数名的 Γ(伽马函数)在 ISO 下同样是直立的,所以别把规则套得太机械。

latex
\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 个的大写,在这里是齐全的。若要排希腊语文本本身,标准做法是用 babelgreek 选项(实际是 babel-greekgreek.ldf),在 \textgreek{…} 内写入 LGR 编码的转写形式,由它转换成希腊字母。如果只需要「微」这一个词头,siunitx 提供了 \micro。无论走哪条路,都请把 $\mu$m 当作最后的退路,而不是第一选择。

latex
\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粗体;可作用于整个子公式
\upalphaupgreek直立小写希腊字母
\Upgammaupgreek直立大写希腊字母(11 个)
\varkappaamssymb异体 kappa ϰ 与 \digamma ϝ
\textalphatextgreek文本模式下的 24 个希腊字母
math-style=ISOunicode-math符合 ISO 的全斜体(XeLaTeX / LuaLaTeX)