5. 排版样式设定

5. 排版样式设定 #

先选择合适的文档类,再调整样式。学校或期刊模板已有明确要求时,以模板接口为准;不要为了局部外观改写大批底层长度。

5.1 字体和字号 #

5.1.1 字体样式 #

LaTeX 将字体族、字重、字形和字号分开控制:

属性 局部命令 声明
衬线 \textrm{...} \rmfamily
无衬线 \textsf{...} \sffamily
等宽 \texttt{...} \ttfamily
加粗 \textbf{...} \bfseries
直立 \textup{...} \upshape
斜体 \textit{...} \itshape
倾斜体 \textsl{...} \slshape
小型大写 \textsc{...} \scshape
默认字体 \textnormal{...} \normalfont

局部命令只影响参数;声明影响后续内容,通常用花括号限定范围。某些中文字体没有真正的粗体或斜体,ctex 的字体配置可能改用另一种中文字体,因此中西文的变化不一定完全一样。

公式里的字母样式另用第 4 章的数学字体命令。

5.1.2 字号 #

字号命令从小到大为 \tiny、\scriptsize、\footnotesize、\small、\normalsize、\large、\Large、\LARGE、\huge、\Huge。

它们是相对文档基本字号的等级,不是固定的点数。需要精确设置时用 \fontsize{字号}{基线距离}\selectfont:

{\fontsize{14pt}{20pt}\selectfont
这一段使用 14pt 字号,基线距离设为 20pt。\par}

段落在分组内用 \par 结束,才能使用该分组内的行距。ctex 还提供中文字号接口,如 \zihao{-4} 表示小四号。

5.1.3 选用字体宏包 #

传统字体方案可通过成套宏包配置,例如 lmodern,或分别配置正文和数学的 newtxtext/newtxmath、newpxtext/newpxmath。

字体宏包可能覆盖数学字形。不要同时加载多套完整字体方案;先确定使用传统字体宏包,还是 fontspec 配合 OpenType 字体。

5.1.4 字体编码 #

字体编码规定字体中的字符位置和命令映射,与源文件的 UTF-8 编码不是一回事。传统 pdfLaTeX 文档可能使用:

% 传统 pdfLaTeX 字体方案,不用于下面的 fontspec 示例
\usepackage[T1]{fontenc}

XeLaTeX/LuaLaTeX 使用 fontspec 选择 OpenType 字体时,不要再照搬这行 fontenc 配置。

5.1.5 使用 fontspec 宏包更改字体 #

fontspec 需要 XeLaTeX 或 LuaLaTeX。ctexart 在本教程的 XeLaTeX 环境中已经加载它。三种主要接口是:

\setmainfont{字体名称或文件名}[字体选项]
\setsansfont{字体名称或文件名}[字体选项]
\setmonofont{字体名称或文件名}[字体选项]

名称指编译环境中的字体,不一定是个人电脑上安装的字体。为了便于复现,可以用发行版中的文件名明确指定各字形:

% 导言区;ctexart 在 XeLaTeX 下已加载 fontspec
\setmainfont{lmroman10-regular.otf}[
  BoldFont=lmroman10-bold.otf,
  ItalicFont=lmroman10-italic.otf,
  BoldItalicFont=lmroman10-bolditalic.otf
]

这样 \textbf、\textit 仍然有效。用户上传的字体还可使用 Path 等选项指定目录。

若已有传统数学字体宏包,需要根据它的文档判断是否给 fontspec 加 no-math 选项;当它由 ctex 文档类间接加载时,可通过文档类选项传递。不要不加区分地复制整段字体导言区。

5.1.6 在 ctex 宏包或文档类中更改中文字体 #

\setCJKmainfont、\setCJKsansfont、\setCJKmonofont 分别配置中文衬线、无衬线、等宽字体。例如在 XeLaTeX 下:

