加上一行 \usepackage{newtxtext},跑一遍 pdfLaTeX,再用 pdffonts 看看生成的 PDF:正文字体 TeXGyreTermesX 旁边赫然并列着 CMMI10、CMR10、CMSY7 和 CMEX10——正文变成了 Times,数学却被留在 Computer Modern 里。在 LaTeX 中更换西文字体时,真正让人头疼的就只有这一点,字体喜好是之后的事。本页梳理 TeX Live 2024 随附的主要西文字体宏包,并逐一用 pdffonts 确认 载入之后数学是否真的一起换掉。内容涵盖 Computer Modern 一脉(lmodern、newcm)、Times 与 Palatino(newtx、newpx、mathptmx、mathpazo),以及 libertinus、fourier、kpfonts、XCharter,并同时给出 pdfLaTeX 与 fontspec 两条路线。
只换正文,数学就会留在 Computer Modern
含有数学内容的文档,请选择能把正文和数学一起换掉的宏包。 LaTeX 的数学使用另一套字体排版——数学斜体、符号、大型算符——更换正文字体丝毫触及不到它们。用 pdffonts 比较「只载入 \usepackage{newtxtext}」和「再加上 newtxmath」两份 PDF,这种分离便一目了然。
# text only: the maths is still Computer Modern
$ pdflatex text-only.tex && pdffonts text-only.pdf
PHVSPW+TeXGyreTermesX-Regular Type 1 Custom yes yes yes
KGFAFA+CMMI10 Type 1 Builtin yes yes yes
PTYRNT+CMR10 Type 1 Builtin yes yes yes
DZZUCU+CMSY7 Type 1 Builtin yes yes yes
YQJSDJ+CMEX10 Type 1 Builtin yes yes yes
# add \usepackage{newtxmath}: no CM left at all
$ pdflatex text-and-math.tex && pdffonts text-and-math.pdf
IKSTLO+TeXGyreTermesX-Regular Type 1 Custom yes yes yes
QRRSLK+NewTXMI Type 1 Builtin yes yes yes
MIQVDX+txsys Type 1 Builtin yes yes yes
OGYQFN+txmiaX Type 1 Builtin yes yes yes
CYBZPM+txexs Type 1 Builtin yes yes yes在纸面上也是同样的情形。Times 比 Computer Modern 笔画更粗、字面更大,因此把数学留在纤细的 CM 中,公式在行内就会显得瘦弱而脱节。为弥合这一落差才有了「正文+数学」的配对:Times 用 newtxmath,Palatino 用 newpxmath 或 Pazo Math,Utopia 用 fourier 的整套数学。换言之,newtx、newpx、fourier 之所以存在,不是出于字体品味,而正是为了 与数学协调。反过来,如果文档里几乎没有公式——信件、通知、幻灯片——那么整节都可以忽略,随喜好选字体即可。
还有一个实务前提。罗马体、无衬线体和等宽体是 由不同宏包独立选择的。「正文用 Palatino、无衬线用 Helvetica、等宽用 Courier」这样的组合,只要一起载入 mathpazo、helvet、courier 即可。并且在 pdfLaTeX 中更换正文字体时,惯例是同时写上 \usepackage[T1]{fontenc}(T1 究竟改变了什么,以及这些宏包在底层如何重新指向 \rmdefault,属于字体系统页面的内容)。而在使用 fontspec 的 XeLaTeX / LuaLaTeX 下不需要 fontenc,本段内容也不适用。
Computer Modern 一脉:CM、lmodern、newcm、cm-super
若要用 CM 一脉开始新文档,该选的是 lmodern(pdfLaTeX)或 newcomputermodern(XeLaTeX / LuaLaTeX),几乎没有理由继续使用原始的 Computer Modern。不指定任何字体时 LaTeX 使用的 CM,正是 Knuth 为 TeX 设计的那套书体——细线条、清晰衬线,一眼可辨的「TeX 味」——但它默认使用 7 位的 OT1 编码,代价很实在:带重音的词无法断词。
Latin Modern(宏包 lmodern)是波兰 TeX 用户组 GUST 对 CM 的重制,是它 事实上的后继。外观几乎不变,同时支持 T1,带重音的字母作为单一字形存在。清点 TeX Live 2024 所附内容,Type 1 一共 92 个 .pfb 文件——72 种文本字体加 20 种数学字体——OpenType 版也有 72 个 .otf。载入 \usepackage{lmodern} 后数学也一并换成 LMMathItalic10、LMMathSymbols10、LMMathExtension10,PDF 中一个 CM 字体都不剩。若喜欢 CM 的面貌,从这里开始。
New Computer Modern(宏包 newcomputermodern,简称 newcm)是 Antonis Tsolomitis 以 OpenType 为前提制作的现代版 CM。TeX Live 2024 所附版本除 NewCM10-Regular 等正文字体外,还包含 完整的数学字体 NewCMMath-Regular、等宽的 NewCMMono10、无衬线的 NewCMSans10,以及涵盖希腊文、西里尔文和天城文的文件。它还在常规 Regular 之外提供更重的 Book 字重(NewCM10-Book),这在 CM 一脉中并不常见,正好弥补 CM 正文偏细的弱点。
还有一个名字值得记住:cm-super。它是从 CM/EC 位图自动矢量化而来的 Type 1 集合,提供 T1 和 TS1 编码的 Type 1 版 Computer Modern。在没有 lmodern 的旧环境中,若想保持 T1 又得到非位图 PDF,它可作备用;由于是自动转换,缺少 hinting 信息。如今基本没有理由重新选它。
% the CM successor; the sensible default on pdfLaTeX
\usepackage{lmodern}
\usepackage[T1]{fontenc}
% modern CM with a complete math font; for XeLaTeX / LuaLaTeX
\usepackage{newcomputermodern} % or: \usepackage{newcm}Times 与 Palatino:newtx / newpx,以及简便的 mathptmx / mathpazo
要用 Times 排版数学较多的论文,标准选择是 newtxtext + newtxmath;Palatino 则是 newpxtext + newpxmath。二者均出自加州大学圣迭戈分校的 Michael Sharpe,.sty 开头写明它们改自 txfonts.sty。有意思的是实际内容:newtxtext 嵌入 PDF 的并不是 Times,而是 TeXGyreTermesX-Regular——下文将谈到的 TeX Gyre Termes 的扩展版。同样,newpxtext 嵌入的是 TeXGyrePagellaX-Regular。也就是说,所谓「Times 宏包」「Palatino 宏包」,其实是以 URW 克隆为底、再补上数学和小型大写的现代扩展版。
也有更省事的路线。PSNFSS 附带的 mathptmx(Times)和 mathpazo(Palatino)只用一行就把正文和数学一起换掉。但实测显示,二者的数学都没有完全迁移:mathptmx 的 PDF 中,NimbusRomNo9L 与 StandardSymL 之间仍有 CMEX10、CMSY10、CMR10;mathpazo 的 PDF 里,PazoMath 旁边也留着同样的三个——也就是说,大型算符(∑、∫)和部分符号仍是 Computer Modern。若不在意这点,它们已经够用;但若文档以公式为主角,选择 newtx / newpx 的理由正在于此。
无衬线体和等宽体也可以在同一脉络中配齐。Helvetica 对应 helvet;由于 Helvetica 字面偏大,与 Times 并置时通常略微缩小载入,例如 \usepackage[scaled=.92]{helvet}。Courier(等宽)对应 courier。二者都不触及数学,只替换无衬线或等宽,因此可以自由叠加在所选正文宏包之上。
这些经典字体的底子,是 GUST 的 TeX Gyre 一族。GUST 以 URW 公开的 PostScript base 35 克隆为起点,重新整理字形与重音,形成八个家族:Termes(tgtermes,源自 URW Nimbus Roman No9 L,约等于 Times)、Heros(tgheros,约等于 Helvetica)、Pagella(tgpagella,源自 URW Palladio L,约等于 Palatino)、Cursor(tgcursor,约等于 Courier)、Bonum(tgbonum,Bookman 系)、Schola(tgschola,Century Schoolbook 系)、Adventor(源自 URW Gothic L,Avant Garde 系)和 Chorus(源自 URW Chancery L,Zapf Chancery 系)。不过只载入 \usepackage{tgtermes},数学仍是 Computer Modern,PDF 中会留下 CMMI10 等。若要连数学一起配齐,请用 unicode-math 的 \setmathfont 指定配套的 OpenType 数学字体 TeX Gyre Math(texgyretermes-math.otf、texgyrepagella-math.otf 等)。
\documentclass{article}
% Times body + matching math, on pdfLaTeX
\usepackage{newtxtext}
\usepackage{newtxmath}
\usepackage[scaled=.92]{helvet} % Helvetica, slightly reduced
\usepackage{courier} % mono = Courier
\usepackage[T1]{fontenc}
\begin{document}
Text in Times, with matching math: \( e^{i\pi} + 1 = 0 \).
\textsf{Sans is Helvetica.} \texttt{Mono is Courier.}
\end{document}Libertinus、fourier、kpfonts、XCharter:按完整度选择
如果你想要一套「综合家族」——正文、无衬线、等宽、数学都出自同一套设计——那么 TeX Live 2024 中最齐全的是 Libertinus。清点 libertinus-fonts 的内容:衬线体有 Regular、Semibold、Bold 三个字重,各含正体与斜体,另有 Display 与 Initials;无衬线三款;等宽一款;键盘符号一款;以及 LibertinusMath-Regular。它出自 Linux Libertine 与 Linux Biolinum,README 明确写着分支自 2012 年 7 月发布的 5.3.0 版。宏包 libertinus 是旧 libertine(Linux Libertine)的后继,本身只是一个入口包装:在 pdfLaTeX 下载入 libertinus-type1,在 XeLaTeX / LuaLaTeX 下载入 libertinus-otf,并可接受 osf(旧式数字)等选项。
不过 有个陷阱。在 pdfLaTeX 下载入 \usepackage{libertinus},数学仍会留在 Computer Modern——实测中 CMMI10、CMSY10、CMEX10 就并列在 LibertinusSerif、LibertinusSans、LibertinusMono 旁边。在 pdfLaTeX 中必须 显式追加 \usepackage{libertinust1math};加上之后,PDF 的数学就只剩 LibertinusT1Math 一个,CM 全部消失。而在 LuaLaTeX / XeLaTeX 下,同样的 \usepackage{libertinus} 会自动带入 LibertinusMath-Regular。也就是说,Libertinus 的完整度取决于引擎——在 pdfLaTeX 上,请记住它是两行。
相比之下,fourier 和 kpfonts 一行就搞定:实测中两者都把 Computer Modern 从 PDF 里彻底赶了出去。fourier 把 Adobe Utopia 用作正文,并自带 Fourier-Math-Extension、Fourier-Math-Symbols、Fourier-Math-Letters-Italic 这一整套数学字体。Utopia 是沉稳实用的衬线体,在理工科文档中长期受欢迎。kpfonts 以 URW Palladio 为底,却做出与原字体明显不同的面貌,包含 Kp--M-Ex、Kp--M-Sy、Kp--M-Italic 等广泛的数学字体群、真正的小型大写、旧式数字,以及多重积分的变体。此外还有 OpenType 版 kpfonts-otf。
Charter 是在屏幕和纸面上都易读的实用衬线体,由 Michael Sharpe 扩展 Bitstream Charter 而成的 XCharter 负责正文。但只写 \usepackage{XCharter},数学同样留在 CM。实测中,加上 \usepackage[charter]{newtxmath} 后数学才换成 XCharterMathMI、txexs、txsys。TeX Live 2024 也附有 OpenType 数学字体 XCharter-Math.otf,但它是通过 unicode-math 的 \setmathfont 载入,而不是 \usepackage{xcharter-math},因此在 pdfLaTeX 中用不了。还有一款:Bera(bera)是 Bitstream Vera 的 Type 1 版,包含 Bera Serif(粗衬线)、Bera Sans 和 Bera Mono 三族。它不含数学,适合局部使用,例如只用 beramono 取等宽。
% one line each — measured: no Computer Modern left in the PDF
\usepackage{fourier} % Utopia + a full math set
% \usepackage{kpfonts} % Palladio-derived, wide math coverage
% Libertinus on pdfLaTeX needs TWO lines, or the math stays CM
% \usepackage{libertinus}
% \usepackage{libertinust1math}
% Charter body + matching math
% \usepackage{XCharter}
% \usepackage[charter]{newtxmath}
\usepackage[T1]{fontenc}一览:哪些宏包连数学也换(pdffonts 实测)
下表记录的是:只载入该宏包的最小文档用 pdfLaTeX 编译后,再用 pdffonts 读出 PDF 中残留字体的结果。「数学是否一起换」一栏为「是」的行,无需追加任何一行。 为「否」的行,则只换正文而把数学留在 CM——正是开篇看到的那种不一致。
| 宏包 | 外观 / 系谱 | 数学是否一起换(PDF 中残留的字体) |
|---|---|---|
lmodern | Latin Modern(CM 后继,衬线) | 是。LMMathItalic10、LMMathSymbols10、LMMathExtension10;不留 CM |
newcomputermodern | New Computer Modern(现代 CM,OpenType) | 是。NewCMMath-Regular;面向 XeLaTeX / LuaLaTeX |
mathptmx | Times(PSNFSS,简便) | 部分。NimbusRomNo9L + StandardSymL,但 CMEX10、CMSY10、CMR10 仍在 |
newtxtext + newtxmath | Times(newtx;实为 TeXGyreTermesX) | 是。NewTXMI、txsys、txmiaX、txexs;不留 CM |
mathpazo | Palatino(PSNFSS,简便) | 部分。会用上 PazoMath,但 CMEX10、CMSY10、CMR10 仍在 |
newpxtext + newpxmath | Palatino(newpx;实为 TeXGyrePagellaX) | 是。NewPXMI、pxsys、pxmiaX、txexs;不留 CM |
helvet | Helvetica(仅无衬线;用 scaled 缩小) | 不适用。不触及数学;叠加在正文宏包之上使用 |
courier | Courier(仅等宽) | 不适用。不触及数学 |
tgtermes / tgpagella / tgheros / tgcursor | TeX Gyre(源自 URW 克隆;≈Times / Palatino / Helvetica / Courier) | 否。CMMI10 等仍在;需用 \setmathfont 另加 TeX Gyre Math |
libertinus | Libertinus(Linux Libertine 后继;衬线/无衬线/等宽/数学) | 取决于引擎。pdfLaTeX 下会留 CM,需追加 libertinust1math;Lua/XeLaTeX 下会自动带入 LibertinusMath-Regular |
fourier | 基于 Adobe Utopia | 是。Fourier-Math-Extension、Fourier-Math-Symbols、Fourier-Math-Letters-Italic;不留 CM |
kpfonts | 源自 URW Palladio,完整套装 | 是。Kp--M-Ex、Kp--M-Sy、Kp--M-Italic;不留 CM |
XCharter | Charter(Bitstream Charter 扩展) | 单用为否,CM 仍在;加上 \usepackage[charter]{newtxmath} 后换成 XCharterMathMI |
bera | Bitstream Vera(粗衬线 / 无衬线 / 等宽) | 否。CMMI10 等仍在;适合局部使用,例如只用 beramono 取等宽 |
犹豫时的粗略指南。喜欢 CM 就用 lmodern(OpenType 引擎则用 newcm)。需要 Times 就用 newtxtext + newtxmath,Palatino 则用 newpxtext + newpxmath。想一行搞定就用 fourier 或 kpfonts。想要综合家族就用 libertinus——在 pdfLaTeX 上别忘了 libertinust1math。若要直接使用系统中已安装的字体,请把引擎换成 XeLaTeX 或 LuaLaTeX,走 fontspec 那条路。两条路上不变的原则只有一条:换了正文,就要检查数学。