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 警告时,应按日志提示增加页眉高度并重新检查版面。