理工科数学遵循一套国际约定,用来规定哪些内容排成斜体,哪些内容排成直立体(罗马体)。这套约定写在 ISO 80000-2 中,日本以 JIS Z 8000-2 的形式等同采用。核心规则很简单:会变化的量(变量)用斜体;含义或数值固定的内容(常数、运算符、函数名、单位)用直立体 ——例如积分 dx 中的 d 要排成直立体,以区别于变量 d。LaTeX 的默认设置已经满足许多规则,但并非全部,尤其是 e、i、d、π 这些情况容易出问题。本文整理规则本身,以及如何在 LaTeX 中正确遵守它们。
ISO 80000-2 与 JIS Z 8000-2
ISO 80000-2(Quantities and units — Part 2: Mathematics)是规定数学符号含义以及 如何排版(书体)的国际标准。现行版为 2019 年版(第一版为 2009 年),并在 2021 年 11 月发布了更正版。在日本,它作为等同标准(IDT)被采用为 JIS Z 8000-2:2022(“Quantities and units — Part 2: Mathematical signs and symbols”),于 2022 年发布,取代了较旧的 JIS Z 8201:1981。旧文献和软件仍可能提到 JIS Z 8201,或其前身 ISO 31-11,但当前依据是 ISO 80000-2 / JIS Z 8000-2。
为什么标准要管到书体这一层?因为在数学中,书体本身承载含义。例如字母 e 可能根据上下文表示某个变量 e,也可能表示自然对数的底(2.718…)。若把变量写成斜体 e、把常数写成直立 e,读者无需额外注释就能区分两者。标准把这种区别固定为全球通用的规则,使论文、教材和技术文档之间的记法不漂移。用 LaTeX 排数学公式是遵守标准的良好起点,因为在数学模式中字母会自动倾斜,而 \sin 这样的函数名和普通数字会排成直立体。
核心规则:“变量 → 斜体,固定含义 → 直立体”
标准的核心只有一个想法:值会随上下文变化的量用斜体;含义或数值唯一固定的内容用直立体。 像 x、y 这样的变量,像 a、b 这样“暂时视为常数”的参数,以及一般函数符号 f、g,其值都不是固定的,所以都用 斜体。这些正好符合 LaTeX 数学模式的默认行为,因此不需要额外处理就已经合规。
相反,下面这些内容的值或含义已经固定,因此要排成 直立体:数值确定的 数学常数(自然对数的底 e、虚数单位 i、圆周率 π 等);微分运算符 d 及其相关符号(偏微分 ∂、div 等);系统定义的函数名(sin、exp、ln、Γ 等);以及 数字 和 单位符号。标准的立场是:既然这些都不是变量,就不应使用变量的书体(斜体)来排版。
一个有用的直觉测试是:“这个符号能不能改名为另一个字母?” x 可以改成 t 而公式含义仍然成立,所以它是变量,要用斜体。但积分 dx 中的 d 不能换成别的字母,因为它是含义固定的运算符,所以要用直立体。
直立体与斜体速查表
下表汇总标准规定的主要书体、LaTeX 默认行为是否已经满足,以及不满足时应如何书写。“默认 OK”表示普通数学模式已经按标准排版;“需要处理”表示必须显式改成直立体。
| 对象 | 标准规定的书体 | LaTeX 中的写法 | |
|---|---|---|---|
variables | 变量/量 x, y, t | 斜体 | x(数学模式默认 OK) |
parameters | 参数与一般函数 a, b, f, g | 斜体 | a, f(x)(默认 OK) |
constant e | 自然对数的底 e | 直立体 | \mathrm{e}(普通 e 为斜体 = 不合规;需要处理) |
constant i | 虚数单位 i(电气工程中常用 j) | 直立体 | \mathrm{i}(\mathrm{j})。需要处理 |
constant pi | 常数 π | 直立体 | \uppi(upgreek)。普通 \pi 为斜体 = 不合规;需要处理 |
differential d | 微分运算符 d(d/dx, ∫…dx) | 直立体 | \mathrm{d}x。普通 d 为斜体 = 不合规;需要处理 |
partial | 偏微分符号 ∂ | 直立体 | \partial(已经是直立体 — OK) |
functions | 已定义函数 sin, exp, ln | 直立体 | \sin, \exp, \ln(已经是直立体 — OK) |
capital greek | 作为函数名的大写希腊字母,如 Γ | 直立体 | \Gamma(标准 LaTeX 中默认直立 — OK) |
digits | 数字 0–9 | 直立体 | 123(已经是直立体 — OK) |
units | 单位符号 m, kg, s | 直立体 | siunitx 的 \unit{} / \qty{}{}。需要处理 |
vectors | 向量与矩阵 a, A | 粗斜体 | \bm{a} / isomath 的 \vectorsym{a}。需要处理 |
tensors | 张量 T | 无衬线粗斜体 | isomath 的 \tensorsym{T}。需要处理 |
如表所示,LaTeX 默认已经满足函数名、偏微分符号、数字和大写希腊字母。反过来,必须 自行改成直立体 的是 e、i、π、微分运算符 d、单位以及向量/张量。下面各节依次说明这些“需要处理”的情况。
常数 e、i、π 与微分 d
先从最常被问到的三项说起:自然对数的底 e、虚数单位 i、微分运算符 d。在 LaTeX 数学模式中,e、i、d 只是普通英文字母,因此会排成 斜体变量。要遵守标准,需要用 \mathrm{…} 把它们包起来,使其变成直立体:\mathrm{e} 输出直立的 e,\mathrm{d} 输出直立的 d,与作为变量时的斜体 e、d 清楚区分。
% 規格に従った書き方 — e, i, d を立体に
\[
\mathrm{e}^{\mathrm{i}\pi} + 1 = 0,
\qquad
\frac{\mathrm{d}}{\mathrm{d}x} \mathrm{e}^{x} = \mathrm{e}^{x},
\qquad
\int_0^1 x^2 \,\mathrm{d}x = \frac{1}{3}.
\]在这个例子中,指数的底 e、虚数单位 i,以及微分和积分中的 d 都排成直立体,只有变量 x 保持斜体。特别是在积分中,通常会像 \,\mathrm{d}x 这样在被积函数与 d 之间加入细空格 \,(标准本身并不规定空格大小,但为了易读性这很常见)。注意 \mathrm 会把参数排成直立体,所以 \mathrm{e} 表示单个直立字母“e”。
每次都写 \mathrm{d} 很繁琐,因此通常会在导言区 定义自己的短命令。例如下面这样定义后,正文中就可以写 \dd x、\eu、\iu。用 \newcommand 定义还有一个好处:如果以后想改变书体方针,只需修改一处定义,而不用改整个文档。
% プリアンブルで定義 / define once in the preamble
\newcommand{\dd}{\mathrm{d}} % 立体の微分演算子 d / upright differential d
\newcommand{\eu}{\mathrm{e}} % 自然対数の底 / base of natural log
\newcommand{\iu}{\mathrm{i}} % 虚数単位 / imaginary unit
% 本文 / in the body
\[ \int_0^\infty \eu^{-x}\,\dd x = 1. \]圆周率 π 的情况稍微复杂。标准要求常数 π 为直立体,但 标准 LaTeX 的 \pi 是斜体(小写希腊字母默认设计为倾斜)。若要严格合规,应载入 upgreek 包并使用 直立的 \uppi。不过按惯例,许多文档仍使用斜体 π,而且常常被视为可以接受。最好为文档确定一条方针:严格遵守就用 \uppi,遵循常见惯例就用 \pi。
函数名与单位
对于 函数名,LaTeX 默认行为已经满足标准。\sin、\cos、\log、\ln、\exp、\lim 等都会以 直立体 排版,并带有适当的前后间距。如果直接输入 sin x,它看起来会像三个斜体变量 s、i、n 的乘积,因此一定要使用专用命令,如 \sin x。若要把未预定义的函数名(如 rank)排成直立体,可以用 amsmath 的 \operatorname{rank},或用 \DeclareMathOperator{\rank}{rank} 定义命令。详情见“Log-like functions & mod”页面。
单位 必须始终用直立体,并在数值与单位之间加入适当空格,这是标准的要求。若自己写成 \mathrm{m} 等形式,空格、复合单位和指数的处理很容易不一致。实际工作中,标准工具是 siunitx 包,它会按一致规则排版单位和带数值的量。当前版本中,单位写作 \unit{…},带数值的量写作 \qty{…}{…}(旧的 \si、\SI 仍可使用)。
\usepackage{siunitx} % プリアンブル / preamble
光速はおよそ \qty{2.998e8}{m/s} である。
The speed of light is about \qty{2.998e8}{m/s}.
単位だけなら \unit{kg.m/s^2}(= ニュートン)。在这个例子中,数值 2.998 × 10⁸ 和单位 m/s 都以直立体排版,并带有规则要求的空格。复合单位可以像 kg.m/s^2 这样用分隔符(句点)和幂来写,siunitx 会处理直立体、空格以及乘除关系。它真正的价值在于从根本上避免把单位误排成斜体变量。
向量、矩阵与张量
标准还会根据量的“种类”规定书体。向量和矩阵的符号用粗斜体,张量的符号用无衬线粗斜体。也就是说,向量和矩阵共用同一种书体(粗且倾斜),只有张量换成另一类字母以示区别。另有一个细节:像零向量这样的 数值型向量 要用粗直立体排版。
这里要特别注意一个陷阱:常用的 \mathbf{v} 输出的是 粗直立体,并不是标准所说的“粗斜体”。若要得到粗斜体向量,最简单的方法是使用 bm 包中的 \bm{v}(\bm 会在保持倾斜的同时加粗符号)。如果想明确声明符合标准,isomath 包 更合适,它为向量、矩阵、张量分别提供带语义的命令。
\usepackage{isomath} % プリアンブル / preamble
\[
\vectorsym{v} = \matrixsym{A}\,\vectorsym{x},
\qquad
\tensorsym{T}_{ij}.
\]在这个例子中,向量 v 和矩阵 A 排成粗斜体,张量 T 排成无衬线粗斜体。isomath 是一个整体应用 ISO 80000-2 书体方针的包;除了 \vectorsym、\matrixsym、\tensorsym 之外,还提供粗斜体数学字母表 \mathbfit 等。
还有一个严格合规时需要注意的点:isomath 会把 大写希腊字母默认改为斜体。在标准 LaTeX 中,大写希腊字母(如 \Gamma)是直立体;但 ISO 80000-2 规定“作为变量使用的大写希腊字母应为斜体”,因此 isomath 会按这个行为处理。这可能与需要直立 Γ 作为函数名的场合冲突,所以在两者混用的文档中要特别区分。
实际文档中的方针
是严格遵守标准,还是向常见惯例靠拢,取决于文档的性质。如果目标期刊或出版社要求符合 ISO/JIS,下面这样的设置比较稳妥。
- 将 e、i、d 排成直立体。 在导言区把
\dd、\eu、\iu定义为\mathrm{…},正文中使用这些命令。 - 若要严格处理 π, 载入
upgreek并使用\uppi;如果按惯例保留斜体\pi,则在全文中保持一致。 - 把单位交给 siunitx。 避免手写
\mathrm{…};用\unit{}/\qty{}{}排版。 - 向量和矩阵用粗斜体。 使用
\bm,或符合标准的isomath(\vectorsym等),不要用\mathbf(粗直立体)。 - 函数名、偏微分符号、数字和大写希腊字母保持默认。
\sin、\partial、\Gamma默认已经满足标准。 - 一篇文档只保留一种方针。 通过命令集中管理,避免同一符号同时以斜体和直立体出现。
顺带一提,physics 包可以方便地提供直立的微分 \dd 和导数 \dv,但它与 siunitx 等其他包的命令冲突是已知问题(甚至有用于修补的 physics-patch),近年也常使用 derivative 包等替代方案。把它作为想快速处理时的选项了解即可。无论采用哪种方法,合规的本质都是意识到书体的 *含义*,并始终一致地应用它。