% 导言区,使用已有的 ctexart 中文支持
\setCJKmainfont{FandolSong-Regular.otf}[
  BoldFont=FandolSong-Bold.otf,
  ItalicFont=FandolKai-Regular.otf
]

这里用楷体承担斜体角色,是中文字体配置的一种做法。若 fontset=fandol 已满足需求,不需要再手工重复这些设置。把使用 Windows 字体的示例复制到其他系统前,要确认对应字体存在。

5.1.7 使用 unicode-math 宏包配置 Unicode 数学字体 #

这是另一套数学字体方案,使用 OpenType 数学字体。下面的完整示例单独运行,不要把 amssymb、bm 或传统数学字体宏包接在后面:

\documentclass[UTF8,fontset=fandol]{ctexart}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{latinmodern-math.otf}

\begin{document}
\[
  \symbb{R},\quad \symbfit{v},\quad
  \int_0^1 x^2\,\symup{d}x=\frac{1}{3}.
\]
\end{document}

\setmathfont 要选择真正的数学字体,而不是普通正文字体。可选字体还包括 TeX Gyre 系列数学字体、XITS Math、Libertinus Math 等,具体可用性取决于编译环境。

unicode-math 的 \sym... 系列可区分数学符号字形与公式内文字。采用它以后,应按该宏包的接口设置,而不是混合两套字体命令的假设。

5.2 文字装饰和强调 #

\emph 表示语义上的强调,默认在直立文字中变斜,在已经强调的文字中恢复直立:

这是 \emph{需要注意的内容,其中还有 \emph{再次强调} 的部分}。

\textbf 则明确要求加粗。强调应服务于信息层次,而不是给整段文字加满不同样式。

\underline 添加不能自动断行的下划线;ulem 提供可断行的 \uline:

% 导言区:normalem 保留 emph 的原本含义
\usepackage[normalem]{ulem}

% 正文
\uline{需要下划线标出的文字。}

ulem 默认会改写强调行为,normalem 可以避免这个副作用。

5.3 段落格式和间距 #

5.3.1 长度和长度变量 #

常用单位包括 pt、bp、mm、cm、in、em、ex;mu 用于数学间距。1in=72.27pt,而 1in=72bp。em 和 ex 随字体、字号变化。

弹性长度如 12pt plus 2pt minus 3pt,表示以 12pt 为自然长度,排版时可伸缩。自定义长度并赋值:

% 导言区
\newlength{\notewidth}
\setlength{\notewidth}{0.8\textwidth}
\addtolength{\notewidth}{-1cm}

\textwidth 是整块正文宽度,\columnwidth 是栏宽,\linewidth 是当前环境可用行宽。列表、盒子或双栏中,插图通常按 \linewidth 缩放更合适。

5.3.2 行距 #

\linespread{倍数} 调整基础行距,不等于“字号的几倍”。标准西文文档的基础行距通常约为字号的 1.2 倍,ctex 文档类有自己的配置,不能套用同一个数值。

{\linespread{1.3}\selectfont
这里改变这一段的行距。让段落在分组结束前结束,设置才作用于该段。\par}

导言区设置 \linespread 可影响全文。需要专门的单倍、双倍行距接口时,可以查 setspace 手册。

5.3.3 段落格式 #

\parindent 控制首行缩进,\parskip 控制段落间距;\leftskip 和 \rightskip 可增加段落左右缩进。

% 导言区
\setlength{\parindent}{2em}
\setlength{\parskip}{0pt}

某一段不缩进时,在段首用 \noindent。标准西文类通常不缩进标题后的第一段,ctex 已按中文习惯处理,通常不需要再加载 indentfirst。

5.3.4 水平间距 #

\hspace{1cm} 插入指定间距;\hspace* 在行首等位置保留这段空间。\hfill 填满剩余可用空间:

左侧文字\hfill 右侧文字

多个 \hspace{\stretch{权重}} 按权重分配剩余空间。不要用这些命令代替表格的列对齐。

5.3.5 垂直间距 #

