LaTeX/页面布局
LaTeX 和文档类通常会为您处理页面布局问题。对于提交给学术出版物,整个主题将不再由您掌控,因为出版商希望控制演示方式。但是,对于您自己的文档,您可能希望更改一些明显的设置:页边距、页面方向和列,仅举三个例子。本教程的目的是向您展示如何配置页面。
在本章中,我们经常需要处理 TeX 长度。您应该查看长度以获取有关该主题的全面详细信息。
文档可以是单面或双面的。文章默认是单面的,书籍是双面的。双面文档区分左侧(偶数页)和右侧(奇数页),而单面文档则不区分。最显着的效果体现在页边距上。如果您想使article 类双面,请使用 \documentclass[twoside]{article}
。
LaTeX 中的许多命令和变量都会考虑到这个概念。它们被称为偶数和奇数。对于单面文档,只有奇数命令和变量才会生效。
LaTeX 中的页面由许多内部参数定义。每个参数对应于页面元素的长度,例如,\paperheight
是页面的物理高度。这里您可以看到一张图表,显示了定义页面的所有变量。所有尺寸均以 TeX 点 (pt) 为单位,1 英寸等于 72.27pt,或者 1pt ≈ 0.3515 毫米。
- 1 英寸 +
\hoffset
- 1 英寸 +
\voffset
\oddsidemargin
= 31pt\topmargin
= 20pt\headheight
= 12pt\headsep
= 25pt\textheight
= 592pt\textwidth
= 390pt\marginparsep
= 10pt\marginparwidth
= 35pt\footskip
= 30pt
\marginparpush
= 7pt (未显示)\hoffset
= 0pt\voffset
= 0pt\paperwidth
= 597pt\paperheight
= 845pt
当前详细信息加上布局形状可以从 LaTeX 文档本身打印出来。使用layout包和同名的命令:\usepackage{layout} ... \layout{}
要渲染一个标记文档页边距的框架,您当前正在处理的,请添加
\usepackage{showframe}
到文档中。
可能不会立即显而易见——因为它并没有真正造成任何严重问题——所有标准文档类的默认纸张大小是US letter。与 A4(这是世界上几乎所有其他地方的标准)相比,它短了 18 毫米(大约 3/4 英寸),宽了 8 毫米(大约 1/4 英寸)。虽然这不是一个严重的问题(大多数打印机可以毫无问题地打印文档),但可以将其他大小指定为类选项。对于 A4 格式
\documentclass[a4paper]{article}
|
请注意,标准 LaTeX 类默认情况下使用US Letter,无论您的 TeX 分发配置如何。如果您将 TeX Live 配置为使用 A4 纸张,它将仅在 plainTeX 和未指定纸张尺寸的类中作为默认值。 |
a4paper 选项与 article 文档类本身并没有任何作用。它只会与某些适当的包一起影响纸张大小,例如geometry包或hyperref包。 |
最通用的页面布局包之一是geometry 包。该包的直接优势是它允许您即使使用不支持这些选项的类也能自定义纸张大小。例如,要设置纸张大小,请将以下内容添加到您的前言中
\usepackage[a4paper]{geometry}
|
The geometry package has many pre-defined page sizes, like a4paper, built in. Others include
- a0paper, a1paper, ..., a6paper,
- b0paper、b1paper、...、b6paper,
- letterpaper,
- legalpaper,
- executivepaper.
要使用 geometry 包显式地更改纸张尺寸,可以使用 paperwidth 和 paperheight 选项。例如
\usepackage[paperwidth=5.5in, paperheight=8.5in]{geometry}
|
该包在设置页面布局方面提供了很多灵活性,包括使用以下内容指定每个页面的特定布局:
\newgeometry{
key=val // package options
}
\restoregeometry
虽然非常灵活,但该包也有一些限制。例如,无法将页面大小提供给各个页面,这需要不同的方法来解决问题。
页面大小问题
[edit | edit source]如果您打算最终获得一个 PDF 文件,基本上有三种方法:
- TeX → PDF
pdflatex myfile # TeX → PDF
- TeX → DVI → PDF
latex myfile # TeX → DVI dvipdf myfile # DVI → PDF
- TeX → DVI → PS → PDF
latex myfile # TeX → DVI dvips myfile -o myfile.ps # DVI → PS ps2pdf myfile.ps myfile.pdf # PS → PDF
遗憾的是,PDF 输出页面的大小可能无法完全尊重您的设置。这些工具中的一些对 DVI、PS 和 PDF 规范的解释不同,您最终可能得到一个尺寸不完全正确的 PDF 文件。幸运的是,有一个解决方案:\special
命令允许用户传递 PostScript 或 PDF 参数,这些参数可以在这里用来适当地设置页面大小。
- 对于pdflatex正常工作,通常使用 geometry 包就可以。
- 对于 DVI 和 PS 方法,始终获得正确页面大小的最安全方法是在 tex 文件中添加以下内容:
\documentclass[...,a4paper,...]{...}
\special{papersize=210mm,297mm}
|
并将适当的参数附加到输出生成过程中使用的处理器。
dvips -t a4 ... ps2pdf -sPAPERSIZE=a4 ... # On Windows: ps2pdf -sPAPERSIZE#a4 ... [1]
如果您想要 US Letter 尺寸,请用 8.5in,11in 替换 210mm,297mm,用 letter 替换 a4paper。还要替换a4为letter在命令行参数中。
平板电脑的页面大小
[edit | edit source]那些想在平板电脑或其他手持数字设备上阅读的人需要创建没有额外空白的文档。为了创建适合手持设备阅读的 PDF 文档,不仅要调整文本区域和边距,还要调整页面大小。如果您正在寻找一个合理的尺寸,请考虑遵循美国最高法院使用的纸张尺寸,441pt x 666pt(或 6.125 英寸 x 9.25 英寸),它在平板电脑上看起来很棒。您也可以使用最高法院的文本区域尺寸 297pt x 513pt,但这对于除了 Century Schoolbook(最高法院要求使用的字体)以外的其他字体来说太宽了。
边距
[edit | edit source]习惯阅读典型纸质文献的读者可能想知道为什么文本周围有这么多的空白。例如,在 A4 纸上,文档通常在页面左右两侧有 44 毫米的边距宽度,留下约 60% 的页面宽度用于文本。原因是提高可读性。研究表明[2][3],当每行有 60-70 个字符时,更容易阅读文本 - 似乎 66 是最佳数字。因此,设置页面边距以确保最佳可读性,并且过度边距空白被视为一种结果。有时,在内边距中会留下此空白,假设文档将被装订。
如果您希望避免过多的空白,而不是更改边距,请考虑使用 两栏(或更多栏)布局。这种方法通常被印刷杂志采用,因为它既提供了可读的行长,又充分利用了页面。另一种方法是在不更改边距的情况下减少页面上的空白量,即使用 12pt 选项将文档类别的字体大小增大。
如果您想更改文档的边距,有很多方法可以做到。
- 一种较旧的方法是使用 fullpage 包来获得一些标准化的较小边距(大约一英寸),但它会使用 10pt 默认字体大小(以及使用 12pt 文档类选项时大约 90 个字符)创建超过 100 个字符的每行。
\usepackage{fullpage}
|
对于更窄的边距,fullpage 包有一个 cm 选项(大约 1.5cm),这会导致使用 10pt 默认字体大小时每行大约 120 个字符,大约是可读字符的两倍。
\usepackage[cm]{fullpage}
|
- 一种更现代、更灵活的方法是使用 geometry 包。该包允许您指定 4 个边距,而无需记住特定的页面尺寸命令。您也可以以厘米和英寸为单位输入尺寸。在每个值后面使用 cm 表示厘米,使用 in 表示英寸(例如,1.0in 或 2.54cm)。请注意,默认情况下(即,没有使用任何选项),此包已经减少了边距,因此对于“标准布局”,您可能不需要指定任何内容。这些值相对于纸张边缘(0in)向内延伸。例如,此命令提供更传统的边距,更好地利用了页面的垂直空间,而不会创建 fullpage 包的极长行(如果使用 11pt 文档类选项,对于信纸大小的纸张,行长约为 88 个字符,使用 a4paper 时略短)。
\usepackage[top=1in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
|
它还可以使用以下命令来重新创建 fullpage 包的行为:
\usepackage[margin=1in]{geometry}
|
您可以将边距选项与 本段中看到的页面大小选项结合起来。
- 如果页面大小为 A4,可以使用 layaureo 包。 big 选项会进一步缩小边距。
- 不要使用 a4wide 包来创建具有较小边距的 A4 文档大小页面。它已经过时并且有错误。请改用 geometry 包,例如
\usepackage[a4paper,includeheadfoot,margin=2.54cm]{geometry}
|
- 使用
\addtolength
和\setlength
命令编辑上面描述的单个页面尺寸变量。参见 长度 章节。例如,
\setlength{\textwidth}{6.5in}
\addtolength{\voffset}{-5pt}
|
奇数页和偶数页边距
[edit | edit source]使用 geometry 包,选项 left 和 right 分别用于内边距和外边距。它们也有别名 inner 和 outer。因此,处理奇数页和偶数页不同边距的最简单方法是在文档类命令中给出 twoside 选项,并将边距指定为通常一样。
\documentclass[twoside]{report}
\usepackage[inner=4cm,outer=2cm]{geometry} %left=4cm,right=2cm would be equivalent
|
这将导致所有内边距(奇数页的左边距和偶数页的右边距)为 4cm,外边距为 2cm。
为 geometry 设置相同的内边距和外边距将消除边距之间的差异。另一种快速消除偶数页和奇数页之间位置差异的方法是将 evensidemargin 和 oddsidemargin 设置为奇数页默认值的一半。
\setlength{\oddsidemargin}{15.5pt}
\setlength{\evensidemargin}{15.5pt}
|
默认情况下,在双面布局中,evensidemargin 的值大于 oddsidemargin,因为人们可能希望在页面的侧面写笔记。大边距的一侧选择与页面拼接在一起的一侧相反。
请参见 长度。
章节上面的顶部边距
[edit | edit source]可以使用 titlesec 包更改章节上面的顶部边距。示例:[1]
\usepackage{titlesec}
\titlespacing*{\chapter}{0pt}{-50pt}{20pt}
\titleformat{\chapter}[display]{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
|
当更改章节的间距时,必须使用 \titleformat
命令。如果是节,则可以省略此命令。
页面方向
[edit | edit source]当您谈论更改页面方向时,通常是指更改为横向模式,因为纵向是默认模式。我们将介绍两种略有不同的更改方向的样式。
更改整个文档的方向
[edit | edit source]第一个方法适用于您希望从一开始就将整个文档设置为横向。 有很多软件包可用于实现这一点,但我们首选的是 geometry 软件包。 您只需要调用该软件包,并将landscape作为选项。
\usepackage[landscape]{geometry}
|
但是,如果您打算使用 geometry 设置纸张大小,请不要添加 \usepackage
命令两次,只需将所有选项串在一起,用逗号分隔。
\usepackage[a4paper,landscape]{geometry}
|
使用标准的 LaTeX 类,您可以使用相同的类选项。
\documentclass[a4paper,landscape]{article}
|
更改特定部分的页面方向
[edit | edit source]第二种方法适用于您以纵向编写文档,但有一些内容,例如大型图表或表格,在横向页面上显示效果更好。 但是,您仍然希望页眉和页脚在与其他页面相同的位置显示。
lscape 软件包就是为此目的而设计的。 它提供了一个 landscape 环境,环境中的任何内容都基本上是旋转的。 不会更改实际页面尺寸。 这种方法更适用于书籍或报告,而不是典型的学术出版物。 使用 pdflscape 代替 lscape 生成 PDF 文档时,页面在查看时会保持正向显示:处于横向格式的单页将被旋转,而其余页面将保持纵向方向。
此外,要使表格在横向页面上正确居中,必须将 tabular 环境置于 table 环境中,而 table 环境本身位于 landscape 环境中。 例如,它应该看起来像这样
\usepackage{pdflscape}
% ...
\begin{landscape}
\begin{table}
\centering % optional, probably makes it look better to have it centered on the page
\begin{tabular}{....}
% ...
\end{tabular}
\end{table}
\end{landscape}
|
对于书籍(以及通常使用twoside选项的文档),landscape-环境不幸地没有关注偶数页和奇数页的不同布局。 该宏可以使用序言中的几行额外代码进行修复[4]。
更改浮动环境的页面方向
[edit | edit source]如果您使用上述代码,您会发现表格被插入到代码中的位置。 它不会漂浮! 要解决此问题,您需要 rotating 软件包。 请参阅 Rotations 章节。
特定页面的边距、页面大小和旋转
[edit | edit source]如果您需要旋转页面以使图形适合,那么您很可能也需要缩放边距和字体大小。 同样, geometry 软件包在为单个页面指定新边距方面非常有用。
\usepackage{geometry}
\usepackage{pdflscape}
% ...
\newgeometry{margin=1cm}
\begin{landscape}
\thispagestyle{empty} %% Remove header and footer.
\begin{table}
\begin{center}
\footnotesize %% Smaller font size.
\begin{tabular}{....}
% ...
\end{tabular}
\end{center}
\end{table}
\end{landscape}
\restoregeometry
|
请注意,顺序很重要!
页面背景
[edit | edit source]有很多方法可以实现页面的背景。 以下是最常用的软件包
- eso-pic 软件包允许您在每一页或单个页面的背景中打印内容。
\usepackage{tikz} % for \gradientbox below.
\usepackage{eso-pic}
\newcommand{\gradientbox}[3]{%
\begin{tikzpicture}
\node[left color=#1,right color=#2] {#3};
\end{tikzpicture}%
}
\AddToShipoutPicture*{%
\AtPageLowerLeft{%
\rotatebox{90}{
\gradientbox{blue!20}{white}{%
\begin{minipage}{\paperheight}%
\hspace*{ \stretch{1} }\textcopyright~2013 \makeatletter\@author\makeatother.\hspace*{ \stretch{1} }
\end{minipage}%
}
}%
}%
}
|
\AddToShipoutPicture
命令的带星号版本仅适用于当前页面。
- background 软件包允许用户在背景中包含水印和图片。
\usepackage{background}
\backgroundsetup{
opacity = 0.5,
angle = 0,
contents = {\includegraphics{example.pdf} }
|
多栏页面
[edit | edit source]使用twocolumn可选类参数
[edit | edit source]使用标准的 LaTeX 文档类,如 article,您可以简单地将可选参数twocolumn传递给文档类:\documentclass[twocolumn]{article}
,这将产生所需的效果。
虽然这种方法很有用,但它也存在局限性。 multicol 软件包提供了以下优点
- 可以支持多达十列。
- 实现了一个multicols环境,因此可以混合文档中的列数。
- 此外,该环境可以嵌套在其他环境中,例如 figure。
- multicol 输出平衡列,最后一页上的列长度大致相等。
- 使用multicols*环境来创建不平衡列,其中每列完全填满后再开始下一列。
- 可以自定义列之间的垂直规则。
- 列环境可以轻松地在本地或全局自定义。
使用 multicol 软件包
[edit | edit source]multicol 软件包克服了twocolumn 的一些缺点,并提供了 multicol
环境。 要创建一个典型的两栏布局
\begin{multicols}{2}
lots of text
\end{multicols}
|
浮动对象不受此环境完全支持。 它只能在您使用浮动命令的带星号形式(例如 \begin{figure*}
)时才能处理,这使得浮动对象跨越所有列。 这并不是一个大问题,因为与列宽度相同的浮动对象可能太小,而且您可能也希望跨越它们。 有关更详细的讨论,请参阅 本节。
multicol 软件包有两个重要的参数,可以使用 设置,方法是使用 \setlength
\columnseprule
,设置列之间垂直规则的宽度,默认值为 0pt\columnsep
,设置列之间的水平间距,默认值为 10pt,这相当窄
要强制在列中换行,可以使用 \columnbreak
命令。
手动页面格式设置
[edit | edit source]可能存在一些情况,尤其是在非常长的文档(例如书籍)中,LaTeX 无法使所有页面断行看起来尽可能好。 因此,可能需要手动调整页面格式。 当然,您应该只在制作文档的最后阶段执行此操作,即所有内容都已完成之后。 LaTeX 提供以下内容
\newpage
|
结束当前页面并开始新页面。 |
\pagebreak[number]
|
在命令所在的位置断开当前页面。 可选的number参数在 0 到 4 的范围内设置优先级。 |
\nopagebreak[number]
|
阻止页面在命令所在的位置断开。 可选的number参数在 0 到 4 的范围内设置优先级。 |
\clearpage
|
结束当前页面,并导致输入中遇到的但尚未出现的任何浮动内容被打印。 |
在专业书籍中,在页面开头或结尾出现单行是不希望看到的。在排版中,这种情況被称为“寡妇行”和“孤儿行”。通常情况下,寡妇行和孤儿行可能出现在 LaTeX 文档中。你可以尝试使用手动页面格式来解决它们,但也有自动解决方案。
LaTeX 针对寡妇行和孤儿行(在 LaTeX 术语中称为“俱乐部行”)有一个“惩罚”参数。惩罚值越高,LaTeX 将越努力避免寡妇行和孤儿行。你可以尝试通过在你的文档序言中添加以下命令来增加这些惩罚值。
\widowpenalty=300
\clubpenalty=300
|
如果这不起作用,你可以尝试进一步增加这些值,最大值是 10000。但是,不建议将此值设置得太高,因为将其设置为 10000 会完全禁止 LaTeX 执行此操作,这可能会导致奇怪的行为。
段落之间使用橡皮筋值也有帮助。
\setlength{\parskip}{3ex plus 2ex minus 2ex}
|
或者,你可以使用needspace包来保留一些行,从而防止这些行发生页面断行。
\needspace{5\baselineskip}
Some
text
on
5
lines.
|
一个非常有用的故障排除和设计技巧是在 geometry 包中打开 showframe 选项(它与上面描述的 showframe 包具有相同的效果)。它会在主要页面元素周围绘制边界框,这很有帮助,因为各种区域的边界通常是不可见的,并且会受到填充空白的复杂影响。
\usepackage[showframe]{geometry}
|
检查 tex 的日志也很有帮助 - 它应该提供许多有用的信息。此外,以下包可以帮助进行视觉调试布局
%\usepackage{layout}
%\usepackage{showframe}
% \layout % - place it inside "document" section to see the layout where you need it more conveniently
|
它将打印布局和框架。这些语句可以在源文件顶部,并在需要时取消注释。
本页面使用来自 Andy Roberts 的 Getting to grips with LaTeX 的材料,经作者许可。