05_LaTeX之排版样式设定
05_ 之排版样式设定
本文主体内容来自一份 (不太) 简短的 LATEX2ε 介绍。
本章内容将一览如何修改
字体和字号



字体样式
\bfseries
形式的命令将会影响之后所有的字符,如果想要让它在局部生效,需要用花括号分组,也就是写成\bfseries <some text>
这样的形式;对应的 \textbf
形式带一个参数,只改变参数内部的字体,更为常用。
在公式中,直接使用\textbf
等命令不会起效,甚至报错。\mathbf
等。
字号
字号命令实际大小依赖于所使用的文档类及其选项。下表列出了这些命令在标准文档类中的绝对大小,单位为 pt。

使用字号命令的时候,通常也需要用花括号进行分组,如同 \rmfamily
那样。

\fontsize
用于设定任意大小的字号:
\fontsize{<size>}{<base line-skip>}
\fontsize
用到两个参数,<size>
为字号,<base lineskip>
为基础行距。表 \fontsize
的设定需要 \selectfont
命令才能立即生效,而表 5.2 的字号设定都是立即生效的。
选用字体宏包
下表 列出了较为常用的字体宏包,其中相当多的宏包还配置了数学字体,或者文本、数学字体兼而有之。

字体编码
常见的正文字体编码有 \textgreater
和 \textless
输入;
切换字体编码要用到 fontenc
宏包:
\usepackage[T1]{fontenc}
如果使用 fontspec
宏包调用 fontenc
宏包。
使用 fontspec
宏包更改字体
fontspec
。宏包提供了几个设置全局字体的命令,设置 \rmfamily
等对应命令的默认字体:
\setmainfont{<font name>}[<font features>] \\
\setsansfont{<font name>}[<font features>] \\
\setmonofont{<font name>}[<font features>]
其中 <font name>
使用字体的文件名(带扩展名)或者字体的英文名称。<font features>
用来手动配置对应的粗体或斜体,比如为 Windows 下的无衬线字体 Arial 配置粗体和斜体(通常情况下自动检测并设置对应的粗体和斜体,无需手动指定):
\setsansfont{Arial}[BoldFont={Arial Bold}, ItalicFont={Arial Italic}]
<font features>
还能配置字体本身的各种特性,这里不再赘述,感兴趣的读者请参考 fontspec
宏包的帮助文档。
需要注意的是,fontspec
宏包会覆盖数学字体设置。需要调用 上表 中列出的一些数学字体宏包时,应当在调用 fontspec
宏包时指定 fontspec
宏包可能被其它宏包或文档类(如 ctex
文档类)自动调用时,则在文档开头的 documentclass
命令里指定
在 ctex
宏包或文档类中更改中文字体
前文已经介绍过的 ctex
宏包或文档类提供了和fontspec
宏包非常类似的语法设置中文字体(使用 xeCJK
宏包提供;使用 ctex
宏包或文档类对 luatexja
宏包提供的类似命令进行额外封装)。:
\setCJKmainfont{<font name>}[<font features>] \\
\setCJKsansfont{<font name>}[<font features>] \\
\setCJKmonofont{<font name>}[<font features>]
由于中文字体少有对应的粗体或斜体,<font features>
里多用其他字体来配置,比如在 Windows 中设定基本字体为宋体,并设定对应的
\setCJKmainfont{SimSun}[BoldFont=SimHei, ItalicFont=KaiTi]
使用 unicode-math
宏包配置 Unicode 数学字体
Unicode 数学字体是一类 OpenType 字体,包含了 Unicode 字符集中的数学符号部分,字体中也设定了数学公式排版所需的一些参数。在 unicode-math
宏包可以调用 Unicode 数学字体配置数学公式的字体风格。
在导言区使用\usepackage{unicode-math}
后,使用 \setmathfont
命令即可:
\setmathfont{<font name>}[<font features>]
绝大多数时候,只需要给定字体名称 <font name>
即可。Unicode 数学字体相比于正文字体的选择余地不多。下表 给出了较为常用的 Unicode 数学字体。

文字装饰和强调
强调文字的方法,或者是添加下划线等装饰物,或者是改变文字的字体。
\underline
命令用来为文字添加下划线:
An \underline{underlined} text.
\underline
命令生成下划线的样式不够灵活,不同的单词可能生成高低各异的下划线,并且无法换行。ulem
宏包提供了更灵活的解决方案,它提供的 \uline
命令能够轻松生成自动换行的下划线:

前一节介绍了 \emph
命令,它将文字变为斜体以示强调,而如果在已强调的文字中嵌套使用 \emph
命令,命令内则使用直立体文字:
Some \emph{emphasized words,
including \emph{double-emphasized}
words}, are shown here.

段落格式和间距
长度和长度变量
在本节首先统一介绍长度和长度变量。长度的数值 <length>
由数字和单位组成。常用的单位见下表。