段落之间用 \vspace{长度} 加距离,\vspace* 在页首等位置也保留。\smallskip、\medskip、\bigskip 使用预设间距。

第一段。

\medskip
第二段。

\\[6pt] 是换行并附加间距,\vspace 自身不表示换行。整篇文档的统一间距应由样式控制,不要逐处补空白。

5.4 页面和分栏 #

5.4.1 利用 geometry 宏包设置页面参数 #

手工修改 \oddsidemargin 等底层长度容易遗漏参数关系,优先使用 geometry:

% 导言区
\usepackage[a4paper,margin=2.5cm]{geometry}

也可以加载后调用 \geometry{left=3cm,right=2.5cm,top=2.5cm,bottom=2.5cm}。

双面文档可用 inner、outer 设置内外侧边距,结合 bindingoffset 预留装订空间。是否把页眉页脚计入正文区域,也由相应选项决定,按需求查手册,不要只盯住一个“上边距”数值。

5.4.2 页面内容的垂直对齐 #

\flushbottom 尽量让各页正文底部对齐,可能拉伸垂直间距。\raggedbottom 保留较自然的间距,允许页底留白不齐。

文档类的默认值不同。大量图表或公式使页面高低不齐时,先分析内容,再决定是否改变策略。

5.4.3 分栏 #

文档类选项 twocolumn 控制全文双栏;\onecolumn、\twocolumn 切换栏数并另起一页。双栏时 \newpage 换栏,\clearpage 换页。

局部分栏用 multicol:

% 导言区
\usepackage{multicol}

% 正文
\begin{multicols}{2}
第一段介绍实验条件。

第二段介绍数据处理。

第三段总结观察结果。
\end{multicols}

注意宏包名是 multicol,环境名是 multicols。它可以在页中切换栏数,但普通 figure、table 在其中不能按常规方式浮动;跨栏或固定图表需按宏包的限制处理。

5.5 页眉页脚 #

5.5.1 基本的页眉页脚样式 #

\pagestyle{样式} 设置后续页面,\thispagestyle{样式} 只设置当前页:

样式 常见效果
empty 无页眉页脚。
plain 页眉为空,页脚显示页码。
headings 根据文档类自动生成章节页眉和页码。
myheadings 使用手工标记的页眉信息。

\pagenumbering{roman} 或 \pagenumbering{arabic} 改变页码格式,同时把页码重置为 1。仅想改变当前页外观,不要调用它。

5.5.2 手动更改页眉页脚的内容 #

\markboth{左标记}{右标记} 和 \markright{右标记} 提供页眉内容;实际放置由页面样式和文档类决定。章节命令也会更新标记,所以不要假定手工标记能一直覆盖后续章节。

article 与 book 用来生成标记的章节层次不同。复制涉及 \chaptermark 的代码到文章类时,可能因不存在该命令而报错。

5.5.3 fancyhdr 宏包 #

fancyhdr 按左、中、右三个位置设置页眉页脚。以下是可独立编译的单面文章例子:

\documentclass[UTF8,fontset=fandol,a4paper]{ctexart}
\usepackage[margin=2.5cm,headheight=16pt]{geometry}
\usepackage{fancyhdr}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{实验记录}
\fancyhead[R]{\nouppercase{\rightmark}}
\fancyfoot[C]{\thepage}
\renewcommand{\sectionmark}[1]{\markright{\thesection\quad #1}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}

\begin{document}
\section{实验方法}
记录实验条件和处理步骤。
\newpage
\section{结果}
列出观察到的变化。
\end{document}

\fancyhf{} 先清空原设置,L/C/R 表示左中右,O/E 可区分奇偶页。E 选项主要用于双面文档;不要在单面文档中无意使用它。

章首页常自动切换为 plain,可通过 \fancypagestyle{plain}{...} 单独重定义。出现 \headheight is too small 警告时,应按日志提示增加页眉高度并重新检查版面。

← 数学公式 · 下一章:特色工具和功能 →

来源与许可