长度与间距

要告诉 LaTeX “这里留 2cm” 或 “这里加一行的空白”,需要写一个 长度(length)。本页先介绍长度的 单位 及其精确换算,再说明可伸缩的 弹性长度(rubber length),实际输出空白的 \hspace / \vspace 等命令,最后介绍如何像变量一样 定义并复用 长度。

长度单位

长度写成 数字 + 单位(如 12pt2.5cm-3mm,允许小数和负值)。单位大致分为两类:不随字体变化的 绝对单位ptmmin 等),以及随当前字体大小变化的 字体相对单位emex)。当你希望正文空白随字号增大而自然变宽时,后者很方便。

核心单位是 pt(TeX point)。TeX 定义 1 inch = 72.27pt,所有换算都以此为基准。容易混淆的是 bp(big point),这是 PostScript/PDF 使用的点,1 inch = 72bpptbp 相差约 0.4%,与基于 bp 的图形工具交换尺寸时要注意不要混用。

单位含义 / 换算备注
ptTeX 点。1in = 72.27pt所有长度的基准
bp大点。1in = 72bpPostScript/PDF 的点
mm毫米。1mm ≈ 2.845pt公制
cm厘米。1cm = 10mm公制
in英寸。1in = 72.27pt英制
pc派卡。1pc = 12pt西文排版传统单位
sp缩放点。1pt = 65536spTeX 的最小单位(内部用)
em≈ 当前字号 / 大写 M 的宽度字体相对;用于水平空白
ex当前字体的 x 高度(小写 x 的高度)字体相对;用于竖直空白
ddDidot 点。1dd ≈ 1.07pt欧洲传统;cc = 12dd

sp(scaled point)是 TeX 内部表示长度的 最小单位,1pt = 65536sp。你几乎不会手写它,但它代表了 TeX 可处理的最细精度。源自欧洲活字传统的 dd(Didot 点)和 cc(cicero,cc = 12dd)也可使用,但在现代文档中很少出现。

字体相对单位 em 大约等于当前字号(传统上近似大写 M 的宽度),适合缩进和水平间距;ex 是小写 x 的高度(x-height),用于竖直方向的微调。10pt 字体中,1em ≈ 10pt。数学模式还有专用单位 mu(math unit),等于 1/18 em,\quad 等数学空白就是用它定义的。

弹性长度(可伸缩空白)

12pt 这样固定不变的长度称为 刚性长度(rigid length)。相对地,能根据情况 伸缩 的长度称为 弹性长度(rubber length)。用 plus 给出可伸长量,用 minus 给出可缩短量。例如 1cm plus 2mm minus 1mm 表示“通常为 1cm,需要时可伸到 1.2cm,也可缩到 0.9cm”。LaTeX 会利用这份余量自然地调整行和页面。

latex
% 通常 1cm、最大 1.2cm まで伸び、最小 0.9cm まで縮む縦アキ
\vspace{1cm plus 2mm minus 1mm}

伸长量为 无限大 的特殊弹性长度是 \fill。它的自然长度为 0,但可按需要任意伸长,适合“把剩余空间全部撑开”。同一行或同一栏中有多个 \fill 时,它们会平分空间。需要按比例分配时,使用 \stretch{n}(即 n 倍的 \fill):例如 \hspace{\stretch{2}}…\hspace{\stretch{1}} 会按 2:1 分配空隙。

水平空白

在行内插入水平空白的基本命令是 \hspace{长度}\hspace{2cm} 会插入 2cm 的空白。不过位于行首或行尾的 \hspace 会在 LaTeX 断段落时 被丢弃(避免行边缘残留多余空白)。如果即使在行边也要保留空白,使用星号形式 \hspace*{长度}

\hfill\hspace{\fill} 的简写,会把左右两侧的内容尽可能推开。要把一个词放在行左端、另一个放在行右端时很常用(它在行边也会被丢弃;若必须保留,请用 \hspace*{\fill})。除了空白,还可以用 \hrulefill 填充横线,或用 \dotfill 填充点线,常用于目录标题与页码之间。

latex
Name:\hspace{2cm}Date:\par
\noindent 第1章 はじめに\dotfill 1\par
\noindent\hfill

对于较小的固定空白,基于字体大小的命令很方便。\quad1em(= 18mu),\qquad 是其两倍 2em。极细空白可用 \,(thin space,3mu)。这些命令会随字体变化,因此字号改变时视觉平衡也能保持。

竖直空白

要在段落之间等位置加入竖直空白,使用 \vspace{长度}。与 \hspace 类似,落在 分页边界 的空白会被丢弃(避免页首出现多余空白)。若即使在分页位置也要保留空白,使用 \vspace*{长度}\vfill 等同于 \vspace{\fill},会在竖直方向上撑开剩余空间,适合把只有一行的页面垂直居中等场景。

常用竖直间距有三个预设命令:\smallskip\medskip\bigskip。在标准类中的默认值分别是 3pt plus 1pt minus 1pt6pt plus 2pt minus 2pt12pt plus 4pt minus 4pt。它们都是弹性长度,会根据页面排布略微伸缩。相比直接写固定值,使用这些命令更容易保持整篇文档一致。

定义并使用长度

如果同一个长度会在文档多处使用,像变量一样创建 长度寄存器 会更易维护。\newlength{\mylen} 声明新的长度 \mylen\setlength{\mylen}{2em} 赋值,\addtolength{\mylen}{1pt} 进行增减。只需在一处改值,所有引用都会更新。

也可以直接用 已有长度 进行计算,例如 \textwidth(正文宽度)、\linewidth(当前行宽)、\baselineskip(行距)。只需在前面加系数即可缩放,0.8\textwidth 表示正文宽度的 80%。若需要更复杂的四则运算,加载 calc 宏包 后即可写含 + - * / 的表达式。

document.tex
\usepackage{calc}
% ...
\newlength{\halfcol}
\setlength{\halfcol}{(\textwidth - 2em) / 2}
\noindent\hspace*{0.8\textwidth}右寄せの見出し

像这样基于已有宽度构造相对长度,即使用纸大小或页边距改变,比例也不会崩坏。与直接写死 8cm 等固定值相比,基于 \textwidth 的表达式能让文档更能适应版式变化。