latex geometry 页面设置

资源

本文介绍如何使用 geometry 设置 LaTeX 文档页面。这里geometry 在 github 上的项目地址,本文仅对 geometry 常用的排版命令进行介绍,更多详情请参考最新的 官方手册

页面布局

我们知道在 LaTeX 中控制页面布局的原始命令有十个以上。如果我们使用这些命令来控制我们的页面布局的话会十分复杂且容易出错,且如果我们需要临时更改某些页面的布局的时候,必须要小心翼翼的重新计算。geometry 宏包提供的一系列命令可以将我们从这些复杂的设置中解救出来。

下图(官方手册中的图)给出了 geometry 包的布局图。页面布局包括 total body(可打印区域)和 margins(边距)。total bodybody (文字区)和可选的 headerfooter 以及边注区(\marginpar为边注命令)组成。margins由四部分组成:left,right,top,bottom。对于双面打印的文档,水平边距应该被称为 inner(靠近装订侧边距)和 outer

页面布局

组成关系如下:

  • paper : total bodymargins
  • total body : body(可打印区域)(可选的 head,footmarginpar
  • margins : left(inner), right(outer), topbottom

可以看到 geometry 定义的布局和 CSS 中的盒子模型差不多,甚至更加简单(没有 padding)。我们只需要直观的定义页面布局即可,具体的参数计算由 geometry 宏包提供。

每一个边距从纸张对应的边开始计算。例如,左边距(内边距)表示的是纸张左侧边(内部边)到 total body 左侧边(双面打印时根据奇偶页不同也可能为右侧)之间的水平间距。因此 geometry 宏包的左边距及上边距和原始的 \leftmargin,\topmargin 不同。body 的大小可以通过 \textwidth,\textheight修改。页面的 total body 和 margins 遵循如下关系:
paperwidth = left + width + right \\ paperheight = top + height + bottom
total body 的 widthheight 定义如下:
width := textwidth \: (+marginparsep+marginparwidth) \\ height := textheight \: (+headheight+headsep+footskip)

上述方程中,默认状态下 width := textwidth。当 includemp 参数被设置为 true 时(在选项中指定:\usepackage[includemp,...]{geometry},不设置值的时候默认为 true),marginparsepmarginparsep 将包含到 width 中。对应的,默认状态下 height := textheight 。当 includehead 设置为 true 时,headheightheadsep 包含到 height 中,同样,includefoot 将会使 footskip 包含到 height 中。下图显示了这些参数如何在垂直方向影响布局的:

垂直布局

因此,页面布局在两个方向上一共由三部分组成:一个 body 和两个 margins。如果它们中的两个被指定了,则另一个无需指定(假定页面大小确定),geometry 宏包的自动补全机制(具体请参考其手册第6.5节)会帮助我们进行计算。

常用参数设置

前面我们介绍了 geometry 包的页面布局,下面我们介绍常用的参数设置。这里通过举例的方式对常用的参数进行介绍,这些参数应该可以覆盖85%以上的应用场合,更多选项可以参考官方手册。页面布局的设置方法有两种,一种方法是在加载 geometry 包的时候在选项中指定参数,如 \usepackage[options]{geometry},另一种方式是在加载包之后使用 \geometry{options} 设置参数。 一个比较常用的参数示例如下:

\RequirePackage[a4paper]{geometry}
\geometry{
  textwidth=138mm,
  textheight=215mm,
  left=27mm,
  right=27mm,
  top=25.4mm, 
  bottom=25.4mm,
  headheight=2.17cm,
  headsep=4mm,
  footskip=12mm,
  heightrounded,
}

上面的代码应该放置到导言区(preamble,\begin{document}之前)。第一行是加载宏包,我们在编写自己的包或者文档类的时候使用 \ReeuirePackage 命令,如果是在文档写作中,对应的使用 \usepackage 即可。

直到 bottom 之前的参数我们都是在设置页面布局。前面我们说过页面布局在两个方向上有三个部分组成,某个方向上确定其中两个参数第三个会自动计算。但是这里我们却指定了三个参数。以水平方向上距离,这里我们 textwidth,left,right 的参数都指定了。另外,如果细心的话会发现 A4 纸张的宽度为210mm(长297mm),但是我们这里指定的三个参数相加为 138+27+27=192 并不等于210.像这种参数设置出现矛盾的时候,geometry 宏包是如何处理的呢?处理的原则为:后面的参数会覆盖前面设置的参数。对于上面的例子来说 leftright 参数的设置是有效的,而 textwidth 的设置会被忽略。同样的这里的 textheight 参数也会被忽略,所以我们可以直接将这两个参数删除并不会影响我们的布局。

接下来的 headheight,headsep,footskip 参数是对页眉页脚的布局进行设置。由于我们这里并没有使用 includeheadincludefoot 参数,所以默认页面页脚是包含到 topbottom 之中的。页面页脚大小的设定并不会影响到文字的排版。

最后的 heightrounded 参数将 textheight 参数四舍五入到 \baselineskip 的整数倍加 \topskip\baselineskip 可以认为是行距,\topskip 为纸张可书写区域顶部空白。所以这个参数也很好理解:让文本区域的高度变成行距的整数倍防止可能出现的“underfull vbox”。如 \textheight 为 486pt,\baselineskip 为12pt,\topskip 为10pt,那么:
(39 \times 12pt + 10pt =) 478pt < 486pt < 490pt (= 40 \times 12pt + 10pt)
最终将会设置 \textheight 的值为 490pt。

可以看到通过使用 geometry 宏包,我们只需要使用简单的几条命令就可以直观的的设置我们的页面布局了。

在文档中改变页面布局

前面我们通过在导言区通过使用 \geometry{options} 参数可以轻松的设置全局的页面布局,有时候我们可能需要在我们的文档中间临时的修改某些页面的布局。在这种情况下,我们可能还会使用到的下面的命令:

\newgeometry{options} 在文档的中间改变页面布局。使用参数和 \geometry 相同,但它会禁止导言区中 \usepackage\geometry 指定的所有选项(跳过所有文档尺寸相关的选项,\negeometry命令不能设置文档尺寸相关参数)。\restoregeometry 命令则对应的恢复导言区指定的页面布局。这两个命令在调用时都会插入一个 \clearpage 命令来强制开始一个新的页面。

\savegeometry{<name>} 保留该命令所在页面的布局并命名为 <name>\loadgeometry{<name>} 加载名为 <name> 的页面布局。

上面这些命令在同一个文档多个页面布局以及多个页面布局交替复用时非常有用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,748评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,472评论 1 45
  • 我的大学老师们 尊师重教是我们国家的优良传统,远在西周时期就有了“弟子事师,敬同于父...
    黄河歌者阅读 1,711评论 20 82
  • 时间在流逝,记忆在消退,唯有用笔将点点滴滴记录。 第一章 今天是开学第一天,佟佳诗一大早就起来开始收拾。 ...
    提心吊胆阅读 284评论 0 4