在一些情况下还会用到可伸缩的“弹性长度”,如
也可只定义
长度的数值还可以用长度变量本身或其倍数来表达,如
\newlength{\<length command>}
长度变量可以用 \cmd{setlength} 赋值,或用 \cmd{addtolength} 增加长度:
\setlength{\<length command>}{<length>}
\addtolength{\<length command>}{<length>}
行距
前文中我们提到过 \fontsize
命令可以为字号设定对应的行距,但很少那么用。更常用的办法是在导言区使用 \linespread
命令。
\linespread{<factor>}
其中 <factor>
作用于基础行距而不是字号。缺省的基础行距是 1.2 倍字号大小(参考 \fontsize
命令),因此使用 \linespread{1.5}
意味着最终行距为 1.8 倍的字号大小。
如果不是在导言区全局修改,而想要局部地改变某个段落的行距,需要用 \selectfont
命令使 \linespread
命令的改动立即生效:

字号的改变是即时生效的,而行距的改变直到文字分段时才生效。如果需要改变某一部分文字的行距,那么不能简单地将文字包含在花括号内。注意下面两个例子中 \par
命令的位置:

段落格式
以下长度分别为段落的左缩进、右缩进和首行缩进:
\setlength{\leftskip}{<length>}
\setlength{\rightskip}{<length>}
\setlength{\parindent}{<length>}
它们和设置行距的命令一样,在分段时生效。
控制段落缩进的命令为:
\cmd{indent}
\cmd{noindent}
parindent
。如果需要在某一段不缩进,可在段落开头使用\noindent
命令。相反地,\indent
命令强制开启一段首行缩进的段落。在段落开头使用多个 \indent
命令可以累加缩进量。
\chapter
、\section
等章节标题命令之后的第一段不缩进(ctex
宏包和文档类默认按照中文习惯保持标题后第一段的首行缩进)。如果不习惯这种设定,可以调用 indentfirst
宏包,令第一段的首行缩进照常。
段落间的垂直间距为 parskip
,如设置段落间距在
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
水平间距
\hspace
命令:

\hspace
命令生成的水平间距如果位于一行的开头或末尾,则有可能因为断行而被舍弃。可使用 \hspace*
命令代替\hspace
命令得到不会因断行而消失的水平间距。
命令 \stretch{<n>}
生成一个特殊弹性长度,参数 <n>
为权重。它的基础长度为 0pt,但可以无限延伸,如果同一行内出现多个 \stretch{<n>}
,这一行的所有可用空间将按每个 \stretch
命令给定的权重 <n>
进行分配。
命令 \fill
相当于 \stretch{1}
(注意不要用

在正文中用 \hspace
命令生成水平间距时,往往使用 \quad
和 \qquad
命令,它们也可以用于文本中,分别相当于 \hspace{1em}
和 \hspace{2em}
:

垂直间距
在页面中,段落、章节标题、行间公式、列表、浮动体等元素之间的间距是 \parskip
,默认设置为
如果我们想要人为地增加段落之间的垂直间距,可以在两个段落之间的位置使用 \vspace
命令:

\vspace
命令生成的垂直间距在一页的顶端或底端可能被“吞掉”,类似 \hspace
在一行的开头和末尾那样。对应地,\vspace*
命令产生不会因断页而消失的垂直间距。\vspace
也可用 \stretch}
设置无限延伸的垂直长度。
在段落内的两行之间增加垂直间距,一般通过给断行命令 \\
加可选参数,如 \\[6pt]
或 \\*[6pt]
。
\vspace
也可以在段落内使用,区别在于 \vspace
只引入垂直间距而不断行:

另外 \bigskip
, \medskip
, \smallskip
来增加预定义长度的垂直间距。

页面和分栏
控制页边距的参数由 下图 里给出的各种长度变量控制。可以用 \setlength
命令修改这些长度变量,以达到调节页面尺寸和边距的作用;反之也可以利用这些长度变量来决定排版内容的尺寸,如在 \includegraphics
命令的参数里,设置图片或表格的宽度为 0.8\textwidth
。

页边距等比较直观的参数则必须间接设置。根据 上图 将各个方向的页边距计算公式给出(以奇数页为例):

