1. 从“默认”到“选择”为什么数学字体值得关注如果你用过LaTeX写过数学论文或者技术报告大概率对默认的数学字体没什么感觉——它清晰、标准能完成任务。但当你需要区分不同类型的数学对象、提升文档的美观度或者向特定期刊投稿时你可能会发现默认的Computer Modern字体并不是唯一的选择甚至不是最好的选择。选择不同的数学字体就像给数学公式换上了一套得体的“正装”或“休闲服”它不仅能改变公式的视觉风格更能微妙地影响阅读体验和排版的专业感。我最初意识到这一点是在准备一篇投稿给某物理学顶刊的论文时。审稿意见里有一条看似无关紧要的备注“建议使用更符合领域惯例的数学字体以提升可读性”。这让我开始深入研究才发现数学字体这个看似细枝末节的问题背后其实有一套完整的逻辑不同的字体家族在字母形状、符号间距、粗体渲染甚至特定符号如积分号、求和号的设计上都存在差异。这些差异直接关系到公式的清晰度、与正文的协调性以及在长时间阅读下的疲劳感。因此这篇文章不会仅仅罗列几个\usepackage命令。我将结合自己排版数学文档的经验深入探讨几款主流数学字体的设计哲学、适用场景、具体配置方法以及那些在官方文档里不会写的“坑”。无论你是正在撰写学位论文的研究生还是需要制作精美技术文档的工程师理解如何为你的公式选择合适的“外衣”都能让你的作品在严谨性之外增添一份独特的专业气质。2. 经典之选Computer Modern 与 Latin Modern 的传承与局限当我们谈论LaTeX的默认数学字体时实际上指的是由Donald Knuth教授为TeX系统设计的Computer Modern字体家族。这套字体是LaTeX美学的基石其数学字体部分cmr,cmmi,cmsy等的特点是笔画对比度适中符号设计经典且高度可读特别是它的意大利斜体italic用于变量表示已经成为学术排版中约定俗成的视觉语言。然而Computer Modern字体是为高分辨率打印如600dpi以上的激光打印机而优化的。在当今主流的屏幕显示尤其是低像素密度的普通显示器和PDF文档中其较细的笔画有时会显得“发虚”影响在屏幕上阅读的清晰度。为了解决这个问题Latin Modern字体应运而生。你可以简单地将Latin Modern理解为Computer Modern的数字化增强版它提供了更完整的字符集如更多的欧文符号、优化的屏幕显示效果并且是大多数现代LaTeX发行版的默认选择。在绝大多数情况下你不需要做任何事LaTeX就会自动调用Latin Modern字体来渲染你的数学公式。它的兼容性是最好的几乎所有数学宏包如amsmath,amssymb都以其为设计基准。但它的“局限”也正在于其“默认”风格过于经典和普遍难以让你的文档在视觉上脱颖而出此外其粗体\mathbf在数学模式下通常只是简单加粗罗马体对于表示矩阵或向量时视觉效果可能不够理想。注意当你使用\usepackage{lmodern}时它主要替换的是正文的罗马字体族。对于数学字体LaTeX引擎如pdfLaTeX通常会自行处理。实际上在pdfLaTeX下即使不显式加载lmodern系统也常常默认使用Latin Modern的数学字体变体。一个更准确的控制方式是使用fontspec包仅限XeLaTeX/LuaLaTeX或mathspec包来精细指定。这里有一个容易被忽略的细节\mathbf的渲染。在默认的Computer Modern/Latin Modern数学字体下$\mathbf{A}$产生的A是罗马体的加粗而不是数学斜体的加粗。这在数学排版中有时是不理想的因为我们通常希望向量或矩阵的符号仍然是斜体只是更粗。要获得真正的粗斜体数学符号你需要使用\bm命令来自bm宏包。这是新手常踩的第一个坑以为\mathbf就能得到粗的数学变量。% 一个简单的对比示例 \documentclass{article} \usepackage{amsmath} \usepackage{bm} % 提供 \bm 命令 \begin{document} 默认粗体罗马体 $\mathbf{ABC}$ $\mathbf{x}$ $\mathbf{\beta}$错误\\ 使用 \texttt{bm} 包粗斜体 $\bm{ABC}$ $\bm{x}$ $\bm{\beta}$正确 \end{document}你会发现\mathbf{\beta}根本无法将希腊字母加粗而\bm{\beta}可以。这是因为\mathbf只改变字族而数学希腊字母在默认字体下不属于罗马字族。bm包则通过更底层的方式实现了真正的数学粗体。3. 专业领域的宠儿Times风格与 Palatino风格的数学字体当你的文档需要更紧凑的排版比如为了节省页数或者追求类似传统出版书籍的“墨水感”时衬线字体中的Times和Palatino风格是常见的选择。它们对应的数学字体包能将正文的经典风格无缝延伸到数学公式中。newtxmath与newpxmath 这是目前最活跃、最完整的Times和Palatino数学字体解决方案。newtxmath配合newtxtext正文字体提供了一套非常成熟的Times风格排版方案。newpxmath则配合newpxtext提供Palatino风格。它们的数学字体设计精良符号库非常全面并且解决了旧版mathptmx或mathpazo包中的许多问题如缺失符号、粗体问题等。为什么推荐newtx/newpx系列首先它们对数学符号的重设计非常用心。例如积分号、求和号、根号等大型运算符的形状更加优美与Times/Palatino的正文风格高度协调。其次它们提供了完整的粗体数学包括粗斜体支持通过\mathbf或\bm都能得到正确结果。最后它们通常能产生比默认字体更紧凑的数学公式这对于包含大量公式的技术报告或论文来说能有效节省版面。% 使用 newtx 系列配置 Times 风格数学文档 \documentclass{article} \usepackage{newtxtext} % 正文 Times 字体 \usepackage{newtxmath} % 数学 Times 字体 \usepackage{bm} % 仍然推荐用于更佳的粗体控制 \begin{document} 这是一段Times风格的正文。与之匹配的数学公式 \[ f(x) \int_{-\infty}^{\infty} \hat{f}(\xi) e^{2\pi i \xi x} \, d\xi \] 粗体测试 $\bm{\nabla} \cdot \mathbf{J} \frac{\partial \rho}{\partial t} 0$ \end{document}一个关键的实操心得如果你从默认字体切换到newtxmath可能会发现某些之前能用的特殊符号比如来自amssymb的某些花体字母不见了或者报错。这是因为newtxmath重新定义了大量数学符号集。解决方案通常是调整宏包加载顺序先加载newtxmath再加载其他数学符号宏包如amssymb,amsfonts。这样后续宏包会尝试用自己定义的符号覆盖newtxmath的从而保证符号的可用性。如果仍有符号缺失newtxmath文档中通常会说明替代命令或需要额外加载的选项。4. 无衬线的现代感Helvetica风格与 Arev 数学字体在幻灯片Beamer、海报或追求极简现代风格的技术文档中无衬线字体是主流。将无衬线正文与默认的衬线数学字体混用会带来视觉上的割裂感。因此我们需要专门为无衬线正文配套的数学字体。arev宏包 这是一个一站式的解决方案。它同时提供了基于Vera Sans字体的无衬线正文字体和一套设计优秀的无衬线数学字体。arev数学字体的特点是线条均匀、造型几何感强、可读性高尤其是在投影仪上显示时其清晰的轮廓比细衬线字体更有优势。% 使用 arev 包获得无衬线数学字体 \documentclass{beamer} \usepackage{arev} % 一次性加载正文和数学无衬线字体 \begin{document} \begin{frame}{一个现代风格的数学幻灯片} \[ \forall \epsilon 0, \exists \delta 0 \text{ such that } |x - c| \delta \implies |f(x) - L| \epsilon \] \begin{itemize} \item 积分 $\int_a^b f(x) dx$ \item 矩阵 $\begin{bmatrix} a b \\ c d \end{bmatrix}$ \end{itemize} \end{frame} \end{document}sansmath宏包 这是一个更轻量、更灵活的选择。它不改变正文字体只提供一个\sansmath命令将其作用范围内的数学字体切换为无衬线样式。这非常适合在 predominantly 衬线排版的文档中局部插入需要突出显示或风格迥异的数学块比如在侧边栏、图表注释中。\documentclass{article} \usepackage{sansmath} \begin{document} 正文是默认的衬线字体Latin Modern。 % 临时切换到无衬线数学 { \sansmath 现在这段文字里的公式是无衬线的 $E mc^2$, $\sum_{i1}^n i \frac{n(n1)}{2}$。 } % 作用域结束恢复原状 外面的公式又变回了衬线体 $\nabla \times \mathbf{E} -\frac{\partial \mathbf{B}}{\partial t}$。 \end{document}踩坑提醒使用无衬线数学字体时最大的挑战是符号的区分度。例如在arev字体下小写字母lell、数字1和大写字母I可能比在衬线字体下更难区分。在包含大量下标和变量的复杂公式中这可能增加阅读的认知负担。因此我的建议是在正式、长篇的学术论文中谨慎使用无衬线数学字体在演示文稿、海报或短篇技术说明中它可以成为提升视觉冲击力的利器。5. 开源几何风Fira Math 与 Libertinus Math 的崛起近年来一些设计理念更新、在屏幕阅读体验上更下功夫的开源字体也推出了配套的数学字体其中Fira Math和Libertinus Math是两个杰出代表。Fira Math 这是为Fira Sans无衬线字体家族设计的数学字体。Fira本身是Mozilla基金会为Firefox OS设计的字体以其优秀的屏幕可读性和友好的几何造型著称。Fira Math继承了这些优点其数学符号设计现代、开放x高度x-height较大在屏幕上显示非常清晰。它特别适合用于网页数学内容渲染通过MathJax或KaTeX或电子书排版。在LaTeX中使用它通常需要配合XeLaTeX或LuaLaTeX引擎并调用unicode-math宏包。Libertinus Math 这是Libertinus字体家族的数学部分。Libertinus是一个旨在替代Times的、专门为学术出版设计的高质量开源字体家族。Libertinus Math的设计目标是成为newtxmath的强大开源替代品它在保持经典美学的同时修正了许多传统数学字体在数字时代显示上的小缺陷并且提供了极其丰富的OpenType数学特性。通过unicode-math宏包加载Libertinus Math你可以获得自动的粗体、花体、手写体等变体而无需记忆复杂的命令。% 在 LuaLaTeX 中使用 unicode-math 加载 Libertinus Math \documentclass{article} \usepackage{unicode-math} % 必须使用 XeLaTeX 或 LuaLaTeX 编译 \setmainfont{Libertinus Serif} \setmathfont{Libertinus Math} \begin{document} Libertinus 字体下的数学排版示例 \[ \mathcal{L}(\psi) \bar{\psi}(i\gamma^\mu \partial_\mu - m)\psi \] 注意花体字母 \mathcal{L} 和粗体希腊字母 \psi 都是直接通过字体特性实现的无需额外宏包。 \end{document}使用unicode-math的注意事项 这是未来数学字体排版的方向但它与传统基于\usepackage的字体包工作方式有根本不同。最大的“坑”在于宏包兼容性。许多传统的LaTeX数学宏包如amsmath的大部分功能已被内建但一些扩展符号包可能会与unicode-math冲突。经验法则是先加载unicode-math再加载其他数学宏包并做好可能需要进行微调的心理准备。但一旦配置成功你将获得前所未有的灵活性和一致性例如数学字体中的字母与正文文本中的字母可以来自同一个现代字体家族实现真正的无缝融合。6. 终极控制unicode-math 与现代字体引擎的威力如前所述unicode-math宏包配合XeLaTeX或LuaLaTeX引擎代表了LaTeX数学字体排版的现代范式。它不再依赖于有限的、预先打包好的“数学字体包”而是直接使用支持OpenType数学表MATH table的现代字体文件。这带来了几个革命性的优势字体选择的无限可能 理论上任何包含MATH表的字体都可以被设置为数学主字体。这包括了一些系统字体如Cambria Math on Windows和大量新兴的开源数学字体如前面提到的Libertinus Math 以及STIX Two Math, TeX Gyre Termes Math等。样式自动匹配 在传统方式下粗体\mathbf、花体\mathcal、黑板粗体\mathbb分别由不同的字体文件或宏包命令提供容易不一致。而unicode-math下这些变体Bold, Script, Fraktur, Double-Struck等都是主数学字体内部的“样式”由引擎自动切换确保了高度的视觉统一。更直观的命令 它提供了更符合直觉的命令如\symbf用于数学粗体自动处理希腊字母\symcal用于花体等。配置示例与常见问题\documentclass{article} \usepackage{unicode-math} % 设置主字体和数学字体 \setmainfont{TeX Gyre Termes} % 正文字体 \setmathfont{TeX Gyre Termes Math} % 配套数学字体 % 也可以为不同的数学样式设置备用字体 \setmathfont[range{\mathcal,\mathbfcal}, StylisticSet1]{XITS Math} % 使用XITS Math的特定花体样式 \begin{document} 现代数学排版 $\symbf{F} m\symbf{a}$ 傅里叶变换 $\mathcal{F}\{f(t)\}$。 \end{document}必须警惕的兼容性问题与bm包unicode-math提供了自己的\symbf通常不需要bm包。如果同时加载可能会冲突。建议先尝试只用unicode-math的粗体机制。与amsmathunicode-math会自动加载并重新定义amsmath的大部分功能通常可以和平共处但加载顺序应是unicode-math在前。符号命令的变化 一些特殊符号的命令可能变了。例如传统的\leq和\leqslant在有些unicode-math字体下可能指向同一个符号。需要查阅字体和宏包的文档。我的个人经验是对于新项目尤其是涉及复杂数学符号和多语言文本的强烈建议从LuaLaTeX unicode-math开始。虽然初期可能会遇到一些转换的阵痛主要是旧宏包和习惯命令的调整但其带来的长期维护性和排版质量提升是巨大的。对于需要与大量使用传统pdfLaTeX的同事协作的旧项目则可能暂时沿用newtxmath等方案更为稳妥。7. 实战为你的项目选择并配置数学字体了解了各种选项后如何为你的具体文档做出选择下面是一个决策流程和配置清单第一步确定约束条件投稿要求 目标期刊或会议是否有明确的字体要求这是最高优先级。编译引擎 你被限制使用pdfLaTeX吗如果是那么unicode-math和需要Xe/LuaLaTeX的字体如Fira Math就被排除了。你的选择主要是newtxmath,arev,mathpazo旧版Palatino等。文档性质 是长篇学术论文优先可读性和传统、演示文稿优先清晰度和现代感、还是书籍可能需要紧凑排版第二步根据场景选择通用学术论文pdfLaTeX\usepackage{newtxtext, newtxmath}是目前最安全、最专业的选择之一能很好地平衡美观、兼容性和符号完整性。演示文稿Beamer\usepackage{arev}或使用\usefonttheme{professionalfonts}配合sansmath是不错的选择。如果想用衬线字体newtxmath同样适用。现代开源项目可自由选择引擎 尝试LuaLaTeX\usepackage{unicode-math}\setmathfont{Libertinus Math}。你会获得一流的排版质量和未来的可扩展性。需要与Word/Cambria风格匹配 在Xe/LuaLaTeX下可以尝试\setmathfont{Cambria Math}Windows系统自带。第三步配置与测试选定方案后创建一个最小的测试文档务必包含以下测试公式以检查关键特性是否工作正常基础公式$E mc^2$, $\alpha, \beta, \gamma$, $\sum_{i1}^n$, $\int_a^b f(x)dx$粗体与样式$\mathbf{v}$向量$\bm{\Sigma}$粗体希腊需bm包$\mathcal{L}$花体$\mathbb{R}$黑板粗体需amsfonts或amssymb。你文档中的特殊符号 比如特定的箭头、运算符、关系符号等。第四步处理依赖与冲突将字体宏包放在文档导言区尽可能靠前的位置但要在\documentclass之后。其他数学相关宏包amsmath,amssymb,bm,mathtools等放在字体宏包之后。如果遇到符号缺失或报错查阅该字体宏包的文档看是否需要添加选项如[slantedGreek]或加载额外的辅助包如newtxmath可能需要[amssymb]选项。最后记住一个原则数学字体的首要任务是清晰、准确、无歧义地传达数学信息。美观和风格是第二位的。在做出最终决定前将测试页打印出来或在目标设备如投影仪、电子阅读器上查看实际效果确保它在真实的使用场景下依然具备优秀的可读性。