首页 Latex页面布局

Latex页面布局

举报
开通vip

Latex页面布局 LATEX 下的页面布局∗ Piet van Oostrum† Dept. of Computer Science Utrecht University 2001 年 8 月 12 日 摘 要 该篇文章主要描述了如何在你的 LATEX 文档中调整页面布局,也就是如何改变页边距和页面 大小、页眉页脚,以及图片或表格(统称浮动对象)的适当位置。 本文原来为 fancyheadings 宏包的文档。当然也包括其他信息,比如标记(marks)的高级使用 方法,以及处理浮动对象的方法。附带在 fancyhea...

Latex页面布局
LATEX 下的页面布局∗ Piet van Oostrum† Dept. of Computer Science Utrecht University 2001 年 8 月 12 日 摘 要 该篇文章主要描述了如何在你的 LATEX 文档中调整页面布局,也就是如何改变页边距和页面 大小、页眉页脚,以及图片或 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 格(统称浮动对象)的适当位置。 本文原来为 fancyheadings 宏包的文档。当然也包括其他信息,比如标记(marks)的高级使用 方法,以及处理浮动对象的方法。附带在 fancyheadings 宏包中的文档已经升级为版本2。考虑到各 个操作系统间的兼容性,宏包的名字已经改成了 fancyhdr。 使用许可:本宏包内的所有文件都可以在 LATEX Project Public License,由 LATEX 基本发行 中的 lppl.txt 文件描述,版本1或者后续版本都可以。 目 录 1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 页眉和页脚 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 fancyhdr 是什么? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 fancyhdr 的简单应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 举个简单的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 双面打印的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 重新定义 plain 样式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 默认布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 9 深入理解 LATEX 的标记 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 10 字典样式的页眉 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 Fancy 布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 12 两个书本的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ∗译者:ifuleyou,bbs.ctex.org。希望大家不吝指正,排版翻译上的错误我都要! †这份文档中的相当一部分是由 George Gra¨tzer (University of Manitoba) 在Notices Amer. Math. Soc.撰写。 谢谢你,George! 1 13 浮动页面的特殊布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 14 那些空白的页面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 N of M 样式的页码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 16 相对于章节的页码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 17 什么时候改变页眉和页脚的定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 18 由文本引入的页眉和页脚 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 19 小电影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 书边索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 21 浮动对象的放置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 22 多页的浮动对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 §22.1 表格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 §22.2 图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 23 联系信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1 简介 在 LATEX 文档中,页面是由各种不同的元素组合而成,如插图1 所示。 Body 中包含了文 档的正文以及浮动对象(表格和图片)。 整个页面是由 LATEX 的输出过程 (Output Routine)来构造的,该输出过程很复杂,因此不 宜对其进行修改。本文中所描述的一些宏包对输出过程进行了少许的修改以便达到一些其他方 法所无能为力的效果。你最好使用这些宏包而尽量避免自己去盲目修改输出过程。 有些东西必须在这里向你说明一下: 1. 左边距不叫 \leftmargin,而是 \evensidemargin(偶数页面中)和 \oddsidemargin(奇 数页面中)。在单面的文档中,\oddsidemargin就代表了两种边距。\leftmargin 也是个 LATEX 命令,但它有不同的含义(就是列表的缩进距离)。 2. 大部分参数不适合在文档中间进行修改,而另一些修改可能在分页的时候有效果。如果你 只想改变该页的高度,你可以使用 \enlargethispage命令。 边注区(margin notes area)包含了一小段由命令 \marginpar 所生成的文本。在双开面的 文档中,边注区交替出现在左右两边。边注区的位置并不根据页面大小而固定不变,而是和边 注所在的段落具有差不多的高度。由于计算边注区位置的算法的关系,在双开面的文档中,如 果边注比较靠近分页的地方,那么它很可能会出现在错误的那一边。如果你想在特定的地方放 置你的边注,你可以参考 19 节或是 20 节中的内容。 本文的第一部分将描述如何改变页眉以和页脚区,而最后一部分将描述如何将你的浮动对 象放置在想要的地方。 2 Header Body Footer Margin Notes i8ff - i7 ? 6 i1ff - ff-i3 i10ff - ff-i9 6 ? i11 i2 ? 6 6 ? i4 6 ? i5 6 ? i6 1 one inch + \hoffset 2 one inch + \voffset 3 \oddsidemargin = 18pt 4 \topmargin = 0pt 5 \headheight = 12pt 6 \headsep = 25pt 7 \textheight = 663pt 8 \textwidth = 424pt 9 \marginparsep = 11pt 10 \marginparwidth = 54pt 11 \footskip = 30pt \marginparpush = 5pt (not shown) \hoffset = 0pt \voffset = 0pt \paperwidth = 597pt \paperheight = 845pt 图 1: 页面元素。这些数值仅仅反映本文档中的元素,并不代表默认的值。 3 2 页眉和页脚 在 LATEX 中,页眉和页脚的样式是由命令 \pagestyle 和 \pagenumbering 来定义的。 \pagestyle命令定义了页眉和页脚的基本内容(如页码出现在哪里),而 \pagenumbering 则 定义了页码的显示方式。LATEX 本身包含四种标准的页面样式。 empty 没有页眉也没有页脚 plain 没有页眉,页脚包含一个居中的页码 headings 没有页脚,页眉包含章/节或者子节的名字和页码 myheadings 没有页脚,页眉包含有页码和用户提供的其他信息 尽管这些样式相当有用,但功能比较有限。其他页面样式可以通过 \ps@xxx这些命令来定 义。当文档中遇到命令 \pagestyle{xxx}时,这些定义被执行。命令 \ps@xxx 应该为页眉和页 脚定义如下命令: \@oddhead 双开面文档中,奇数页面的页眉(单开面中为所有页面的页眉) \@evenhead 双开面文档中,偶数页面的页眉 \@oddfoot 双开面文档中,奇数页面的页脚(单开面中为所有页面的页脚) \@evenfoot 双开面文档中,偶数页面的页脚 这些并不是命令,而是 LATEX 的输出过程所使用的“变量”。这些含有字符 ‘@’ 的命令或变 量最好只出现在宏包中,或者位于命令 \makeatletter 和 \makeatother 之间。 命令 \pagenumbering 定义了页码的形式。它带有一个参数,为以下几种之一: arabic 阿拉伯数字 roman 小写的罗马数字 Roman 大写的罗马数字 alph 小写字母 Alph 大写字母 命令 \pagenumbering{xxx} 定义了另外一个命令 \thepage ,使得该命令扩展之后成为 xxx 的形式。然后 \pagestyle 命令便将 \thepage 放在适当的位置。另外,\pagenumbering 命令同时也将把页码重置为1。\pagestyle和 \pagenumbering将影响到当前正在构建的页面, 因此最好将它们放在想要它们起作用的页面的位置上(参考 17 节)。 3 fancyhdr 是什么? 宏包 fancyhdr 可以让你方便地调整 LATEX 文档中的页眉和页脚。你可以定义: • 三部分组成的页眉和页脚 • 页眉和页脚中的修饰线 • 可以比正文更宽的页眉和页脚 • 多行的页眉和页脚 • 对应于奇数和偶数页面不同的页眉和页脚 • 章节起始页的页眉和页脚可以和其他页面不同 • 包含浮动对象的页面其页眉和页脚可以和其他页面不同 当然,你完全可以对字体、大小写等进行控制。 4 4 fancyhdr 的简单应用 在 LATEX2ε 文档中使用该宏包,你必须将文件fancyhdr.sty放在 TEX可以找到的目录或 文件夹内(通常在输入目录),然后在你的导言区 \documentclass{...} 后加入命令1: \usepackage{fancyhdr} \pagestyle{fancy} 我们看到通过 fancyhdr 构造的页面如下: LeftHeader CenteredHeader RightHeader page body LeftFooter CenteredFooter RightFooter LeftHeader 和 LeftFooter 为居左对齐;CenteredHeader 和 CenteredFooter 居中;而 Right- Header 和 RightFooter 居右对齐。 六个部分和两条修饰线可以各自单独定义。 5 举个简单的例子 K. Grant 正在给校长 A. Smith 写一份报告,是关于“新毕业学生的表现”,他采用了如下 的页面布局: 新毕业学生的表现 page body From: K. Grant To: Dean A. Smith 3 “3”是页码,标题“新毕业学生的表现”为黑体。 这些效果是由 \pagestyle{fancy}2 之后的这些命令所获得: \lhead{} \chead{} \rhead{\bfseries 新毕业生的表现} 1对于LATEX2.09版本,你必须在命令 \documentstyle 中指定使用 [fancyhdr] 而不是用 \usepackage 命令。 2注意:在 fancyheadings 的版本1中,是通过 \setlength 来改变 \...rulewidth 参数的。 5 \lfoot{From: K. Grant} \cfoot{To: Dean A. Smith} \rfoot{\thepage} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.4pt} (命令 \thepage 用于显示当前页码,而 \bfseries 是 LATEX2ε 用于选择黑体的命令3) 看上去挺不错,但第一页显然不需要这些页眉和页脚。在 \begin{document} 之后而在 \maketitle 命令之前敲入下面的命令来去掉页眉和页脚中其他内容而只保留页码: \thispagestyle{plain} 或者 \thispagestyle{empty} 如果你什么也不想要的话。 实际上,LATEX 命令 \maketitle 中已经定义了命令 \thispagestyle{plain}。因此,如果 你坚持要在 \maketitle 生成的页面上使用 fancy 的布局,你必须在 \maketitle 之后马上发 出\thispagestyle{fancy} 的指示。 6 双面打印的例子 一些文档类如 book.cls,默认为双面排版:单双数页面有不同的布局。另外一些文档类通 过选项 twosides 来取得双面效果。 现在我们用双面重新排版报告,上面一节中的布局留给奇数页面,而对于偶数页面(左页 面)采用如下布局: 新毕业生的表现 page body 4 From: K. Grant To: Dean A. Smith “4”为页码。 下面是相应的命令: \fancyhead{} % clear all fields \fancyhead[RO,LE]{\bfseries 新毕业生的表现} \fancyfoot[LE,RO]{\thepage} \fancyfoot[LO,CE]{From: K. Grant} \fancyfoot[CO,RE]{To: Dean A. Smith} \renewcommand{\headrulewidth}{0.4pt} 3译者:在 CJK 中可以直接用 \bfseries 来改变中文字体,而在 CCT 中则需要 \ziti 来完成。 6 E 偶数页 O 奇数页 L 居左内容 C 居中内容 R 居右内容 H 页眉 F 页脚 图 2: Selectors \renewcommand{\footrulewidth}{0.4pt} 我们使用了更通用的命令 \fancyhead和 \fancyfoot。这两个命令可以通过参数指定奇/偶 数页的页眉/页脚的哪个部分采用何种格式。其中,第一个命令忽略了这些参数,从而指定为针 对任何页眉。通常,这在覆盖默认或者之前定义的时候比较有用。方括号中的选择参数由图 2 列出。选择参数可以组合,比如 \fancyhead[LE,RO]{text}就定义了偶数页的左页眉和奇数页 的右页眉。如果你没有给出 E或 O则将针对所有页面。对于 LRC 也是同样道理。因此前面的 \lhead 只是 \fancyheadd[L] 命令的缩写罢了。选择参数并不区分大小写。 更通用一点,通过选择参数H (header)和 F (footer)命令 \fancyhf可以让你同时指定页眉 和页脚。实际上,\fancyhead 和 \fancyfoot 也不过是指定了 H 和 F 的 \fancyhf 命令而已。 再说一句,你可以通过 \thispagesytle{plain} 来定义第一页的简单布局。 7 重新定义 plain 样式 一些 LATEX 命令,像 \chapter,使用命令 \thispagestyle 来切换到 plain 样式,因此 你自己定义的样式不起作用。要调整这种页面的布局,你必须重新定义 plain 样式。正如开 头说的那样,你可以重新定义\ps@plain 命令,但 fancyhdr 提供了一种更简单的方法。命令 \fancypagestyle可以重新定义现有的页面样式(如 plain)或者新的页面样式,它有两个参数: 第一个是定义的页面样式的名字,第二个参数包含了改变页眉页脚的那些命令,如 fancyhead 等。同样,\headrulewidth和 \footrulewidth也可以改变。举个例子,我们为 6节中的报告重 新定义 plain 样式,使得其页码为黑体: \fancypagestyle{plain}{% \fancyhf{} % clear all header and footer fields \fancyfoot[C]{\bfseries \thepage} % except the center \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt}} 8 默认布局 如果我们只使用 book.cls 文档类以及 fancyhdr 的默认设置,则只需要如下命令: \usepackage{fancyhdr} \pagestyle{fancy} 7 fancyhdr 将会包揽全部工作。在新的一章开始的页面上,页码出现在页脚的中间,没有页 眉也没有修饰线。 在偶数页面上,我们有如下布局: 1.2 EVALUATION CHAPTER 1. INTRODUCTION page body 4 在奇数页面上,我们得到: CHAPTER 1. INTRODUCTION 1.2 EVALUATION page body 3 页眉的文字大写并倾斜 默认的布局由下面的命令构成: \fancyhead[LE,RO]{\slshape \rightmark} \fancyhead[LO,RE]{\slshape \leftmark} \fancyfoot[C]{\thepage} 修饰线则为如下的设置: \headrulewidth 0.4pt \footrulewidth 0 pt 在 book.cls 中,页眉的文字被转变成大写形式。 9 深入理解 LATEX 的标记 通常,对于 book 或者 report 来说,你可能会把章节的信息反映在页眉上(对于单面打印 可能只需要章次的信息),以及对于 article 文档类的节和子节(对于单面打印只需要节次的 信息)。LATEX使用标记(mark)的机制来记录章节信息,在 LATEX Companion 4.3.1节中有详细 描述。 有两种方法可以改变高层的或低层4 的章节信息,下面两个命令 \leftmark(高层)和 \rightmark(低层)记录了 LATEX所要处理的信息。你可以如 8节中描述的那样直接使用这两 4译者: 原文 少年中国说原文俱舍论原文大医精诚原文注音大学原文和译文对照归藏易原文 为 higher-level lower-level 是相对于章节的层次结构而言的,这里翻译得不到位(有点像法 轮功术语) 8 个命令。 命令 \leftmark记录了页面上最近一次 \markboth命令左边的参数,而 \rightmark则记 录了页面上第一次 \markboth 命令右边的参数,或者是页面上第一次 \markright命令的参数 值。如果当前页面没有标记,则两者都维持前面的页面中的值保持不变。 你可以通过重新定义 \chaptermark, \sectionmark 和 \subsectionmark 命令5 来改变章 和节或者节以及子节的信息。\pagestyle{fancy} 将会设置这些定义的默认值,因此你必须在 这之后加入这些定义。 举个章次的例子,共有三个部分: • 宏 \thechapter 所显示的章号(比如2) • 宏 \chaptername 为章的名字(在英文中为 Chapter) • 标题,包含在 \chaptermark 中. 图 3 显示了 “Chapter 2. Do it now” 标题的不同显示(最后一个例子比较适合非英语语 言)。行末的 % 号用于去掉不需要的空格。通常你将会继续写下去而去掉这些 % 号6 对于低层的节次处理,也可以同样使用命令 \markright。 如果 “Section 2.2. 第一步” 为当前小节,则 \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}} 将给出效果“2.2. 第一步” 重新定义 \chaptermark 和 \sectionmark 也未必可以取消所有的大写。比如参考文献 的标题就为bibliography,因为在 \thebibliography 定义中早就调用了 \MakeUppercase。 对于index 也是同样。如果你不想重新定义这些命令,那么可以通过命令 \nouppercase 来 使 fancyhdr 小写所有页眉和页脚的内容。注意,这种做法很有可能同其他东西发生冲突,比 如页眉中大写的罗马数字,因此有必要谨慎使用。事实上,该命令通过将参数传递给一个 \MakeUppercase 和 \uppercase 被改变为空操作的环境来实现的。 \lhead{\nouppercase{\rightmark}} \rhead{\nouppercase{\leftmark}} LATEX 的标记机制对于章(总是从新一页开始)和节(有相当长度),其工作良好。但对于 短小的节次及子节就不那么理想了。问题出在 LATEX 身上,而非fancyhdr。 举个例子来看,我们定义一种页面布局使得 \leftmark 由节生成而 \rightmark 由子节生 成(作为article 文档类的默认设置)。如果页面由短小的节次组成,则 Section 1. subsection 1.1 subsection 1.2 Section 2. 因为 leftmark 记录了最近一次页面上出现的标记,所以它的值现在为“Section 2.”,而 rightmark 则是“subsection 1.1”,因为它记录的是页面上第一次出现的标记。因此页眉上将同 5对于paragraph 以及 subparagraph 也有相同的命令,但很少有用。 6\MakeUppercase 命令在 LATEX2ε 中用于生成大写的文本,而在 LATEX2.09版本中用的是 \uppercase。区别 在于 \MakeUppercase 可以处理非 ASCII 字符。fancyhdr定义 \MakeUppercase 为 \uppercase 的别名如果事先没 有定义。 9 代码: \renewcommand{\chaptermark}[1]{% \markboth{\chaptername \ \thechapter.\ #1}{}} \renewcommand{\chaptermark}[1]{% \markboth{\MakeUppercase{% \chaptername}\ \thechapter.% \ #1}{}} \renewcommand{\chaptermark}[1]{% \markboth{\MakeUppercase{% \chaptername\ \thechapter.% \ #1}}{}} \renewcommand{\chaptermark}[1]{% \markboth{#1}{}} \renewcommand{\chaptermark}[1]{% \markboth{\thechapter.\ #1}{}} \renewcommand{\chaptermark}[1]{% \markboth{\thechapter.% \ \chaptername.\ #1}{}} 打印出: Chapter 2. Do it now CHAPTER 2. Do it now CHAPTER 2. DO IT NOW Do it now 2. Do it now 2. Chapter. Do it now 图 3: 不同标记的变化 时出现 Section 2 和 Subsection 1.1,不是很美观。一个解决方法就是只用 \rightmark 而且重 新定义 \sectionmark 。当然 LATEX 命令 \firstleftmark 也是个不错的选择(参考 18 节中 的extramarks 宏包)。 另外一个标准 LATEX 文档类中标记的问题出在高层的章节命令如 \chapter 会调用 \markboth 而留空右边的参数。这意味着一章的第一页(或者是 article 文档类的第一页)中, \rightmark 将为空值。如果这种处理方法有违你的本意,那么你只好自己动手重新赋值给 \rightmark,或者重新写一遍 \chaptermark(或 \sectionmark)的定义,使得 \markboth 有 两个合适的参数。 最后还要提醒你的是,* 形式的 \chapter 等命令不会调用标记相关的命令,因此如果你 想要在前言中插入页眉或页脚,那么你就得自己加入 \markboth命令,因为前言并不会计算入 章节号,也不会被列入目录中。 \chapter*{Preface\markboth{Preface}{}} 把 \markboth 放在 \chapter* 中是因为这样可以确保不会因为分页的关系而丢失标记信 息。当然,在 \chapter* 中不这样做并不成问题,因为 \chapter* 总是会另起一页,一般情况 下也不会在标题之后就分页。但对于 \section* 就得注意一下了,千万不要这么写: 10 \section*{Preface} \markboth{Preface}{} 因为很可能分页就发生在这两条命令中间。 10 字典样式的页眉 字典或类似的出版物通常会将第一个 单词 英语单词 下载七年级上册英语单词表下载英语单词表下载深圳小学英语单词表 下载高中英语单词 下载 作为页眉,或者是第一个单词和最后一个单词。 通过 fancyhdr 和 LATEX 的 mark 机制我们可以很容易的做到这一点。当然,用于字典样式的 标记机制并不适合章节信息,因此如果出现混排的情况,你需要重新定义 \chaptermark 以及 \sectionmark。 \renewcommand{\chaptermark}[1]{} \renewcommand{\sectionmark}[1]{} 现在你可以用 \markboth{#1}{#1} 来记录字典中的每一项,然后通过 \rightmark 获得第 一项而 \leftmark 获得最后一项。 如果你想使用类似 firstword–lastword 的页眉,那么最好在一页上只出现一个单词的情况下 让它变成 firstworld 的形式。在这种情况下,必须要对两者作比较,但是 TEX 的标记比较奇怪, 你不能简单地使用 \if 来作比较,所幸的是,ifthen 宏包可以。 \newcommand{\mymarks}{ \ifthenelse{\equal{\leftmark}{\rightmark}} {\rightmark} % if equal {\rightmark--\leftmark}} % if not equal \fancyhead[LE,RO]{\mymarks} \fancyhead[LO,RE]{\thepage} 字典经常使用两栏的格式,不幸的是,LATEX的两栏选项有点小 bug,它会引起标记信息的 丢失。如果你使用 fix2col7,就可以解决这个小问题8。或者你可以使用图 4 中的代码。 11 Fancy 布局 你可以通过 \\ 命令来生成一个多行的条目,也可以在其中使用命令 \vspace 来获得多一 点的空隙。需要注意的是,这样做将会增加页眉(\headheight)和页脚(\footskip)的高度, 很有可能你就会得到一个 “Overfull \vbox . . . has occurred while \output is active”的错误9。想 要获得更详细的资料,请参考 LATEX Companion 第 4.1 节。 例如,下面的代码将一节的标题以及子节的标题分成两行显示在右上角: \documentclass{article} \usepackage{fancyhdr} \pagestyle{fancy} \addtolength{\headheight}{\baselineskip} 7你可以从 CTAN 站点上的 tex-archive/macros/latex/contrib/supported/carlisle/ 获取。 8multicol 宏包使用了类似的方法 9如果你使用 11pt 或者 12pt 的字体,你也许不得不这么做,因为 LATEX 默认的字体太小了。 11 % fixmarks.sty: % Patch LaTeX’s output routine to handle marks correctly with two columns. % Joe Pallas % Corrected by Piet van Oostrum on Feb 5, 1993, Oct 5, 1994 \def\@outputdblcol{\if@firstcolumn \global\@firstcolumnfalse % Remember the marks from the first column \global\setbox\@leftcolumn\copy\@outputbox \splitmaxdepth=\maxdimen \cbaddness=10000 \setbox\@outputbox\vsplit\@outputbox to\maxdimen \xdef\@firstcoltopmark{\topmark}% \xdef\@firstcolfirstmark{\splitfirstmark}% \ifx\@firstcolfirstmark\empty\global\let\@setmarks\relax\else \gdef\@setmarks{\let\firstmark\@firstcolfirstmark \let\topmark\@firstcoltopmark}% \fi % End of change \else \global\@firstcolumntrue \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats % Override current first and top with those of first column if necessary \@setmarks % End of change \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup \fi} 图 4: 修改 twocolumn 中的标记 \renewcommand{\sectionmark}[1]{\markboth{#1}{}} \renewcommand{\subsectionmark}[1]{\markright{#1}} \rhead{\leftmark\\\rightmark} 你也可以对修饰线进行调整,比如下面的代码可以将修饰线变的较粗: \renewcommand{\headrulewidth}{0.6pt} 你也可以使页脚的修饰线消失: \renewcommand{\footrulewidth}{0pt} 修饰线本身其实是 \headrule和 \footrule两个宏构成。例如,假设你看腻了实线而想要 一条由点构成的虚线,你可以通过重新定义\headrule 来实现: \renewcommand{\headrule}{\vbox to 0pt{\hbox to\headwidth{\dotfill}\vss}} 另外还有一个参数可能对你有用:\footruleskip,它定义了页脚修饰线和页脚文本最上 方之间的距离。缺省值为30% 的正常行距。当然,你可能会将它定义为很宽或很窄,不过记住 用 \renewcommand 来重新定义哦。 12 12 两个书本的例子 这里给出了一种接近于 L. Lamport 的LATEX 书的样式,在 Lamport 的样式中,页眉超 出了正常的边缘。页眉和页脚的长度由 \headwidth 定义,通常是正文的宽度。你可以使它 宽一点或窄一点,只要用命令 \setlength 或 \addtolength 来重新定义 \headwidth 的长度 就可以了。为了让页眉扩展到边注区,可以在 \headwidth 的基础上加上 \marginparsep 和 \marginparwidth,这两个参数分别是边注区同正文之间的空隙宽度以及边注区本身的宽度, 如下所示: \addtolength{\headwidth}{\marginparsep} \addtolength{\headwidth}{\marginparwidth} 你必须在第一次调用 \pagestyle{fancy} 命令之后发出这些命令,因为这样可以让调整后的 \headwidth 成为默认值10。 下面是 Lamport 书中布局样式的定义: \documentclass{book} \usepackage{fancyhdr} \pagestyle{fancy} \addtolength{\headwidth}{\marginparsep} \addtolength{\headwidth}{\marginparwidth} \renewcommand{\chaptermark}[1]{\markboth{#1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} \fancyhf{} \fancyhead[LE,RO]{\bfseries\thepage} \fancyhead[LO]{\bfseries\rightmark} \fancyhead[RE]{\bfseries\leftmark} \fancypagestyle{plain}{% \fancyhead{} % get rid of headers \renewcommand{\headrulewidth}{0pt} % and the line } 注意到 \chaptermark 和 \sectionmark 命令已经被重新定义,新的定义去掉了章次的序 号并保持一章的标题为原来的大小写,而不是全部大写。 我们拿 AMS-LATEX book 作为第二个例子。 一章开始的页面没有页眉也没有页脚,因此对每一章开始的那一页,我们作如下声明: \thispagestyle{empty} 这样一来省去了重新定义 plain 的麻烦。 章节的标题其形式为:2. DO IT NOW,因此我们对 \chaptermark 和 \sectionmark 进行 重新定义(参考 9 节): \renewcommand{\chaptermark}[1]% {\markboth{\MakeUppercase{\thechapter.\ #1}}{}} 10 在 fancyhdr 版本 2 中,你可以在此之前设置,不过建议还是放在后面。 13 \renewcommand{\sectionmark}[1]% {\markright{\MakeUppercase{\thesection.\ #1}}} 在偶数页中,页码在页眉的左方而一章的标题在右;对应的,在奇数页中,页码在页眉的 右方而小节的标题在左。页眉中间空着,也没有页脚。 在页眉下面有一条 0.5pt 宽的修饰线,因此我们这样定义: \renewcommand{\headrulewidth}{0.5pt} \renewcommand{\footrulewidth}{0pt} 页眉中使用了 9pt大小的 Helvetica粗体。在 Sebastian Rahtz的 PSNFSS系统中,Helvetica 遵从 Karl Berry 的字体短名称 phv,因此选择字体如下所示: \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont (参考 LATEX Companion 中第 7.6.1 和11.9.1 节) 定义简短命令: \newcommand{\helv}{% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont} 现在可以进行页面布局了: \documentclass{book} \usepackage{fancyhdr} \pagestyle{fancy} \renewcommand{\chaptermark}[1]% {\markboth{\MakeUppercase{\thechapter.\ #1}}{}} \renewcommand{\sectionmark}[1]% {\markright{\MakeUppercase{\thesection.\ #1}}} \renewcommand{\headrulewidth}{0.5pt} \renewcommand{\footrulewidth}{0pt} \newcommand{\helv}{% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont} \fancyhf{} \fancyhead[LE,RO]{\helv \thepage} \fancyhead[LO]{\helv \rightmark} \fancyhead[RE]{\helv \leftmark} 13 浮动页面的特殊布局 人们希望一些浮动页面(就是只包含浮动对象的页面)可以有特殊的页面布局。因为这些浮 动页面往往由 LATEX自动生成,因此用户无法对其进行控制,对浮动页面使用 \thispagestyle 不会奏效,因为这条命令在改变浮动页面样式的同时,至少也会改变之前一页的样式。而在 fan- cyhdr 中,你可以这样控制页眉和页脚: \iffloatpage{value for float page}{value for other pages} 你甚至可以使用该判断去掉浮动页面上方的修饰线: 14 \renewcommand{\headrulewidth}{\iffloatpage{0pt}{0.4pt}} 有时你可能需要对那些浮动对象位于顶部或者底部的页面进行样式上的改动,fancyhdr 提 供了 \iftopfloat 和 \ifbotfloat 命令,使用方法同 \iffloatpage。 注意:在浮动对象中定义的标记对于 LATEX 的输出过程来说并不可见,因此在浮动对象中 定义标记没有用处。目前还没有什么方法可以让浮动对象的某些属性(比如图形的标题)直接 出现在页眉或者页脚中。 14 那些空白的页面 在 book 文档类中,openany 选项没有给出的情况下,或者是在 report 文档类给出 openright 选项的情况下,一章总是开始于奇数页,部分情况下会引起前面的一页为空白。有 些人喜欢让这一页完全空白(也就是既没有页眉也没有页脚),\thispagestyle 对此无能为 力,因为这条命令只可能在前面那一页中出现,这样做的后果是同时改变了前面一页的页面样 式。但实际上,要想达到这样的效果并不难: \clearpage{\pagestyle{empty}\cleardoublepage} 我们看到 \pagestyle{empty} 被放在了大括号之内,因此它影响且只影响到了由命令 \cleardoublepage 生成的页面样式。当然,你可以将上面这条命令放在自己定义的命令中,你 也可以让每一章开始的时候自动生成,甚至在这些空白页面上放点什么文字,这时候,你必须 重新定义 \cleardoublepage 命令: \makeatletter \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else \hbox{} \vspace*{\fill} \begin{center} This page intentionally contains only this sentence. \end{center} \vspace{\fill} \thispagestyle{empty} \newpage \if@twocolumn\hbox{}\newpage\fi\fi\fi} \makeatother 15 N of M 样式的页码 一些文档的作者喜欢页码以 n of m 的样式出现,其中 m 为总页数而 n 为当前页数。有一 个宏包 nofm.sty 可以做到这一点,但它的一些版本有点缺陷,大部分时候在 fancyhdr 中工作 不正常,因为该宏包会修改整个页面的布局。在 LATEX2ε 中有另外一个宏包 lastpage 可以在 fancyhdr 下使用: \usepackage{lastpage} ... 15 \cfoot{\thepage\ of \pageref{LastPage}} 如果你还在使用 LATEX2.09 而且不能升级到 LATEX2ε ,你可以使用同 LATEX2.09 兼容的宏 包 lastpage209.sty,它采用了如下定义: \let\origenddocument=\enddocument \def\enddocument{\clearpage\if@filesw {\addtocounter{page}{-1} \immediate\write\@mainaux {\string\newlabel{LastPage}{{}{\thepage}}}}\origenddocument} LastPage标签的值可以用来改变文档最后一页的页眉和页脚。比如除了最后一页,你想在 所有奇数页的页脚中包含文字 “please turn over”。你可以这样做11: \usepackage{lastpage} \usepackage{ifthen} ... \rfoot{\ifthenelse{\isodd{\value{page}} \and \not \value{page}=\pageref{LastPage}{please turn over}{}} 16 相对于章节的页码 在一些技术性文章中,页码通常为 2–10的形式,第一个数字为章次,而第二个数字则是该 页相对于本章开始的页数。当然,有些时候也可以相对于小节。chappg 宏包可以帮助你得到这 种效果,如果你想要做点修改,比如中间用 “·” 而不是 “–”,那么你就得拷贝一份然后进行修 改。 该宏包重新定义 \thepage为 \arabic{chapter}-\arabic{page}。不幸的是,对于附录,这 样的定义给出的是附录的序号而不是字母。更好的定义应该是 \thechapter-\arabic{page}, 不过你可以在 \usepackage{chappg} 之后修改 \thepage 的定义。这个宏包所做的另外一件事 情是在每一章开始之后将页数重置为 1。 对于前面所说的 “m of n”的样式和上面描述的相对于章节的页码样式有着本质上的不同。 m of n 的样式只能出现在页眉和页脚中,而不会出现在诸如目录、索引或者参照(如参照 xx 页)中。因此不需要改变 \thepage 的定义。而 “2–10” 的页码,必须在所有的引用中保持这种 样式,因此它必须得重新定义 \thepage。 17 什么时候改变页眉和页脚的定义 有些时候你可能会在文档的中间想要改变页眉或者页脚的样式。有些修改可以通过标记的 机制来完成,正如 9 和 18 节中所述。但一些时候,你需要做比较大的改动,比如改变页码样 式,从罗马数字改成阿拉伯数字,或者是 改变 fancyhdr 中的一些变量,再有完全改变页面的样 式等。这时候,你往往会发现这些改动比你预料的要早。通常,上面的改动将会马上奏效,也就 是对当前正在处理的页面。如果你想要改变下一页的样式,你必须确保这
本文档为【Latex页面布局】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_168117
暂无简介~
格式:pdf
大小:383KB
软件:PDF阅读器
页数:25
分类:互联网
上传时间:2012-06-28
浏览量:92