如果需要设置合适的 <left-margin>
和 <right-margin>
,就要通过上述方程组把\oddsidemargin
和 \textwidth
等参数解出来!
幸好 geometry
宏包提供了设置页边距等参数的简便方法,能够帮我们完成背后繁杂的计算。
利用 geometry
宏包设置页面参数
geometry
宏包的调用方式类似于 graphicx
,在
既可以调用 geometry
宏包,然后用其提供的 \geometry
命令设置页面参数:
\usepackage{geometry}
\geometry{<eometry-settings>}
也可以直接在宏包选项中设置:
\usepackage[<geometry-settings>]{geometry}
其中 <geometry-settings>
多以 <key>=<value>
的形式组织。
比如,符合 Microsoft Word 习惯的页面设定是 A4 纸张,上下边距 1 英寸,左右边距 1.25 英寸,于是我们可以通过如下两种等效的方式之一设定页边距:
\geometry{a4paper,left=1.25in,right=1.25in,top=1in,bottom=1in}
% or like this:
\geometry{a4paper,hmargin=1.25in,vmargin=1in}
又比如,需要设定周围的边距一致为 1.25 英寸,可以用更简单的语法:
\geometry{margin=1.25in}
对于书籍等双面文档,习惯上奇数页右边、偶数页左边留出较大的页边距,而靠近书脊一侧的奇数页左边、偶数页右边页边距较小。可以这样设定:
\geometry{inner=1in,outer=1.25in}
需要指出的是,通过 geometry
宏包设置的纸张大小是输出 PDF 文件的真实大小,而在文档类选项中设置的参数实际上只影响输出区域。geometry
宏包还能够修改页眉页脚高度、边注宽度等参数,并且能比较好地处理各参数之间的依赖关系。更详细的用法不再赘述,感兴趣的用户可查阅其帮助文档。
页面内容的垂直对齐
以下命令分别令页面在垂直方向向顶部对齐/分散对齐:
\raggedbottom
\flushbottom
分栏
\onecolumn
\twocolumn[<one-column top material>]
\twocolumn
支持带一个可选参数,用于排版双栏之上的一部分单栏内容。
切换单/双栏排版时总是会另起一页(\clearpage
)。在双栏模式下使用 \newpage
会换栏而不是换页;\clearpage
则能够换页。
双栏排版时每一栏的宽度为 \columnwidth
,它由\textwidth
减去 \columnsep
的差除以 2 得到。两栏之间还有一道竖线,宽度为 \columnseprule
,默认为零,也就是看不到竖线。
一个比较好用的分栏解决方案是 multicol
,它提供了简单的
\begin{multicols}{3}
...
\end{multicols}
multicol
宏包能够在一页之中切换单栏/多栏,也能处理跨页的分栏,且各栏的高度分布平衡。但代价是在 multicols
环境中只能用跨栏的 float
宏包提供的
页眉页脚
基本的页眉页脚样式
\pagestyle
来修改页眉页脚的样式:
\pagestyle{<page-style>}
命令 \thispagestyle
只影响当页的页眉页脚样式:
\thispagestyle{<page-style>}
<page-style>
参数为样式的名称,在

其中
文档类, 选项: 偶数页为页码和节标题,奇数页为小节标题和页码; 文档类, 选项: 页眉为节标题和页码; 和 文档类, 选项: 偶数页为页码和章标题,奇数页为节标题和页码; 和 文档类, 选项: 页眉为章标题和页码。
\pagenumbering
命令令我们能够改变页眉页脚中的页码样式:
\pagenumbering{<style>}
<style>
为页码样式,默认为 \pagenumbering
命令后会将页码重置为 1。\frontmatter
和 \mainmatter
内部就使用了 \pagenumbering
命令切换页码样式。
手动更改页眉页脚的内容
对于 \chapter*
等命令而无法自动生成页眉页脚的情况:
\markright{<right-mark>}
\markboth{<left-mark>}{<right-mark>}
在双面排版、<left-mark>
和 <right-mark>
的内容分别预期出现在左页(偶数页)和右页(奇数页)。
事实上 \chapter
和 \section
等章节命令内部也使用 \markboth
或者 \markright
生成页眉。
\slshape
,斜体定义在 markboth
等命令参数里先使用 \normalfont
,再使用想要的字体样式命令,或直接尝试使用 fancyhdr
宏包):
\renewcommand\chaptermark[1]{%
\markboth{Chapter \thechapter\quad #1}{}}
\renewcommand\sectionmark[1]{%
\markright{\thesection\quad #1}}
其中 \thechapter
、\thesection
等命令为章节计数器的数值。注意以上代码适用于 \sectionmark
和 \subsectionmark
。
fancyhdr
宏包
fancyhdr
宏包改善了页眉页脚样式的定义方式,允许将内容自由安置在页眉和页脚的左、中、右三个位置,还为页眉和页脚各加了一条横线。
fancyhdr
自定义了样式名称 fancyhdr
宏包定义页眉页脚之前,通常先用 \pagestyle{fancy}
调用这个样式。在 fancyhdr
定义页眉页脚的命令为:
\fancyhf[<position>]{...}
\fancyhead[<position>]{...}
\fancyfoot[<position>]{...}
其中 <position>
为 L(左)/ C(中)/ R(右)以及与 O(奇数页)/ E(偶数页)字母的组合。\fancyhf
用于同时定义页眉和页脚,习惯上使用 \fancyhf{}
来清空页眉页脚的设置。
下面的源代码 给出了 fancyhdr
基础用法的一个示例,效果为将章节标题放在和 headings 一致的位置,但使用加粗格式;页码都放在页脚正中;修改横线宽度,“去掉”页脚的横线。

fancyhdr
还支持用 \fancypagestyle
为自定义的页眉页脚样式命名,或者重新定义已有的样式如
% 自定义 myfancy 样式
\fancypagestyle{myfancy}{%
\fancyhf{}
\fancyhead{...}
\fancyfoot{...}
}
% 使用样式
\pagestyle{myfancy}
更多用法请参考 fancyhdr
宏包的帮助文档。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南