页边距与版面

本页说明如何设置纸张大小、页边距,以及正文排版区域(版心)。简短结论是:与其自己计算长度,不如使用 geometry 宏包,它简单得多,也安全得多。这里以 geometry 的用法为中心,同时说明它背后设置了哪些 LaTeX 长度参数,以及单面/双面排版中页边距如何变化。

geometry 是同时指定纸张大小和页边距的标准宏包(梅木秀雄编写,目前由 LaTeX Project 和 David Carlisle 维护)。它认识各种标准纸张尺寸,因此很少需要自己写具体尺寸,通常一行就够。指定选项有两种等价方式:直接写在 \usepackage 的选项中,或使用 \geometry{...} 命令。

latex
% どちらか一方でよい(両方同じ意味)
\usepackage[a4paper, margin=1in]{geometry}

% または
\usepackage{geometry}
\geometry{a4paper, margin=1in}

仅此就会得到 A4 纸、四边均为 1 英寸的页边距。\geometry 可以在导言区调用任意多次;同一键后写的设置会覆盖前面的设置。选项顺序无关紧要([left=2cm, right=3cm][right=3cm, left=2cm] 相同)。

纸张大小可按名称选择。可用 a4paperletterpaperb5papera5paper,以及 A0–A6、B0–B6、legalpaperexecutivepaper 等。自定义尺寸用 paperwidth=paperheight=(或 papersize={宽,高})指定。需要横向时加上 landscape,宽高会互换。

geometry 的主要选项

geometry 的键大致分为两类:指定页边距,以及指定版心大小。确定其中一类后,另一类会根据纸张大小自动计算。常用项如下。

选项含义
margin=一次指定四边页边距;margin={A,B} 表示左右=A、上下=B
left= / right= / top= / bottom=分别指定各边页边距(lmargin/rmargin/tmargin/bmargin 是别名)
inner= / outer=双面排版中的内侧/外侧页边距;left/right 的别名
hmargin= / vmargin=hmargin={左,右}(左右边距),vmargin={上,下}(上下边距)
textwidth= / textheight=直接指定版心宽度/高度(width/height 含义相近)
total={幅,高さ}包含页眉/页脚等在内的正文块整体尺寸
bindingoffset=装订偏移;把该长度加到内侧(单面时为左侧)页边距
includehead / includefoot把页眉(\headheight+\headsep)/ 页脚(\footskip)计入正文块高度
landscape横向;交换宽度和高度

需要注意的是,geometry 的 top= / bottom= 表示 从纸张边缘到正文块上端/下端的页边距,并不等同于后面介绍的 LaTeX 原生长度 \topmargin。geometry 会在内部正确转换为原生长度,因此用户只需按这种直观的“从边缘起的距离”来指定即可。

实际设置示例

论文中常见的设置“ A4,左右 25mm,上下 30mm,装订偏移 5mm,并把页眉计入版心高度”可以写成下面这样。如果不指定版心宽度和高度,它们会根据纸张大小和页边距自动确定。

document.tex
\documentclass{article}
\usepackage{geometry}
\geometry{
  a4paper,
  hmargin=25mm,      % 左右の余白
  vmargin=30mm,      % 上下の余白
  bindingoffset=5mm, % 綴じ代(内側に追加)
  includehead,       % ヘッダを版面の高さに含める
}
\begin{document}
本文がこの版面に組まれます。
\end{document}

如果想固定版心大小,而不是固定页边距,可指定 textwidth=total=。例如 \geometry{a4paper, textwidth=15cm, textheight=24cm} 会把该大小的版心放在纸张中央,左右和上下页边距会自动均衡(单面时水平方向自动居中是默认行为)。

背后的 LaTeX 长度参数

geometry 之所以方便,正是因为它会替用户一致地设置 LaTeX 内部真正持有的 页面布局长度参数。主要参数如下。

参数含义
\textwidth正文(版心)的宽度
\textheight正文(版心)的高度
\oddsidemargin奇数页(单面时为所有页)的左边距相对基准点的偏移
\evensidemargin双面排版中偶数页左边距的偏移
\topmargin从基准点(距顶部 1 英寸)到页眉上端的距离
\headheight容纳页眉的盒子高度
\headsep页眉下端与正文上端之间的距离
\footskip从正文最后一行基线到页脚基线的距离
\marginparwidth边注宽度
\paperwidth / \paperheight纸张本身的尺寸

这里容易困惑的是,\oddsidemargin\topmargin 是从 纸张左上角向内 1 英寸的点(基准点) 开始测量的偏移。因此实际左边距是“1 英寸 + \oddsidemargin”。这个 1 英寸偏移是 TeX 的历史规范;若用 \setlength 手动调整,就必须自己计算版心宽高与页边距的关系,很容易出现改了 \textwidth 后页边距不再匹配的情况。

latex
% 手で合わせる古典的なやり方(誤りやすい)
\setlength{\oddsidemargin}{0pt}   % 実際の左余白 = 1in + 0pt
\setlength{\textwidth}{16cm}
\setlength{\topmargin}{0pt}
\setlength{\textheight}{24cm}
% → 右余白・下余白は自分で辻褄を合わせる必要がある

因此,强烈建议把页边距交给 geometry 处理。如果想目视确认当前值,可使用 layout 宏包的 \layout 命令,它会输出一页图示这些参数的清单。

latex
\usepackage{layout}
% ...本文中で
\layout   % 現在のページレイアウトを図で出力

单面与双面(oneside / twoside)

左右页边距的处理取决于文档是 单面(oneside)还是双面(twosidearticle 默认单面,book 默认双面。单面时所有页面左右边距相同(只使用 \oddsidemargin)。双面时,为了让装订后跨页的内侧(装订侧)边距对齐,奇数页和偶数页会交换左右边距:奇数页用 \oddsidemargin,偶数页用 \evensidemargin

双面版式中通常会让装订侧(内侧)页边距比外侧更宽。使用 geometry 时,启用 twoside 后可用 inner= / outer= 指定内外边距,并可用 bindingoffset= 额外给内侧加装订偏移。twoside 可作为类选项传入,也可直接传给 geometry。

document.tex
\documentclass[twoside]{book}
\usepackage{geometry}
\geometry{
  a4paper,
  inner=30mm,        % 綴じ側(内側)は広めに
  outer=20mm,        % 小口(外側)は狭めに
  bindingoffset=5mm, % 綴じ代をさらに内側へ追加
}
\begin{document}
% 奇数ページと偶数ページで内外の余白が入れ替わる
\end{document}

如果想要双面版式但不交换左右边距(边注也始终在同一侧),使用 geometry 的 asymmetric 选项。

在文档中途改变布局

如果只想改变部分页面的页边距,例如横向大表所在页面更宽、附录使用其他布局,可在正文中调用 \newgeometry{...} 切换到新布局,并在需要恢复处调用 \restoregeometry\newgeometry 会先重置除纸张大小外的既有 geometry 设置,再只应用传入的选项。两个命令都会自动插入 \clearpage(分页),因此不会在页面中途切换。

latex
% プリアンブルの余白で組まれている途中で…
\newgeometry{margin=1cm}   % ここから余白を狭く(改ページが入る)

% 広い版面が必要なページ(大きな図表など)

\restoregeometry           % 元のレイアウトに戻す(再び改ページ)

如果只想插入一页横向页面,可组合使用 \newgeometry{landscape, ...},也可使用专门的 lscape / pdflscape 宏包的 landscape 环境。若想调整的是标题、页眉或页脚的样式,而不是页面几何,另页介绍的 titlesecfancyhdr 更合适。