LaTeX字号设置全解析:从全局选项到精确控制
1. 字体与字号先从 LaTeX 的排版逻辑说起老实说我每次看到有人问“LaTeX 里怎么改字号”的时候都特别能理解。因为这问题听起来简单但实际一查就会发现网上说法特别散有的让你用\large有的让你用\fontsize还有人直接让你改 documentclass 的选项到底哪个才是对的只能说都对但应用场景不一样。LaTeX 和 Word 最大的区别在于它不直接把“几号字”这种概念挂在文字上而是把字体和字号当成一种“属性状态”。什么意思呢就是说你在某个作用域内声明了一个字号这个字号会作用于这个范围内所有文字直到你切换成另一个字号。这和 CSS 的继承机制很像也和 Word 里“选中文字然后改字号”的操作习惯有不小差异。LaTeX 里跟字体相关的维度主要有几个字体族family也就是黑体、宋体、楷体这类区别英文里就是 serif、sans-serif、monospace。字体系列series粗体、半粗体这类字重差异。字形shape斜体、伪斜体、小型大写这类。字号size这个就是我们这篇文章的主角。很多人会把“字体”和“字号”混在一起问其实它们是两个独立的维度。改字号不会影响你用的是宋体还是黑体字体族切换也不影响字号大小。理解了这层再去操作就会发现 LaTeX 的设计其实非常规整。这篇文章我会按照实际操作场景来拆解既讲最简单粗暴的办法也会讲如何做到精细控制比如精确到某个任意 pt 值、数学公式里的字号切换、表格里缩小字号等。最后再整理一份我自己踩过坑之后总结的避坑清单。2. 全局字号与局部字号先搞清楚你要改的是哪一层2.1 全局字号文档类选项是第一入口LaTeX 里最常见的全局字号设置是在\documentclass的时候通过可选参数传入。比如\documentclass[10pt]{article} \documentclass[11pt]{article} \documentclass[12pt]{article}标准文档类article、report、book支持的就是 10pt、11pt、12pt 这三个档位默认是 10pt。这个设置影响的是整个文档的基础字号所有没被局部覆盖的文字都会以此为基准。注意这里有个很容易被忽略的点这三个值并不是绝对的“固定大小”而是整个文档的字号基准。LaTeX 内部会根据这个基准去计算行距、标题大小、段落间距等一系列排印参数。也就是说你选了 11pt不只是正文变大了一点连带标题、脚注、页眉的间距体系都会随之调整。这就是 LaTeX 所谓“全局排版一致性”的体现。如果是中文文档最常见的是用ctexart、ctexrep、ctexbook这类宏包配合zihao选项来设置中文字号。比如\documentclass[zihao5]{ctexart}这里zihao5对应的就是中文排版的五号字约等于 10.5pt。你可能会问为什么不用[12pt]这种写法因为 CTeX 宏包接入的是整个中文字体框架它对字号有一套和中文排版习惯对应的体系直接用zihao选项会更直观。中文字号zihao 参数对应磅值约常见用途初号zihao042pt封面标题小初zihao-036pt章节大标题一号zihao128pt标题二号zihao222pt标题三号zihao316pt子标题四号zihao414pt正文强调小四zihao-412pt常用正文五号zihao510.5pt常用正文小五zihao-59pt脚注、表格这里有个小细节zihao-4里的负号不是“负数”的含义而是中文排版里“小四”的约定写法。初次接触可能会觉得奇怪但用久了就会发现其实挺顺手。2.2 局部字号LaTeX 内置的相对字号命令除了全局设置更多时候我们要做的是局部调整。比如某个段落要突出一下、表格里要缩小文字、标题要放大。LaTeX 提供了一套从\tiny到\Huge的声明式字号命令按作用范围从小到大排列\tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \Huge这些命令是“声明式”的也就是说它们不直接作用于某个具体字符而是改变从当前位置开始往后的所有文字的字号直到当前分组或环境结束。来看个具体例子{\Large 这是大号文字} 正常文字 {\small 这段是较小的文字} 恢复默认大小。重点来了这里的{ }不能省。如果你写成这是正常文字 \Large 后面全都会变大 直到文档结束。那就意味着从\Large之后所有内容都会变大包括后续的每个段落。这就是很多新手第一次用的时候“翻车”的地方——改了一个地方整个后续的内容全都跟着变了。原因就是没用花括号限定作用域。如果你想要“这一段是四号字”那么最直接的做法是{\zihao{4} 这一整段都是四号字。}但要注意如果是一整个段落更标准的方式是用begin环境配合\zihao\begin{quote} \zihao{4} 这一整段引用的内容都是四号字。 \end{quote}quote环境在这里只是举例实际上\zihao放在任意环境的开头作用范围就会扩展到整个环境。2.3 这些相对字号命令的实际效果很多人会好奇\large到底是多少磅其实它不是固定值而是相对于当前全局字号按比例缩放的结果。以 article 类 10pt 基准为例各命令对应效果大致如下命令对应磅值10pt基准对应中文习惯\tiny5pt七号左右\scriptsize7pt六号左右\footnotesize8pt小六偏大\small9pt小五\normalsize10pt五号偏小\large12pt小四\Large14.4pt四号\LARGE17.28pt三号偏小\huge20.74pt二号偏小\Huge24.88pt一号偏大也就是说如果你在 11pt 基准下用\large实际尺寸会比 10pt 基准下的\large更大一点。这是 LaTeX 的一种设计理念——字号是“相对层级”而不是“绝对数值”。这样做的好处是当你全局调整基准字号时标题和正文的相对大小关系仍然能保持协调。3. 通过宏包实现任意字号精确控制3.1 基础篇fontsize 命令的正确用法内置命令虽然方便但如果我要一个 13.5pt 的字号怎么办用\large不够、\Large又太大这时候就需要\fontsize命令了。\fontsize{13.5pt}{16.2pt}\selectfont\fontsize需要两个参数第一个是字号大小第二个是行距。注意这里的行距是指“基线到基线的距离”不是我们常说的“行高”。两个参数都设置好之后必须调用\selectfont才会真正生效。举个例子{\fontsize{15pt}{18pt}\selectfont 这是 15pt 字号、18pt 行距的文字。}有人会问为什么这么麻烦为什么不搞一个像 Word 那样直接输入“15pt”就完事的机制原因是 LaTeX 的字体机制里一个字体实例是由“编码 字体族 系列 形状 字号”五个维度联合决定的。当你改变字号时LaTeX 需要根据这五个维度去查找对应的字体度量文件tfm 文件然后再计算行长、断行、分页等。\selectfont就是触发这种“字体切换”的按钮。如果你只设置参数不调用\selectfontLaTeX 内部的状态并没有刷新字号自然也不会变。3.2 进阶篇几个常用宏包让设置更高效手动调用\fontsize和\selectfont虽然灵活但每次都要写两行确实累。有一些宏包可以让你更方便地完成字体设置。第一个是anyfontsize宏包。为什么需要它因为 LaTeX 默认的 Computer Modern 字体在放大到一定倍数后会找不到对应的字体文件产生LaTeX Font Warning: Font shape ... undefined的警告。anyfontsize宏包允许你使用任何磅值的字号它会根据需求自动缩放字体。\usepackage{anyfontsize}用了这个宏包之后你就可以放心地写{\fontsize{9.5pt}{12pt}\selectfont 这是 9.5pt 的字号。}第二个比较常用的是moresize宏包它提供了\HUGE命令比\Huge还要大。对于做海报、封面这类场景很有用。第三个是fix-cm宏包它修正了 Computer Modern 字体在非常规尺寸下的某些问题让任意字号使用起来更顺畅。一般来说如果涉及自定义字号建议fix-cm和anyfontsize搭配使用\usepackage{fix-cm} \usepackage{anyfontsize}顺便提一句如果你是使用 XeLaTeX 或 LuaLaTeX 编译配合fontspec宏包字体大小设置的逻辑会略有不同。fontspec支持 OpenType 字体的实时缩放所以你可以用\fontsize{15pt}{20pt}\selectfont大多数时候不需要额外宏包也能正常工作。这在现代 LaTeX 工作流里是一个非常省心的特性。3.3 中文字号切换CTeX 的 zihao 命令才是正解如果你在写中文文档最推荐的局部字号命令其实是\zihao。它由 CTeX 宏集提供和中文排版习惯直接对应。用法很简单{\zihao{4} 这是四号字} {\zihao{-4} 这是小四号字} {\zihao{5} 这是五号字}\zihao的参数规则我上面已经列过一张表了这里再补充几个细节。数字从 0 到 8数字越小字号越大。数字前面带负号表示“小X号”比如-4就是小四-5就是小五。如果你不想要中文字号体系也可以直接用磅值配合\zihao不行必须用\fontsize。所以我的建议是中文正文和标题优先用\zihao英文和特殊场景用\fontsize。两者互不冲突可以根据需要混用。4. 数学公式和浮动体里的字号调整4.1 数学公式的字号控制逻辑LaTeX 的数学模式和文本模式共享一套字号体系但数学公式内部还有自己的“相对尺寸层级”。什么意思呢当你在公式里写\frac{1}{2}时分子和分母的字号会自动比公式主体小一号这是 TeX 引擎根据当前字号的“数学样式”自动计算的。如果你需要手动调整公式里的字号有几种方式第一种直接在外面嵌套字号命令{\Large $Emc^2$}这种方式会改变整个公式的字号包括符号、分数上下标等。但注意它不会改变公式内部的相对比例关系——分子仍然会比分母主体小。第二种使用\mathlarger系列命令。这需要导入relsize宏包\usepackage{relsize}然后在公式里用\mathlarger来局部放大某个符号$\mathlarger{\sum_{i1}^{n} i} \frac{n(n1)}{2}$这样可以让求和符号更大一些视觉上更协调。第三种如果是要在displaymath/equation环境中放大整个公式直接用\begin{large} ... \end{large}包裹会报错。正确做法是\begin{equation} {\large E mc^2} \end{equation}也就是在公式环境内部再用一个花括号分组。4.2 表格里的字号怎么调才不破坏排版表格是 LaTeX 里最容易出现字号问题的场景。因为表格内容多经常需要缩小字号来适配页面宽度。最简单的办法是在表格环境里声明字号\begin{table}[htbp] \centering \small \begin{tabular}{ccc} ... \end{tabular} \end{table}这里\small声明在tabular之前作用范围覆盖整个表格。如果你想进一步缩小可以用\footnotesize甚至\scriptsize。但要注意表格缩得太小会导致可读性严重下降排版看起来会很“挤”所以我在实际项目中一般最多用到\footnotesize再小就建议重新设计表格结构而不是硬缩字号了。还有个很实用的技巧用tabular的环境参数来限定字号作用域避免影响表格前后正文{\small \begin{tabular}{ccc} ... \end{tabular} }或者用环境\begin{small} \begin{tabular}{ccc} ... \end{tabular} \end{small}small环境是 LaTeX 内置的对应的还有large、Large等环境。用环境的好处是代码结构清晰不会出现花括号配错的问题。说到表格就不得不再提一个常见的坑tabular里如果用了\hline或其他线型命令修改字号后线宽不会自动变。这是因为线宽是由\arrayrulewidth决定的和字号无关。所以你缩小表格字号后可能会觉得表格线看起来“偏粗”这时候可以单独调整\setlength{\arrayrulewidth}{0.4pt}不过这个属于微调了大部分场景下保持默认线宽问题不大。4.3 图片标题、脚注、页眉页脚的字号LaTeX 里不同位置的文字默认字号是不一样的设计。比如脚注默认是\footnotesize图片标题默认是\small页眉页脚默认是\normalsize或当前基准字号。如果你想统一修改这些元素的字号最推荐的方式是重定义相关宏而不是用花括号包裹。比如把图片标题改成\Large\usepackage{caption} \captionsetup{fontLarge}这里的fontLarge就直接把标题字体设为\Large对应的字号了。caption宏包还支持多种设置方式\captionsetup{fontsmall} % 小一号 \captionsetup{fontfootnotesize} % 脚注大小对于脚注可以用\renewcommand{\footnotesize}{\fontsize{9pt}{11pt}\selectfont}但这条命令放在导言区的话需要注意作用顺序。更稳妥的方式是使用footmisc宏包\usepackage[fontsmall]{footmisc}5. 字体的另一面字号之外还有哪些“坑”5.1 中文文档里字体族切换与字号配合中文字号调整之后还有一类问题经常同时出现字体种类不对。比如你用了\zihao{3}放大了字号但文字显示的仍然是默认的宋体你想要的是黑体标题。这就需要配合字体族切换命令。在 CTeX 宏集环境下中文常用的切换命令是\songti % 宋体 \heiti % 黑体 \fangsong % 仿宋 \kaishu % 楷书所以如果你想要一个三号黑体标题可以这样写{\heiti\zihao{3} 这是一个黑体三号标题}顺序无所谓先甩字号再甩字体也行命令之间互不影响。这里有一个我见过很多次的问题英文文本里使用这些中文字体命令时英文部分不会变化只有中文字符会变。这是正常现象因为中文字体命令内部只切换 CJK 字体族不影响西文字体。如果你希望中文和英文同时变成粗体需要再加一个\bfseries{\heiti\zihao{4}\bfseries 这是粗体中文 粗体英文 mixed text}5.2 字号改了但没效果最常见的原因排查手册说实话写 LaTeX 这几年我见过太多次“改了但没反应”的情况。这里把常见原因整理成表格方便你对照排查。症状可能原因解决办法字号命令写了一大堆编译出来没变化命令写在分组外但被后面的命令覆盖检查是不是同一个作用域内有多个字号命令后者覆盖前者\fontsize设了但没效果少了\selectfont补上\selectfont编译时提示字体形状未定义当前字体族不支持该字号加\usepackage{fix-cm}或\usepackage{anyfontsize}全局12pt设置后标题不变标题字号由\documentclass内部根据基准字号计算不是固定值属正常现象可用ctex的\zihao在标题环境中单独设置表格缩字号后列宽不变tabular的列宽是固定的改用tabularx或重新计算列宽PDF 里中文字号看起来忽大忽小PDF 查看器的缩放倍率不同在查看器设置为 100% 或实际尺寸后再对比还有一个非常常见的场景需要提醒如果你在\begin{document}之前导言区用了\zihao它是不会生效的导言区设置的任何字号命令都会被文档正文里的默认设置覆盖。如果你确实需要在导言区设置全局中文字号用 CTeX 文档类选项即在\documentclass里写[zihao5]。5.3 LaTeX 的警告信息到底在说什么很多初学者看到编译日志里出现LaTeX Font Warning就紧张其实大部分情况下这些警告不影响最终输出只是告诉你“当前字号的精确匹配字体不存在LaTeX 帮你缩放了一个相近的字体”。举个例子LaTeX Font Warning: Font shape OT1/cmr/m/n in size 13.5 not available (Font) size 10.95 substituted.这说明你想用 13.5pt 的 Computer Modern Roman 字体但当前字体文件里没有这个精确尺寸于是 LaTeX 用 10.95pt 的字体替代了。这个警告一般不会有明显视觉问题但如果你对精度要求很高可以加上fix-cm宏包来消除。顺便说一句fix-cm宏包不只是为了消除警告它还会修正 Computer Modern 字体在非标准尺寸下的“笔画粗细感”。有时候你用了\fontsize{15pt}但没加载这个宏包出来的文字笔画会偏细看起来不协调。这也是一个容易被忽略的细节。6. 实操案例从“想改”到“改好”的一次完整操作6.1 案例一论文封面标题的调整很多学校论文模板要求封面主标题是“二号黑体居中”。用 CTeX 宏集最简单可靠的写法是\begin{titlepage} \centering {\heiti\zihao{2} 基于深度学习的XXXXX方法研究} \vspace{2cm} {\songti\zihao{4} 作者姓名} \vspace{1cm} {\songti\zihao{-4} 指导教师XXX} \end{titlepage}这里核心思想就是把字体族、字号、内容放进同一个花括号分组里让它们的作用范围只覆盖标题本身。有几次我在自己的论文里用\zihao{2}时发现标题虽然变大了但和下面的作者姓名间距看起来特别大。原因是我用了\\换行而没在字号命令前调整\vspace。正确做法是用\vspace控制间距而不是靠空行或\\来盲推。6.2 案例二正文中的某段引用缩小字号写审稿意见或者做技术报告时经常需要把大段引用文字缩小。推荐这样写\begin{quote} {\small 这一段文字会以小一号的字号呈现并且保持独立的引用样式。 } \end{quote}这里用quote环境负责缩进与边界{\small ...}负责缩小字号。两层职责分离代码更容易维护。如果你需要的是“比正常小两号”直接换\begin{quote} {\footnotesize 这一段文字更小。 } \end{quote}6.3 案例三一行公式放大显示有时候公式里的求和符号、积分符号太小视觉效果不太好。这时候可以用\mathlarger\documentclass{article} \usepackage{amsmath} \usepackage{relsize} \begin{document} \[ \mathlarger{\sum_{i1}^{n}} i \frac{n(n1)}{2} \] \end{document}注意\mathlarger一次放大一级如果你觉得还不够大可以用\mathlarger{...}嵌套两层、三层或者用\mathlarger{...}\mathlarger{...}叠加具体看宏包说明通常是嵌套。6.4 案例四图注、表注批量缩小如果整篇文档的所有图注表注都想缩小一号不需要一个个去改直接在导言区全局设置\usepackage{caption} \captionsetup{fontsmall}caption宏包还支持设置图注与表注之间的间距、对齐方式等是非常值得花时间读一下文档的宏包。6.5 一些关于编译引擎的判断最后聊一个和字号相关的“隐性”问题你用的编译引擎决定了字号命令的兼容范围。如果用pdfLaTeX编译中文字号一般依赖 CTeX 宏集西文字体是 Computer Modern 或类似 Type1 字体\zihao命令可用。如果用XeLaTeX编译推荐配合fontspec和ctex宏包中文字体可以直接指定系统字体文件字号设置能力更强。如果用LuaLaTeX和 XeLaTeX 类似但某些底层排版细节有差异。我在实际项目中中文文档基本都用 XeLaTeX因为字体选择灵活而且ctex宏包在 XeLaTeX 下的兼容性最稳定。如果你还在用 pdfLaTeX 编中文文档遇到诡异的中文字号问题第一建议就是换到 XeLaTeX 重新编译。6.6 最后的避坑清单根据我过往经验再做一个小总结算是给上面内容的补充第一所有的字号命令本质都是在“切换字体实例”不是给文字加属性。所以要注意作用域要么用花括号要么用环境。第二字号和行距要一起考虑。单独改字号不改行距段落会显得很挤尤其是大字号文字。用\fontsize{size}{baselineskip}时第二个参数一般取第一个参数的 1.2 倍左右。第三LaTeX 里“12pt”和 Word 里的“小四”并不是严格相等。LaTeX 的 pt 是 TeX point和 PostScript point 有细微换算差异。如果你在精确对接出版要求建议用中文排版工具确认最终磅值。第四编译日志里的字体警告要看但不要过度紧张。绝大部分字体警告都只是“找不到精确尺寸、用替代字体缩放”的信息实际输出效果影响很小。我自己在写长文档的时候一般会在导言区固定好全局字号然后用\zihao和\fontsize做局部微调。养成这种“全局为主、局部为辅”的习惯之后改字号这件事就不会再让人觉得头疼了。希望这篇内容对你实际用 LaTeX 时有帮助。