文本文档字符消失中数学字符使用不标准可不可以一次性修改

&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17251次
排名:千里之外
(1)(1)(1)(1)(6)(8)当前位置: >>
(最新版)一份不太简短的
A 一份不太简短的 L TEX 2ε 介绍A 或 103 分钟了解 L TEX 2ε原版作者: Tobias Oetiker Hubert Partl, Irene Hyna and Elisabeth Schlegl 原版版本: Version 5.05, July 18, 2015中文翻译: ChinaTEX 论坛
中文版本: 版本 5.05,二零一六年二月 版权所有 ? 1995 C 2005 Tobias Oetiker 及贡献者。保留所有权利。 本文档是自由的;你可以在自由软件协会颁布的 GNU 通用公共许可证的条款下再次发布或修改本文 档。许可证可以是第二版,或者任何(自行选择的)后继版本。 本文档基于使用的目的发布,但并不负责任何担保;亦没有用于商业目的或某一特定目的的任何暗示 性的担保。更多的细节请查看 GNU 通用公共许可证。 你应该随本文档同时收到一份 GNU 通用公共许可证的拷贝;如果没有,请发信给自由软件协会,地 址:675 Mass Ave, Cambridge, MA 02139, USA。 中文版致谢5.05 中文版致谢 4.20 中文版致谢中文 TEX 学会启动的 lshort-zh-cn 修正计划!本项计划历史八个月,参加的朋友有: CTEX 论坛 ID zpxing Frogge liwenjun lijian605 gprsnl 翻译章节 前言、第二章、第五章 1-2.4 & 3、第六章 第一章 第三章 第四章 第五章 2.5-2.11haginile 和 Frogge 通读了全篇,并给出了详细的勘误表。blackold 对于第二章亦有所贡献。 最后由 zpxing 统筹全书。 ..............................................................................................3.20 中文版致谢本文档的翻译工作由 CTEX 版主“经典问题”倡议,历经近十个月才得以完成。期间参与翻 译工作的朋友有: CTEX 论坛 ID 经典问题 高原之狼 controlong cxterm aloft ganzhi 翻译章节 前言 第一章 第二章 第三章 第四章 第五章 源文件名 overview.tex things.tex typeset.tex math.tex, lssym.tex spec.tex custom.tex在此特向这些奉献者表示感谢!i
英文版致谢A Much of the material used in this introduction comes from an Austrian introduction to L TEX2.09 written in German by: Hubert Partl &partl@mail.boku.ac.at&Zentraler Informatikdienst der Universit?t für Bodenkultur WienIrene Hyna&Irene.Hyna@bmwf.ac.at&Bundesministerium für Wissenschaft und Forschung WienElisabeth Schleglin Graz&noemail&A If you are interested in the German document, you can ?nd a version updated for L TEX 2ε by J?rg Knappen at CTAN://info/lshort/germaniii iv英文版致谢The following individuals helped with corrections, suggestions and material to improve this paper. They put in a big e?ort to help me get this document into its present shape. I would like to sincerely thank all of them. Naturally, all the mistakes you’ll ?nd in this book are mine. If you ever ?nd a word that is spelled correctly, it must have been one of the people below dropping me a line.Eric Abrahamsen, Lenimar Nunes de Andrade, Eilinger August, Rosemary Bailey, Barbara Beeton, Marc Bevand, Connor Blakey, Salvatore Bonaccorso, Pietro Braione, Friedemann Brauer, Markus Brühwiler, Jan Busa, David Carlisle, Neil Carter, Carl Cerecke, Mike Chapman, Pierre Chardaire, Xingyou Chen, Christopher Chin, Diego Clavadetscher, Wim van Dam, Benjamin Deschwanden Jan Dittberner, Michael John Downes, Matthias Dreier, David Dureisseix, Hans Ehrbar, Elliot, Rockrush Engch, William Faulk, Robin Fairbairns, Johan Falk, J?rg Fischer, Frank Fischli, Daniel Flipo, Frank, Mic Milic Frederickx, David Frey, Erik Frisk, Hans Fugal, Robert Funnell, Greg Gamble, Andy Goth, Cyril Goutte, Kasper B. Graversen, Arlo Gri?ths, Alexandre Guimond, Neil Hammond, Christoph Hamburger, Rasmus Borup Hansen, Joseph Hilferty, Daniel Hirsbrunner, Martien Hulsen, Bj?rn Hvittfeldt, Morten H?gholm, Werner Icking, Eric Jacoboni, Jakob, Alan Je?rey, Martin Jenkins, Byron Jones, David Jones, Johannes-Maria Kaltenbach, Nils Kanning, Andrzej Kawalec, Christian Kern, Alain Kessi, Axel Kielhorn, Sander de Kievit, Kjetil Kjernsmo, Tobias Klauser, J?rg Knappen, Michael Koundouros, Matt Kraai, Tobias Krewer, Flori Lambrechts, Mike Lee, Maik Lehradt, Rémi Letot, Axel Liljencrantz, Jasper Loy, Johan Lundberg, Martin Maechler, Alexander Mai, Claus Malten, Kevin Van Maren, Pablo Markin, I. J. Vera Marún, Hendrik Maryns, Chris McCormack, Aleksandar S. Milosevic, Henrik Mitsch, Stefan M. Moser, Philipp Nagele, Richard Nagy, Manuel Oetiker, Urs Oswald, Hubert Partl, Marcelo Pasin, Martin P?ster, Lan Thuy Pham, Breno Pietracci, Demerson Andre Polli, Maksym Polyakov, Nikos Pothitos, John Re?ing, Mike Ressler, Brian Ripley, Kurt Rosenfeld, Bernd Rosenlecher, Chris Rowley, Young U. Ryu, Risto Saarelma, András Salamon, José Carlos Santos, Christopher Sawtell, Gilles Schintgen, Craig Schlenter, Hanspeter Schmid, Baron Schwartz, Jordi Serra i Solanich, Miles Spielberg, Susan Stewart, Matthieu Stigler, Geo?rey Swindale, Laszlo Szathmary, Boris Tobotras, Josef Tkadlec, Scott Veirs, Didier Verna, Carl-Gustav Werner, Fabian Wernli, Matthew Widmann, David Woodhouse, Chris York, Rick Zaccone, Fritz Zaucker, and Mikhail Zotov. 前言A L TEX [1] 是一个文档准备系统 (Document Preparing System),它非常适用于生成高印刷质量的科技类和数学类文档。它也能够生成所有其他种类的文档,小到简单的信件,大到完整的书A 籍。L TEX 使用 TEX [6] 作为它的排版引擎。 A A 这份短小的手册描述了 L TEX 2ε 的使用,对 L TEX 的大多数应用来说应该是足够了。参考 A 文献 [1, 2] 对 L TEX 系统提供了完整的描述。本手册共有八章和两篇附录:A 第一章 讲述 L TEX 的来源,源代码的基本结构,以及如何编译源代码生成文档。 A 第二章 讲述在 L TEX 中如何书写文字,包括中文。第三章 讲述文档排版的基本元素――标题、目录、列表、图片、表格等等。结合前一章的内容, 你应当能够制作内容较为丰富的文档了。A 第四章 L TEX 排版公式的能力是众人皆知的。本章的内容涉及了一些排版公式经常用到的命令、 A 环境和符号。章节末尾提供了 L TEX 常见的数学符号。第五章 介绍了如何修改文档的一些基本样式,包括字体、段落、页面尺寸、页眉页脚等。A 第六章 介绍了 L TEX 的一些扩展功能:排版参考文献、排版索引、排版带有颜色和超链接的电子文档。A 第七章 介绍了如何在 L TEX 里使用 Tik Z 绘图。作为入门手册,这一部分点到为止。 A 第八章 当你相当熟悉前面几章的内容,需要自己编写命令和宏包扩展 L TEX 的功能时,本章介 绍了一些基本的命令满足你的需求。附录 A 介绍了如何安装 TEX 发行版和更新宏包。 附录 B 当新手遇到错误和需要寻求更多帮助时,本章提供了一些基本的参考。A 这些章节是循序渐进的,建议刚刚熟悉 L TEX 的读者按顺序阅读。一定要认真阅读例子的源代码,它们贯穿全篇手册,包含了很多的信息。A 如果你已经对 L TEX 较为熟练,本手册的资源已不足够解决你的问题时,请访问 “Comprehensive TEX Archive Network” (CTAN) 站点,主页是 www.ctan.org。所有的宏包也可以从mirrors.ctan.org 和遍布全球的各个镜像站点中获得。 在本书中你会找到其他引用 CTAN 的地方,形式为 CTAN:// 和之后的树状结构。引用本身是 一个超链接,点击后将打开内容在 CTAN 上相应位置的页面。 要在自己的电脑上安装 TEX 发行版,请参考附录 A 中的内容。各个操作系统下的 TEX 发 行版位于 CTAN://systems。 v vi前言A 如果你有意在这份文档中增加、删除或者改变一些内容,请通知作者。作者对 L TEX 初学者的反馈特别感兴趣,尤其是关于这份介绍哪些内容很容易理解,哪些内容可能需要更好地解释, 而哪些内容由于太过难以理解、非常不常用而不适宜放在本手册。鲁尚文 &&lshort 的的最新中文版本位于 CTAN://info/lshort/chinese。如果用户对其他语言的版本感兴趣,请浏 览 CTAN://info/lshort。 目录中文版致谢 英文版致谢 前言A 第一章 L TEX 须知 1.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .i iii v 1 1 1 1 1 2 2 3 3 4 4 5 5 5 6 7 7 9 9 9 9 10 10 10 10 11 11 11 11 121.1.1 1.1.2 1.1.3 1.2A L TTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A L TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A L TEX 的优缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EX 命令和代码结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A 1.2.1 L TEX 命令和环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EX 源代码结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A 用命令行操作 L TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2A L T1.31.3.1 1.3.2 1.3.3 1.4 1.4.1 1.4.2 1.5 1.6A L T引擎、格式和命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . latex 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pdflatex 和 xelatex 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . 文档类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .宏包和文档类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .EX 用到的文件一览 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 文件的组织方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A 第二章 用 L TEX 排版文字 2.1 语言文字和编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.2.2 2.3 2.3.1 2.3.2 2.3.3 2.3.4ASCII 编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 扩展编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTF-8 编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xeCJK 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ctex 宏包和文档类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 空格和分段 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 特殊字符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 标点符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii排版中文A L TEX 中的符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii 特殊西文符号与重音 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 其它符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A L TEX 标志 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .目录2.3.5 2.3.6 2.3.7 2.4 2.513 13 13 13 14 14 14 15 17 17 17 17 18 18 18 20 20 20 21 22 23 23 24 24 25 26 26 27 27 28 28 29 29 30 30 31 31 35 35 35 36 37 37文字强调 2.5.1 2.5.2 2.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .断行和断页 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 单词间距和断行 手动断行和断页断词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .第三章 文档元素 3.1 章节和目录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 3.1.2 3.1.3 3.2 3.3 3.4 3.5 章节标题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 目录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 文档结构的划分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .标题页 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 交叉引用 特殊环境 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 脚注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 对齐环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 引用环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 摘要环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 代码环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 列格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 列宽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 横线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 合并单元格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 行距控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.6表格 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 3.6.2 3.6.3 3.6.4 3.6.53.7 3.8图片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.1 3.8.2 3.8.3 3.8.4 水平盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 带框的水平盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 垂直盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 标尺盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 浮动体的标题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 并排和子图表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.9浮动体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.1 3.9.2第四章 排版数学公式 4.1 4.2 4.3 AMS 宏集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 公式排版基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 4.3.1 数学模式和文本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数学符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .一般符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 目录ix 指数、上下标和导数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 分式和根式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 关系符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 巨算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数学重音和上下括号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 箭头 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 括号和定界符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 长公式折行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 多行公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 公用编号的多行公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9 4.4 4.4.1 4.4.2 4.4.3 4.5 4.6 4.737 38 38 38 39 40 41 41 41 41 42 43 43 44 45 45 45 46 47 48 48 50 50 54 59 59 59 59 61 61 61 63 63 63 64 64 65 66 66 66 68 68 69 69多行公式数组和矩阵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 公式中的间距 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数学符号的字体控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 4.7.2 4.7.3 数学字母字体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 数学符号的尺寸 加粗的数学符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.8定理环境 4.8.1 4.8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .amsthm 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 证明环境和证毕符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A L T4.9符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9.1 4.9.2 EX 普通符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AMS 符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .第五章 排版样式设定 5.1 字体和字号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3 5.3.1 5.3.2 5.3.3 5.4 5.4.1 字体样式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 字号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 选用字体宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 字体编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xelatex 命令下使用 fontspec 宏包更改字体 . . . . . . . . . . . . . . . . . 使用 xeCJK 宏包更改中文字体 . . . . . . . . . . . . . . . . . . . . . . . . 长度和长度变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .段落格式和间距 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 行距 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 段落格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 水平间距 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 垂直间距 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 利用 geometry 宏包设置页面参数 . . . . . . . . . . . . . . . . . . . . . . . 页面内容的垂直对齐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 分栏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 基本的页眉页脚样式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .页面和分栏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .页眉页脚 x 手动更改页眉页脚的内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . fancyhdr 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .目录5.4.2 5.4.370 70 73 73 73 74 74 76 76 76 77 77 78 79 79 79 80 80 81 83 83 83 84 85 85 89 89 89 90 90 90 91 91 91 92 92 92 95 95 95 96 97第六章 特色工具和功能 6.1 参考文献和 BIBTEX 工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 6.1.2 6.1.3 6.1.4 6.2 6.2.1 6.2.2 6.3 6.3.1 6.3.2 6.4 6.4.1 6.4.2 6.4.3 6.4.4 基本的参考文献和引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BIBTEX 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 使用 BIBTEX 排版参考文献 . . . . . . . . . . . . . . . . . . . . . . . . . . natbib 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 使用 makeindex 工具的方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 索引项的写法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 颜色的表达方式索引和 makeindex 工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .使用颜色带颜色的文本和盒子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . hyperref 宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 超链接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PDF 书签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PDF 文档属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .使用超链接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .第七章 绘图功能 7.1 7.2 绘图语言简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tik Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 7.2.2 7.2.3 Tik Z 坐标和路径 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tik Z 绘图命令和参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tik Z 文字结点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A 第八章 自定义 L TEX 命令和功能 8.1 自定义命令和环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.1.1 8.1.2 8.2 8.2.1 8.2.2 8.2.3 8.3 8.3.1 8.3.2 8.3.3定义新命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 定义环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 编写简单的宏包编写自己的宏包和文档类在宏包中调用其它宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 编写自己的文档类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 定义和修改计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 计数器的值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A L T计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .EX 中的计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .附录 A 安装 TEX 发行版 A.1 TEX 发行版简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.1 安装发行版 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 安装和更新宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.1 手动安装宏包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 目录 附录 B 排除错误、寻求帮助xi99A B.1 L TEX 错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 B.2 查看帮助文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101B.3 常用宏包简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 B.3.1 文字、公式和符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 B.3.2 排版元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 B.3.3 图表和浮动体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 B.3.4 修改版式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 参考文献 索引 105 107
源代码示例列表1.1 3.1 5.1 6.1 6.2 7.1 8.1A L TEX 的一个最简单的源代码示例。 . . . . . . . . . . . . . . . . . . . . . . . . .4 19 71 75 75 88 91book 文档类的文档结构示例。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . fancyhdr 宏包的使用方法示例。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . BIBTEX 数据库示例 books.bib。 . . . . . . . . . . . . . . . . . . . . . . . . . . . 利用 books.bib 生成参考文献的源代码 demo.tex。 . . . . . . . . . . . . . . . . Tik Z 绘图示例源代码和效果。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 宏包的一个最简示例。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii
第一章A L TEX 须知A A 欢迎加入 L TEX 使用者的队伍!本章开头用简短的篇幅介绍了 L TEX 的来源,然后 A A 介绍了 L TEX 源代码的写法,如何编译 L TEX 源代码生成文档,以及理解接下来的章节所必须的一些知识。1.11.1.1 TEX概述TEX 是高德纳 (Donald E.Knuth) 开发的、以排版文字和数学公式为目的的一个计算机软件 [6]。高德纳从 1977 年开始开发 TEX ,以发掘当时开始用于出版工业的数字印刷设备的潜力。正 在编写著作《计算机程序设计艺术》的高德纳,意图扭转排版质量每况愈下的状况,以免影响他 的出书。我们现在使用的 TEX 排版引擎发布于 1982 年,在 1989 年又稍加改进以更好地支持 8-bit 字符和多语言排版。TEX 以其卓越的稳定性、跨平台、几乎没有 Bug 而著称。TEX 的版本 号不断趋近于 π ,当前为 3.。 TEX 读作 “Tech’’,其中 “ch’’ 的发音类似于 “h’’,与汉字“泰赫”的发音类似。TEX 的拼写 来自希腊词语 τεχνικ? (technique,技术) 的开头几个字母。在 ASCII 字符环境,TEX 写作 TeX。1.1.2A L TEXA L TEX 为 TEX 基础上的一套格式,令作者能够使用预定义的专业格式以较高质量排版和印 A A 刷他们的作品。L TEX 的最初开发者为 Leslie Lamport 博士 [1]。L TEX 使用 TEX 程序作为自己 A 的排版引擎。当下 L TEX 主要的维护者为 Frank Mittelbach。 A A L TEX 读作 “Lah-tech’’ 或者 “Lay-tech’’,近似于汉字“拉泰赫”或“雷泰赫” 。L TEX 在 A A ASCII 字符环境写作 LaTeX。当前的 L TEX 版本为 L TEX 2ε ,意思是超出了第二版,接近但没 达到第三版,在 ASCII 字符环境写作 LaTeX2e。1.1.3A L TEX 的优缺点A L TEX 总会拿来和一些“所见即所得” (What You See Is What You Get)的文字处理和排版工具比较优缺点。笔者认为这种比较并不值得提倡,毕竟所有工具都有自己值得使用的原因。A 当然笔者还是会总结一些 L TEX 的优点:? 专业的排版输出,产生的文档看上去就像“印刷品”一样。 ? 方便而强大的数学公式排版能力,无出其右。 ? 绝大多数时候,用户只需掌握一些简单易懂的命令来组织文档结构,无需(或很少)操心 文档的版面设计。 1 2第一章 ? 很容易生成复杂的专业排版元素,如脚注、交叉引用、参考文献、目录等。A L TEX 须知A A ? 强大的扩展性。世界各地的人开发了数以千计的 L TEX 宏包用于补充和扩展 L TEX 的功 A 能。本手册附录中的 B.3 小节可见一瞥。更多的宏包参考 The L TEX companion [2]。 A A ? L TEX 促使用户写出结构良好的文档――而这也是 L TEX 存在的初衷。 A ? L TEX 依赖的 TEX 排版引擎和其它软件是跨平台、免费、开源的。无论用户使用的是 Win-dows,OS X,GNU/Linux 还是 FreeBSD 等系统,都能轻松获得并使用这一强大的排版工 具。A L TEX 的缺点也是显而易见的: A ? 入门门槛高。本手册的副标题叫做“103 分钟了解 L TEX 2ε ” ,实际上 103 是本手册正文部分的页数。如果你以平均一页一分钟的速度看完了本手册,你只是粗窥门径而已,离学会 它还很远。A ? 排查错误困难。L TEX 作为一个依靠编写代码工作的排版工具,其使用的宏语言比 C++或 Python 等程序设计语言在错误排查方面困难得多。它虽然能够提示错误,但不提供调 试的机制,有时错误提示还很难理解。A ? 样式定制困难。L TEX 提供了一个基本上良好的样式,为了让用户不去关注样式而专注于 A 文档结构。但如果想要改进 L TEX 生成的文档样式则是十分困难。? 相比“所见即所得”的模式有一些不便,为了查看生成的文档,用户总要不停地编译。 A L TEX 命令和代码结构1.2A L TEX 的源代码本质上是文本文件。哪怕用 Windows 的记事本或者 Linux 的 gedit 等简单 A A 的编辑器,也可以编写一份 L TEX 源代码并编译出文档来。专用于编辑 L TEX 源代码的编辑器如 TeXworks / TeXstudio / WinEdt 等提供了一些语法高亮、命令补全等功能,以及调用排版 引擎的一些按钮。A 除了文字本身,L TEX 源代码之中还包括大量的命令,用在排版公式、划分文档结构、控制样式等等不同的地方。1.2.1A L TEX 命令和环境A L TEX 命令以反斜线 \开头,为以下两种形式之一:? 反斜线和后面的一串字母,如 \LaTeX。它们以任意非字母符号(空格、数字、标点等)作 为分隔符。 ? 反斜线和后面的一个非字母符号,如 \$。它们无需分隔符。A A 要注意 L TEX 命令是对大小写敏感的,比如输入 \LaTeX 命令可以生成错落有致的 L TEX 字母组合,但输入 \Latex 或者 \LaTex 什么都得不到,还会报错。 A 字母形式的 L TEX 命令忽略其后的所有空格。如果要人为引入空格,需要在命令后面加一 对括号阻止其忽略空格1 :1 另外也可以在命令后面紧跟一个\? 命令(反斜线加空格) ,代表插入一个间距。比如 \TeX\?user 的输出效果就是TEX user。 §1.3A 用命令行操作 L TEX3Shall we call ourselves \TeX users or \TeX{} users?A 大多数的 L TEX 命令是带一个或多个参数,每个参数用花括号 { 和 } 包裹。有些命令带一Shall we call ourselves TEXusers or TEX users?个或多个可选参数,以方括号 [ 和 ] 包裹。还有些命令在命令名称后可以带一个星号 *,带星 号和不带星号的命令效果有一定差异。A 可以将字体、 格式等的更改限制在大括号范围之内。 L TEX 的花括号本身也起到分组的作用, A A L TEX 还引入了环境的用法, 用以令一些效果在局部生效, 或是生成特定的文档元素。 L TEX环境的用法为一对命令 \begin 和 \end: \begin{?environment name ?}{?arguments ?} ... \end{?environment name ?} 其中 ?environment name ? 为环境名,\begin 和 \end 中填写的环境名应当一致。\begin 在 ?environment name ? 后可以带一个或多个参数,甚至可选参数。环境允许嵌套使用。1.2.2A L TEX 源代码结构A L TEX 源代码以一个 \documentclass 命令作为开头,它规定了文档使用的文档类:\documentclass{...} 紧接着我们可以用 \usepackage 命令调用宏包: \usepackage{...} 再接着,我们需要用以下一对命令来标记正文内容的开始位置和结束位置,而将正文内容写 入其中: \begin{document} \end{document} 在 \documentclass 和 \begin{document} 之间的位置称为导言区, 除了使用 \usepackage 调用宏包之外,一些对文档的全局设置命令也在这里使用。当然也可以什么都不写,一个宏包都 不调用。一切视自己需求。 A 用命令行操作 L TEX1.3A 相信你看到这里已经急不可耐地想要写一个 L TEX 源代码试一试了。我们这就给一个最小 的例子,见源代码 1.1。有相当多的编辑器会提供一个按钮完成编译,不过笔者仍然觉得有必要了解一下其背后的A 工作原理。 L TEX 调用的程序都是基于命令行的, 所以建议打开 Windows 命令提示符或者 Linux/ OS X 的终端,按照本手册的范例尝试一下调用命令行程序编译。 4第一章A L TEX 须知\documentclass{article} \begin{document} ‘‘Hello world!’’ from \LaTeX. \end{document}A 源代码 1.1: L TEX 的一个最简单的源代码示例。1.3.1引擎、格式和命令在开始示例编译过程之前,有必要澄清几个概念: 引擎 全称为排版引擎,是读入源代码并编译生成文档的程序,如 pdfTEX、XETEX 等。有时也 直接称为编译器。A 格式 是定义了一组命令的代码集。L TEX 就是最广泛应用的一个格式,高德纳本人还编写了一个简单的 plain TEX 格式,没有定义诸如 \documentclass 和 \section 等等命令。A 命令 是引擎和格式二者的结合体。 如下文要用到的 pdflatex 命令是结合 pdfTEX 引擎和 L TEX格式的一个命令,用于编译类似源代码 1.1 的代码并输出 PDF。A A latex 命令和 L TEX 格式往往容易混淆,在同他人讨论关于 L TEX 的时候需要明确。本手 A 册为避免混淆,文中的 L TEX 一律指的是格式,命令则用等宽字体 latex 表示。用一个简单的表格总结一下: plain TEX 格式 tex etex pdftex XETEX 引擎 xetexA L TEX 格式TEX 引擎 pdfTEX 引擎N/A latex2 pdflatex xelatex1.3.2latex 命令A 。 假使你的计算机上已经安装了 L TEX 依赖的程序和工具(安装方法在附录 A 有简单介绍) 我们将源代码 1.1 拷贝到一个文本文件中,保存为 helloworld.tex。然后在命令行输入:latex helloworld.tex (也可以输入不带扩展名的 latex helloworld) 。 此时命令行界面会闪过许多信息。如果一切正常,再行检查目录,会发现生成了 helloworld.dvi 以及其它文件。这个扩展名为 DVI 的文件就是编译输出的文档。 Linux 下可以使用命令行程序 xdvi 打开这个文件: xdvi helloworld.dvi Windows 下大多预装了 yap 软件(MikTEX) 或 dviout 软件(TEX Live) ,可以双击 helloworld.dvi 打开它。 要进一步生成现今流行的 PDF 文档格式,我们还需要用额外的命令将 DVI 转为 PDF: dvipdfmx helloworld.dvi 然后就可以用查看 PDF 的软件(Adobe Reader / Foxit Reader 等)打开生成的 helloworld.pdf 查看了。2 现今的发行版中 A latex 命令也用 pdfTEX 引擎结合 L TEX 格式,输出扩展名为 DVI 的文档。 §1.4宏包和文档类51.3.3pdflatex 和 xelatex 命令这两个命令相比于 latex 命令更为方便,我们可以直接生成 PDF: pdflatex helloworld.tex 或者 xelatex helloworld.texA xelatex 命令(有时写作 XEL TEX)有着各种新的特性,如能够直接支持使用系统预装的字 体、原生支持 UTF-8 编码等。尤其是排版中文,xelatex 命令配合适当的宏包是现在最新、最方便的方式(详见 2.2 节) 。1.4们。宏包和文档类A 我们在 1.2.2 小节描述的 L TEX 源代码架构中已经见识了宏包和文档类。本节将仔细解释它1.4.1文档类A 文档类规定了 L TEX 源代码所要生成的文档的性质――普通文章、书籍、演示文稿、个人 A 简历等等。L TEX 源代码的开头须用 \documentclass 指定文档类:\documentclass[?options ?]{?class-name ?}A 其中 ?class-name ? 为文档类的名称,如 L TEX 提供的 article, book, report,在其基础上派 生的一些文档类如支持中文排版的 ctexart / ctexbook / ctexrep,或者有其它功能的一些文档类, A 如 moderncv / beamer 等。L TEX 提供的基础文档类见表 1.1,前三个习惯上称为“标准文档类” 。A 表 1.1: L TEX 提供的基础文档类article 文章格式的文档类,广泛用于科技论文、报告、说明文档等。 report 长篇报告格式的文档类,具有章节结构,用于综述、长篇论文、简单的书籍等。 book 书籍文档类,包含章节结构和前言、正文、后记等结构。 proc 基于 article 文档类的一个简单的学术文档模板。 slides 幻灯格式的文档类,使用无衬线字体。 minimal 一个极其精简的文档类,只设定了纸张大小和字号,用作代码测试的最小工作示例 (Minimal Working Example) 。可选参数 ?options ? 为文档类指定选项,以全局地影响文档布局的参数,如字号、纸张大小、A 单双面等等。L TEX 的三个标准文档类可指定的选项见表 1.2。比如调用 article 文档类排版文章,指定纸张为 A4 大小,基本字号为 11pt,双面排版: \documentclass[11pt,twoside,a4paper]{article} 6第一章A L TEX 须知A 表 1.2: L TEX 的三个标准文档类可指定的选项10pt, 11pt, 12pt指定文档的基本字号。缺省为 10pt。 指定纸张大小,默认为美式纸张 letterpaper。可指定选项还a4paper, letterpaper, . . .包括 a5paper,b5paper,executivepaper 和 legalpaper。 fleqn leqno 令行间公式左对齐(缺省为居中) 。 将公式编号放在左边(缺省为右边) 。titlepage, notitlepage 指定标题命令 \maketitle 是否单独成页。article 缺省为 notitlepage,report 和 book 缺省为 titlepage。 onecolumn, twocolumn twoside, oneside 指定单栏/双栏排版。指定单面/双面排版。双面排版时,奇偶页的页眉页脚、页边距不同。article 和 report 缺省为单面排版,book 缺省为双面。 landscape 指定横向排版。缺省为纵向。 指定新的一章 \chapter 是在奇数页(右侧)开头,还是直接紧跟着上openright, openany一页开头。report 缺省为 openany,book 缺省为 openright。 【对 article 无效】1.4.2宏包A A 在编写 L TEX 源代码时,你时常会发现 L TEX 的基础功能不能满足你的需求,比如排版复 A 杂的表格、插入图片、增加颜色甚至超链接等等。这时你需要依赖一些扩展来增强或补充 L TEX的功能。这些扩展称为宏包。调用宏包的方法非常类似调用文档类的方法: \usepackage[?options ?]{?package-name ?} \usepackage 的参数里可以使用不止一个宏包,多个宏包用逗号隔开。这种用法一般不要指 定选项3 : % 一次性载入三个排版表格常用的宏包 \usepackage{tabularx,longtable,multirow} 附录 B.3 汇总了常用的一些宏包。我们在手册接下来的章节中,也会穿插介绍一些最常用 的宏包的使用方法。 在使用宏包和文档类之前,一定要首先确认它们是否安装在你的计算机中,否则 \usepackage 等命令会报错误。详见附录 A.2 。A 每个宏包(包括前面所说的文档类)都定义了许多命令和环境,或者修改了 L TEX 已有的命令和环境。为了明白它们的用法,需要查阅宏包和文档类的帮助手册。使用方法是在 Windows 命令提示符或者 Linux 终端下输入命令: texdoc ?pkg-name ? 其中 ?pkg-name ? 是宏包或者文档类的名称。更多获得帮助的方法见附录 B.2。3 使用多个宏包时指定选项,相当于给每个宏包指定同样的选项。如果有某个宏包不能识别某个选项,则会出错。 §1.5A L TEX 用到的文件一览7 A L TEX 用到的文件一览1.5一下这些文件。除了我们需要编写的源代码 .tex 文件,我们还可能接触到形形色色的文件。本节简单介绍A 每个宏包和文档类都是带特定扩展名的文件,除此之外也有一些文件出现于 L TEX 模板中:.sty 宏包文件。宏包的名称就是去掉扩展名的文件名。 .cls 文档类文件。同样地,文档类名称就是文件名。 .bib BIBTEX 参考文献数据库文件。 .bst BIBTEX 用到的参考文献格式模板。详见 6.1.3 小节。A L TEX 在编译过程中生成相当多的辅助文件和日志。一些功能如交叉引用、参考文献、目录、索引等,需要先编译生成辅助文件,然后再次编译时读入辅助文件得到正确的结果,所以复杂的A L TEX 源代码可能要编译多次:.log 排版引擎生成的日志文件,供排查错误使用。A .aux L TEX 生成的主辅助文件,记录交叉引用、目录、参考文献的引用等。 A .toc L TEX 生成的目录记录文件。 A .lof L TEX 生成的图片目录记录文件。 A .lot L TEX 生成的表格目录记录文件。.bbl BIBTEX 生成的参考文献记录文件。 .blg BIBTEX 生成的日志文件。A .idx L TEX 生成的供 makeindex 处理的索引记录文件。.ind makeindex 处理 .idx 生成的格式化索引记录文件。 .ilg makeindex 生成的日志文件。 .out hyperref 宏包生成的 PDF 书签记录文件。1.6文件的组织方式A 当编写较大规模的 L TEX 源代码,如书籍、毕业论文等,你有理由将源代码分成若干个文件而不是写到一堆,比如很自然地每章写一个文件,可参考源代码 3.1 的写法。A L TEX 提供了命令 \include 用来在源代码里插入文件:\include{??lename ?} ??lename ? 为文件名,如果和要编译的主文件不在一个目录中,则要加上相对或绝对路径,例如: \include{chapters/a.tex} % 相对路径 \include{/home/Bob/file.tex} % Linux 绝对路径 \include{D:/file.tex} % Windows 绝对路径 8第一章 ??lename ? 可以不带扩展名,此时默认为 .tex;其它文件必须带扩展名。A L TEX 须知值得注意的是 \include 在读入 ??lename ? 之前会另起一页。有的时候我们并不需要这样, 而是用 \input 命令,它纯粹是把文件里的内容插入: \input{??lename ?}A 另外 L TEX 提供了一个 \includeonly 命令来组织文件,用于导言区,指定只载入某些文件: \includeonly{??lename1 ?,??lename2 ?,...} 导言区使用了 \includeonly 后,正文中不在其列表范围的 \include 命令不会起效。 最后介绍一个实用的工具宏包 syntonly。加载这个宏包后,在导言区使用 \syntaxonly 命A 令,可令 L TEX 编译后不生成 DVI 或者 PDF 文档,只排查错误,编译速度会快不少:\usepackage{syntonly} \syntaxonly 如果想生成文档,则将 \syntaxonly 命令那一行用 % 注释掉即可。 第二章A 用L TEX 排版文字A 文字是排版的基础。在介绍 L TEX 支持的各种文档元素之前,首先应当了解一下如 A 何在 L TEX 源代码中输入并排版文字,尤其是(西文中的)标点符号、连字符、重音等一些细节。A 本文的开头首先介绍了中文的支持方式。随着 L TEX 和底层 TEX 引擎的发展,旧 方式(CCT、CJK 宏包等)日渐退出舞台,xelatex 编译命令配合 xeCJK 宏包的方式成为主流。2.1篇幅介绍一下。语言文字和编码A L TEX 源代码为文本文件,而文本文件的一个至关重要的性质是它的编码。在此用尽量短的2.1.1ASCII 编码计算机的基本存储单位是字节 (byte) , 每个字节为八位 (8-bit) , 范围用十六进制写作 0x000xFF。ASCII (美国通用信息交换码)使用 0x00-0x7F 对文字编码,也就是 7-bit,能够表示 QWERTY 键盘上能够输入的拉丁字母、数字和符号。 由于 TEX 最初面向英语文档的排版,ASCII 编码完全够用,而早期版本的 TEX 也只支持 7-bit 和 ASCII。 要排版西欧语系中带重音的字符, 就必须用到后文所叙述的重音命令, 如 M?bius 必须输入 M\&obius。2.1.2扩展编码在 ASCII 之后, 各种语言文字都发展了自己的编码, 比如西欧语言的 Latin-1, 日本的 ShiftJIS,中国大陆的 GB2312-80 和 GBK 等。它们之中的绝大多数都向下兼容 ASCII,因此无论是A 在哪种编码下,TEX 以及 L TEX 的命令和符号都能用。 现在的 TEX 程序支持 8-bit,能够识别源代码里编码处于 0x80-0xFF 范围的字符。西欧(拉丁字母) 、俄语系(西里尔字母)等语言的编码方案刚好能够利用 0x80-0xFF 这个范围,处理起 来较为方便。latex 命令及 pdflatex 命令下,这些编码的处理由 inputenc 宏包支持。比如将源 代码保存为 Latin-1 编码,并在导言区使用: \usepackage[latin1]{inputenc} 接下来,M?bius 就直接可以通过(用适当输入法)输入 M?bius 得到了。其它一些语言也 可以使用 inputenc 宏包配合 babel 宏包排版。 GBK 等编码是多字节编码,ASCII 字符为一个字节,汉字等非 ASCII 字符为两个字节,这 就需要借助一些宏包进行较为复杂的判断和处理。CJK 宏包就是用于处理中、日、韩等多字节编9 10第二章A 用L TEX 排版文字码的语言文字的宏包。但 CJK 宏包的使用非常不方便,笔者不再推荐直接使用。后一节将简单 介绍现在推荐的中文支持方案。2.1.3UTF-8 编码Unicode 是一个多国字符的集合,覆盖了几乎全球范围内的语言文字。UTF-8 是 Unicode 的一套编码方案,一个字符可以由一个到四个(现在用到三个)字节编码,其中单字节字符兼容 ASCII 编码。 latex 命令及 pdflatex 命令下可以使用 inputenc 宏包支持 UTF-8: \usepackage[utf8]{inputenc} xelatex 命令原生支持 UTF-8 编码,而且也不适用 inputenc 宏包。将 .tex 源代码保存为 UTF-8 编码,并借助 fontspec 宏包(见 5.1.5 小节)调用适当的字体,就可以在源代码中输入 任意语言的文字。但各个语言(印地语、阿拉伯语等)的特殊排版要求需要更多的宏包支持,如 babel、polyglossia 等。2.22.2.1 xeCJK 宏包排版中文A 用L TEX 排版中文的一大门槛是中文字体。TEX 使用的字体格式仅支持不超过 256 个字符,要想排版中文,比如旧式的 CJK 宏包,往往需要复杂的预处理,将中文字体拆分成数百个小字 体,非常麻烦1 。 xelatex 命令支持直接使用系统安装的 TrueType (.ttf) / OpenType(.otf) 等格式的字 体,加上对 UTF-8 编码的原生支持,免去了预处理字体的麻烦。在此基础上的 xeCJK 宏包更进 一步完善了排版中文的一些细节,比如中英文之间插入空隙、中文行尾的回车不引入空格、标点 符号不出现在行首,等等。 xeCJK 宏包支持用简单的命令配置中文字体。举一个在 Windows 下使用 xeCJK 的例子(设 ,源代码须保存为 UTF-8 编码,并使用 xelatex 命令编译: 置字体的命令详见 5.1.6 小节) \documentclass{article} \usepackage{xeCJK} \setCJKmainfont{SimSun} \begin{document} 中文LaTeX排版。 \end{document}2.2.2ctex 宏包和文档类ctex 宏包和文档类是对 CJK 和 xeCJK 等宏包的进一步封装。ctex 文档类包括 ctexart /A A ctexrep / ctexbook,是对 L TEX 的三个标准文档类的封装,对 L TEX 的排版样式做了许多调整,以切合中文排版风格。最新版本的 ctex 宏包/文档类甚至支持自动配置字体。比如上述例子可进 一步简化为:1 现在的pdflatex 以及 latex + dvipdfmx 命令通过字体映射的方式支持直接使用中文字体,不需要经过预处理,但仍然是不方便新手操作的。 §2.3A L TEX 中的符号11\documentclass{ctexart} \begin{document} 中文LaTeX排版。 \end{document} ctex 宏包/文档类支持源代码保存为 UTF-8 和 GBK 编码2 ,用 latex + dvipdfmx 命令、 pdflatex 或 xelatex 命令(只支持 UTF-8 编码)都能够编译。笔者建议在使用 ctex 宏包和文 档类时总是将源代码保存为 UTF-8 编码,用 xelatex 命令编译。 A L TEX 中的符号2.32.3.1 空格和分段A L TEX 源代码中,空格键和 Tab 键输入的空白字符视为“空格” 。连续的若干个空白字符视为一个空格。一行开头的空格忽略不计。 行末的回车视为一个空格;但连续两个回车,也就是空行,会将文字分段。多个空行被视为 一个空行。也可以在行末使用 \par 命令分段:Several spaces equal one.Front spaces are ignored. An empty line starts a new paragraph.\par A \verb|\par| command also starts a new line.Several spaces equal one. Front spaces are ignored. An empty line starts a new paragraph. A \par command also starts a new line.2.3.2注释A L TEX 用 % 字符作为注释。在这个字符之后直到行末,所有的字符都被忽略,连同回车引入的空格。我们需要注意以下示例中“回车引入的空格被忽略”的效果:This is an % short comment % --% Long and organized % comments % --example: Comments do not bre% ak a word.This is an example: break a word.Comments do not2.3.3特殊字符A 以下字符在 L TEX 里有特殊用途,如 % 表示注释,$、^、_ 等用于排版数学公式,& 用于排 版表格,等等。直接输入这些字符得不到对应的符号,还往往会出错:# $ % & { } _ ^ ~ \ 如果想要输入以上符号,需要使用以下带反斜线的形式输入:2 使用GBK 编码时,要为文档类指定 GBK 选项。详见 ctex 宏包手册。 12第二章A 用L TEX 排版文字\# \$ \% \& \{ \} \_ \^{} \~{} \textbackslashA 事实上这些带反斜线的形式就是 L TEX 命令。\^ 和 \~ 两个命令是需要带参数的,如果不 加一对花括号(空参数) ,就将后面的字符作为参数,形成重音效果(详见 2.3.5 节) 。\\ 被直接#$%&{}_??\定义成了手动换行的命令,输入反斜杠就只好用 \textbackslash。2.3.4标点符号中文的标点符号(都是全角的非 ASCII 字符)一般来讲不用特别操心,只要使用中文输入 法输入即可。而在英文标点的输入上,有许多需要留意的地方。 引号A L TEX 的单引号 ‘ ’ 用 ‘ 和 ’ 输入;双引号 “ ” 用 ‘‘ 和 ’’ 输入(虽然 & 也能表示双引号,但没有合适的单个符号用来表示前双引号,所以不常用在正文) 。‘‘Please press the ‘x’ key.’’“Please press the ‘x’ key.”连字号和破折号A L TEX 中有三种长度的“横线”可用:连字号、短破折号(en-dash)和长破折号(em-dash) 。它们分别有不同的用途:连字号 - 用来组成复合词;短破折号 C 将数字连接表示范围;长破折号 ― 作为破折号使用。daughter-in-law, X-rated\\ pages 13--67\\ yes---or no?daughter-in-law, X-rated pages 13C67 yes―or no?省略号A L TEX 提供了命令 \ldots 来生成省略号,相对于直接输入三个点的方式更为合理。\ldots和 \dots 是两个等效的命令。one, two, three, \ldots one hundred.one, two, three, . . . one hundred.波浪号 我们在 2.3.3 小节中了解了 \~ 命令,它可以用来输入波浪号,但位置靠顶端,可能不甚理 想。有的人可能喜欢用数学公式里的 \sim 符号来代替:a\~{}z \qquad a$\sim$za?za ?z更合理的波浪号请参考 5.1.4 小节讨论的内容。有的时候,使用中文的全角波浪号也不失为 一个办法(西文中使用波浪号的情形较少见) 。 §2.4文字强调132.3.5特殊西文符号与重音A L TEX 支持用命令输入各种西欧语言的特殊符号和重音:H\^otel, na\&\i ve, \’el\‘eve,\\ sm\o rrebr\o d, !‘Se\ norita!,\\ Sch\&onbrunner Schlo\ss{} Stra\ss eH?tel, na?ve, élève, sm?rrebr?d, ?Se norita!, Sch?nbrunner Schlo? Stra?e更多可用的符号和重音见表 2.1。注意这些重音符号不可和与之相似的数学重音混用。A 表 2.1: L TEX 文本中的重音和特殊字符。ò ? o ? o o . ? ? ? ?\‘o \=o \u o \d o \oe \aa \o \ió o B o ˇ o ? ? ? ? ?\’o \.o \v o \b o \OE \AA \O \j? ? ? oo ?\^o \&o \H o \t{oo} \ae? ? o ?\~o \c c \c o?\AE? ?\l !‘? ?\L ?‘前四行实际上都是命令带一个参数的写法,实际上 \^o 也可以写作 \^{o},以此类推。2.3.6其它符号A L TEX 预定义了其它一些文本模式的符号,部分符号可参考表 4.4。\P{} \S{} \dag{} \ddag{} \copyright{} \pounds{}?§????\textasteriskcentered \textperiodcentered \textbullet \textregistered{} \texttrademark??? ??更多的符号多由特定的宏包支持。参考文献 [15] 搜集了所有在 TEX 发行版中可用的符号, 使用时要留意每个符号所依赖的宏包。2.3.7A L TEX 标志A 我们见到的所有错落有致的 L TEX 标志都是由以下命令输入的:TEX\TeXA L TEX\LaTeXA L TEX 2ε\LaTeXe2.4文字强调强调文字的方法,要么是添加一些下划线或者装饰物,要么是改变文字的字体。 14A L TEX 定义了 \underline 命令用来为文字添加下划线:第二章A 用L TEX 排版文字An \underline{underlined} text.An underlined text.\underline 命令生成下划线的样式比较机械,不同的单词可能生成高低各异的下划线,并 且无法换行。ulem 宏包解决了这一问题,它提供的 \uline 命令能够轻松生成自动换行的下划 线:An example of \uline{some long and underlined words.}An example of some long and underlined words.\emph 命令用来将文字变为斜体以示强调。如果在本身已经用 \emph 命令强调的文字内部 嵌套使用 \emph,内部则使用正常字体的文字:Some \emph{emphasized words, including \emph{double-emphasized} words}, are shown here.Some emphasized words, including doubleemphasized words, are shown here.如果需要用其它字体表示强调,可参考后文的 5.1.1 小节。2.5断行和断页A L TEX 将一个段落的文档在合适的位置进行断行,尽可能做到每行的宽度一致,并且单词间距匀称。文字段落和公式、图表等内容顺序排布,并在合适的位置断页,分割成匀称的页面。在 绝大多数时候,我们无需自己操心断行和断页。但偶尔会遇到需要手工调整的地方。2.5.1单词间距和断行通常情况下,断行的位置尽可能选取在两个单词之间,也就是你输入到源文件中的“空格” 。 没有断开的单词间位置则插入一小段间距,间距是根据行宽和文字自动调整的,文字密一些的地 方,单词间距就略窄,反之略宽。 我们可以使用字符 ~ 在合适的位置插入一个空格,并且这个空格不能被断开,通常用在英 文人名、图表名称等场景:Fig.~2a \\ Donale~E. KnuthFig. 2a Donale E. Knuth2.5.2手动断行和断页如果我们确实需要手动断行,可使用如下命令: \\ or \newline\\ 也在表格、公式等地方用于分行,而 \newline 只用于文本段落中。 断页的命令有两个: \newpage or \clearpage通常情况下两个命令都能起到另起一页的作用, 但有一些区别: 一是在双栏排版中 \newpage 只起到另起一栏的作用;二是涉及到浮动体的排版上行为不同。后文的 3.9 节以及 5.3.3 小节会 更详细地介绍相关内容。A 有时候我们不满足于 L TEX 默认的断行和断页位置,需要进行微调,就要用以下命令告诉 A L TEX 哪些地方适合断页,哪些地方不适合: §2.5断行和断页15\linebreak[?n ?] \pagebreak[?n ?]\nolinebreak[?n ?] \nopagebreak[?n ?]以上命令都带一个可选参数,用数字 ?n ? 代表适合/不适合的程度,取值范围为 0-4,不带 可选参数时,缺省为 4。比如 \linebreak[3] 意味着此处在断行时优先考虑;\nopagebreak 或 \nopagebreak[4] 意味着禁止在此处断页。 以上命令适合给出优先考虑断行断页/禁止断行断页的位置,但不适合直接拿来断行或断页, 使用 \newline 或 \newpage 等是更好的选择3 。2.5.3断词A 如果 L TEX 遇到了很长的英文单词, 仅在单词之间的位置断行无法生成宽度匀称的行时, 就 A 要考虑从单词中间断开。对于绝大部分单词,L TEX 能够找到合适的断词位置,在断开的行尾加上连字符 -。 如果一些单词没能自动断词,我们可以在单词内手动使用 \- 命令指定断词的位置:I think this is: su\-per\-cal\-% i\-frag\-i\-lis\-tic\-ex\-pi\-% al\-i\-do\-cious.I think this is: supercalifragilisticexpialidocious.3 \newline和 \newpage 会在断行/断页位置正确添加空白,但 \linebreak 和 \pagebreak 不能,它们的强行断A 行/断页会导致 L TEX 报 Underfull \hbox 等警告。
第三章文档元素在知道了如何输入文字后,我们将在本章了解一个结构化的文档所依赖的各种元 素――章节、目录、列表、图表、交叉引用、脚注等等。3.13.1.1 章节标题章节和目录A 一篇结构化的、 条理清晰文档一定是层次分明的, 通过不同的命令分割为章、 节、 小节。 L TEX的三个标准文档类 article、report 和 book1 提供了一系列命令,用以划分章节、生成章节标题并 自动编号: \section{?title ?} \paragraph{?title ?} \subsection{?title ?} \subsubsection{?title ?}\subparagraph{?title ?}\part 命令用以将整个文档分割为大的分块,但不影响 \section 等的编号: \part{?title ?} book 和 report 提供了章一级的结构: \chapter{?title ?} 上述命令除了生成带编号的标题之外,还向目录中添加条目,并影响页眉页脚的内容(详见 5.4 节) 。每个命令有两种变体: ? 带可选参数的变体:\section[?short title ?]{?title ?} 标题使用 ?title ? 参数,在目录和页眉页脚中使用 ?short title ? 参数; ? 带星号的变体:\section*{?title ?} 标题不带编号,也不生成目录项和页眉页脚。A L TEX 并未提供为 \section 等章节命令定制格式的功能, 这一功能由 titlesec 宏包提供。 详情请参考宏包的帮助手册。3.1.2目录A 在L TEX 中生成目录非常容易,只需在合适的地方使用命令:\tableofcontents1 千万注意是标准文档类,其它文档类可能没有定义或只定义了一部分,如beamer 或 moderncv 等。17 18 正确生成目录项,一般需要多次编译源代码。第三章文档元素有时我们使用了 \chapter* 或 \section* 这样不生成目录项的命令,而又想手动生成该章 节的目录,可以在标题命令后面使用: \addcontentsline{toc}{?level ?}{?title ?} 其中 ?level ? 为章节层次 chapter 或 section 等,?title ? 为需要生成目录项的章节标题。3.1.3文档结构的划分所有标准文档类都提供了一个 \appendix 命令将正文和附录分开2 ,使用 \appendix 后,最 高一级章节改为使用拉丁字母编号,从 A 开始。 book 文档类还提供了前言、正文、后记结构的划分命令: \frontmatter 前言部分,页码为小写罗马字母格式;其后的章节不编号(但生成页眉页脚和目 录项) 。 \mainmatter 正文部分,页码改回数字格式,并从 1 开始计数;其后的章节正常编号。 \backmatter 后记部分, 页码继续正常计数, 格式不变; 其后的章节不编号, 类似 \frontmatter 命令。 以上三个命令还可和 \appendix 命令结合,生成有前言、正文、附录、后记四部分的文档。 源代码 3.1 结合 1.6 节的 \include 命令和其它一些命令示意了一份完整的文档结构。3.2标题页A L TEX 支持生成简单的标题页。首先需要给定标题和作者等信息:\title{?title ?}\author{?author ?}\date{?date ?}A 其中前两个命令是必须的,\date 命令可选。L TEX 还提供了一个 \today 命令自动生成当前日期,可用在 \date 的参数里,或者别的地方。 在 \title、\author 等命令内可以使用 \thanks 命令生成标题页的脚注,如: \author{Mary\thanks{E-mail:*****@***.com}} 在信息给定后,就可以使用 \maketitle 生成一个简单的标题页了。article 文档类的标题默认不单独成页,而 report 和 book 默认单独成 页。可在 \documentclass 命令中指定 titlepage / notitlepage 选项修改。3.3式、图表、定理等位置使用 \label 命令: \label{?label-name ?}2 有的地方可能写作交叉引用A 交叉引用是 L TEX 强大的自动排版功能的体现之一。在能够被交叉引用的地方,如章节、公\begin {appendix} . . . \end {appendix} 这样,虽然有效,但并不规范,只要使用 \appendix命令就够了。 §3.3交叉引用19\documentclass[...]{book} % 导言区,加载宏包和各项设置 \usepackage{...} % 此处示意对参考文献和索引的设置 \usepackage{makeidx} \makeindex \bibliographystyle{...} \begin{document} \frontmatter \maketitle % 标题页 \include{preface} % 前言章节 preface.tex \tableofcontents \mainmatter \include{chapter1} % 第一章 chapter1.tex \include{chapter2} % 第二章 chapter2.tex ... \appendix \include{appendixA} % 附录 A appendixA.tex ... \backmatter \include{prologue} % 后记 prologue.tex \bibliography{...} % 利用 BibTeX 工具生成参考文献 \printindex \end{document} % 利用 makeindex 工具生成索引源代码 3.1: book 文档类的文档结构示例。 20第三章 之后可以在别处使用 \ref 或 \pageref 命令,分别生成交叉引用的编号和页码: \ref{?label-name ?} \pageref{?label-name ?}文档元素A reference to this subsection \label{sec:this} looks like: ‘‘see section~\ref{sec:this} on page~\pageref{sec:this}.’’A reference to this subsection looks like: “see section 3.3 on page 20.”为了生成正确的交叉引用,一般也需要多次编译源代码。 \label 命令可用于记录各种类型的交叉引用,使用位置分别为: 章节标题 在章节标题命令 \section 等之后紧接着使用。 行间公式 单行公式在公式内任意位置使用;多行公式在每一行公式的任意位置使用。 有序列表 在 enumerate 环境的每个 \item 命令之后、下一个 \item 命令之前任意位置使用。 图表标题 在图表标题命令 \caption 之后紧接着使用。 定理环境 在定理环境内部任意位置使用。 在使用不记编号的命令形式(\section*、\caption*、带可选参数的 \item 命令等)时不 要使用 \label 命令,否则生成的引用编号不正确。3.4脚注使用 \footnote 命令可以在页面底部生成一个脚注: \footnote{?footnote ?} 假如我们输入以下文字和命令: “天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。”\footnote{语出《千字文》。} 在正文中则为: “天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。 ”3 有些情况下(比如在表格环境、盒子内)使用 \footnote 并不能正确生成脚注。我们可以分 两步进行,先使用 \footnotemark 为脚注计数,再在合适的位置用 \footnotetext 生成脚注。3.53.5.1 列表特殊环境A L TEX 提供了基本的有序和无序列表环境 enumerate 和 itemize,两者的用法很类似,都用 \item 标明每个列表项。enumerate 环境会自动对列表项编号。 \begin{enumerate} \item . . . \end{enumerate}3 语出《千字文》 。 §3.5特殊环境21其中 \item 可带一个可选参数,将有序列表的计数或者无序列表的符号替换成自定义的符 号。列表可以嵌套使用,最多嵌套四层。\begin{enumerate} \item An item. \begin{enumerate} \item A nested item. \item[*] A starred item. \item Another item. \label{itref} \end{enumerate} \item Go back to upper level. \item Reference(\ref{itref}). \end{enumerate}1. An item. (a) A nested item. * A starred item. (b) Another item. 2. Go back to upper level. 3. Reference(1b).\begin{itemize} \item An item. \begin{itemize} \item A nested item. \item[+] A ‘plus’ item. \item Another item. \end{itemize} \item Go back to upper level. \end{itemize}? An item. C A nested item. + A ‘plus’ item. C Another item. ? Go back to upper level.关键字环境 description 的用法与以上两者类似,不同的是 \item 后的可选参数用来写关 键字,以粗体显示,一般是必填的: \begin{description} \item[?item title ?] . . . \end{description}\begin{description} \item[Enumerate] Numbered list. \item[Itemize] Non-numbered list. \end{description}A 默认的列表间距比较宽,L TEX 本身也未提供方便的定制功能,而要用到 enumitem 宏包。Enumerate Numbered list. Itemize Non-numbered list.有兴趣的读者可参考其帮助手册。3.5.2对齐环境center、flushleft 和 flushright 环境分别用于生成居中、左对齐和右对齐的文本环境。 \begin{center} . . . \end{center} 22第三章文档元素\begin{center} Centered text using a \verb|center| environment. \end{center} \begin{flushleft} Left-aligned text using a \verb|flushleft| environment. \end{flushleft} \begin{flushright} Right-aligned text using a \verb|flushright| environment. \end{flushright}Centered text using a center environment. Left-aligned text using a flushleft environment. Right-aligned text using a flushright environment.除此之外,还可以用以下命令直接改变文字的对齐方式: \centering\centering Centered text paragraph.\raggedright\raggedleftCentered text paragraph.\raggedright Left-aligned text paragraph. \raggedleft Right-aligned text paragraph.Left-aligned text paragraph. Right-aligned text paragraph.三个命令和对应的环境经常被误用,有直接用所谓 \flushleft 命令或者 raggedright 环 境的,都是不合理的用法(即使它们可能有效) 。有一点可以将两者区分开来:center 等环境会 在上下文产生一个额外间距,而 \centering 等命令不产生,只是改变对齐方式。比如在浮动体 环境 table 或 figure 内实现居中对齐,用 \centering 命令即可,没必要再用 center 环境。3.5.3引用环境A L TEX 提供了两种引用的环境:quote 用于引用较短的文字,首行不缩进;quotation 用于引用若干段文字,首行缩进。引用环境较一般文字有额外的左右缩进。Francis Bacon says: \begin{quote} Knowledge is power. \end{quote} 《木兰诗》: \begin{quotation} 万里赴戎机,关山度若飞。 朔气传金柝,寒光照铁衣。 将军百战死,壮士十年归。 归来见天子,天子坐明堂。 策勋十二转,赏赐百千强。…… \end{quotation}Francis Bacon says: Knowledge is power.《木兰诗》 : 万里赴戎机,关山度若飞。 朔气传金柝,寒光照铁衣。将军 百战死,壮士十年归。 归来见天子,天子坐明堂。 策勋十二转,赏赐百千强。 …… §3.5特殊环境23verse 用于排版诗歌,与 quotation 恰好相反,verse 是首行悬挂缩进的。Rabindranath Tagore’s short poem: \begin{verse} Beauty is truth’s smile when she beholds her own face in a perfect mirror. \end{verse}Rabindranath Tagore’s short poem: Beauty is truth’s smile when she beholds her own face in a perfect mirror.3.5.4摘要环境摘要环境 abstract 只在 article 和 report 文档类可用,一般用于紧跟 \maketitle 命令之 后介绍文档的摘要。如果文档类给定了 titlepage 选项,则单独成页;反之相当于一个小标题 加一个 quotation 环境(双栏下相当于 \section* 定义的一节) 。3.5.5代码环境有时我们需要将一段代码原样转义输出,这就要用到代码环境 verbatim,它以等宽字体排 版代码,回车和空格也分别起到换行和空位的作用;带星号的版本更进一步将空格显示成 ?。\begin{verbatim} #include &iostream& int main() { std::cout && ’Hello, world’ && std:: return 0; } \end{verbatim}#include &iostream& int main() { std::cout && ’Hello, world’ && std:: return 0; }\begin{verbatim*} for (int i=0; i&4; ++i) printf(’Number %d’,i); \end{verbatim*}for?(int?i=0;?i&4;?++i) ??printf(’Number?%d’,i);要排版简短的代码或关键字,可使用 \verb 命令: \verb?delim ??code ??delim ? ?delim ? 标明代码的分界位置,不能是字母、空格或星号,前后必须一致,可任意选择使得 不与代码本身冲突,习惯上使用 | 符号。 同 verbatim 环境,\verb 后也可以带一个星号,以显示空格:\verb|\LaTeX| \\ \verb+(a || b)+ \verb*+(a || b)+\LaTeX (a || b) (a?||?b)\verb 命令对符号的处理比较复杂,一般不能用在其它命令的参数里,否则多半会出错。 verbatim 宏包优化了 verbatim 环境的内部命令,并提供了 \verbatiminput 命令用来直接 读入文件生成代码环境。fancyvrb 宏包提供了可定制格式的 Verbatim 环境;listings 宏包更进一 步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。详情请参考各自的 帮助手册。 24第三章文档元素3.6讲,完全能够胜任。 排版表格最基本的 tabular 环境用法为: \begin{tabular}{?column-spec ?} ?item1 ? & ?item2 ? & . . . \\ \hline ?item1 ? & ?item2 ? & . . . \\ \end{tabular}表格A L TEX 里排版表格不如 Word 等所见即所得的工具简便和自由,不过对于不太复杂的表格来其中 ?column-spec ? 是列格式标记,在接下来的内容将仔细介绍;& 用来分隔单元格;\\ 用来换 行;\hline 用来在行与行之间绘制横线。 直接使用 tabular 环境的话,会和周围的文字混排。tabular 环境可带一个可选参数控制 垂直对齐(默认是垂直居中) :\begin{tabular}{|c|} center-\\ aligned \\ \end{tabular}, \begin{tabular}[t]{|c|} top-\\ aligned \\ \end{tabular}, \begin{tabular}[b]{|c|} bottom-\\ aligned\\ \end{tabular} tabulars.centeralignedbottom, topaligned , aligned tabulars.但是通常情况下我们不这么用,tabular 环境一般会放置在 table 浮动体环境中,并用 \caption 命令加标题。3.6.1列格式A L TEX 表格中基本的列格式如下表:列格式 l/c/r p{?width ?} | @{?string ?}说明 单元格内容左对齐/居中/右对齐,不折行 单元格宽度固定为 ?width ?,可自动折行 绘制竖线 自定义内容 ?string ?\begin{tabular}{lcr|p{6em}} \hline left & center & right & par box with fixed width\\ L \hline \end{tabular} & C & R & P \\left Lcenter Cright Rpar box with ?xed width P@ 格式可在单元格前后插入任意的文本,但同时它也消除了单元格前后额外添加的间距。@ 格式可以适当使用以充当“竖线” 。特别地,@{} 可直接用来消除单元格前后的间距: §3.6表格25\begin{tabular}{@{} r@{:}lr @{}} \hline 1 & 1 & one \\1:1 11:3one eleven11 & 3 & eleven \\ \hline \end{tabular}A 另外 L TEX 还提供了简便的将格式参数重复的写法 *{?n ?}{?column-spec ?},比如以下两种 写法是等效的:\begin{tabular}{|c|c|c|c|c|p{4em}|p{4em}|} \begin{tabular}{|*{5}{c|}*{2}{p{4em}|}} 有时需要为整列修饰格式,比如整列改变为粗体,如果每个单元格都加上 \bfseries 命令 会比较麻烦。array 宏包提供了辅助格式 & 和 &,用于给列格式前后加上修饰命令:\begin{tabular}{&{\itshape}r&{*}l} \hline italic & normal \\ column & column \\ \hline \end{tabular}italic* column*normal column辅助格式甚至支持插入 \centering 等命令改变 p 列格式的对齐方式,一般还要加额外的 命令 \arraybackslash 以免出错4 :\begin{tabular} {&{\centering\arraybackslash}p{9em}} \hline Some center-aligned long text. \\ \hline \end{tabular}Some center-aligned long text.3.6.2列宽A 在控制列宽方面,L TEX 表格有着明显的不足:l/c/r 格式的列宽是由文字内容的自然宽度决定的,而 p 格式给定了列宽却不好控制对齐(需要 array 宏包辅助) ,更何况列与列之间通常 还有间距,所以直接生成给定总宽度的表格并不容易。A L TEX 本身提供了 tabular* 环境用来排版定宽表格,但是不太方便使用,比如要用到 @ 格式插入额外命令,令单元格之间的间距为 \fill,但即使这样仍然有瑕疵:\begin{tabular*}{14em}% {@{\extracolsep{\fill}}|c|c|c|c|} \hline A & B & C & D \\ \hline a & b & c & d \\ \hline \end{tabular*}A aB bC cD dtabularx 宏包为我们提供了方便的解决方案。它引入了一个 X 格式,类似 p 格式,不过会根 据表格宽度自动计算列宽,多个 X 格式平均分配列宽。X 格式也可以用 array 里的辅助格式修饰 对齐方式:4 \centering等对齐命令会破坏表格环境里 \\ 换行命令的定义,\arraybackslash 用来恢复之。 26第三章文档元素\begin{tabularx}{14em}% {|*{4}{&{\centering\arraybackslash}X|}} \hline A & B & C & D \\ \hline a & b & c & d \\ \hline \end{tabularx}A aB bC cD d3.6.3横线我们已经在之前的例子见过许多次绘制表格线的 \hline 命令。另外 \cline{?i ?-?j ?} 用来 绘制跨越部分单元格的横线:\begin{tabular}{|c|c|c|} \hline 4 & 9 & 2 \\ \cline{2-3} 3 & 5 & 7 \\ \cline{1-1} 8 & 1 & 6 \\ \hline \end{tabular}4 3 89 5 12 7 6在科技论文排版中广泛应用的表格形式是三线表,形式干净简明。三线表由 booktabs 宏包 支持,它提供了 \toprule、\midrule 和 \bottomrule 命令用以排版三线表的三条线,除此之 外,最好不要用其它横线以及竖线:\begin{tabular}{cccc} \toprule & 1 & 2 & 3 \\ \midrule Alphabet & A & B & C \\ Roman & I & II& III \\ \bottomrule \end{tabular}1 Alphabet Roman A I2 B II3 C III3.6.4合并单元格A L TEX 是一行一行排版表格的,横向合并单元格较为容易,由 \multicolumn 命令实现:\multicolumn{?n ?}{?column-spec ?}{?item ?} 其中 ?n ? 为要合并的列数,?column-spec ? 为合并单元格后的列格式,只允许出现一个 l/c/r 或 p 格式。 如果合并前的单元格前后带表格线 |, 合并后的列格式也要带 | 以使得表格的竖线一致。\begin{tabular}{|c|c|c|} \hline 1 & 2 & Center \\ \hline \multicolumn{2}{|c|}{3} & \multicolumn{1}{r|}{Right} \\ \hline 4 & \multicolumn{2}{c|}{C} \\ \hline \end{tabular}1 3 42Center Right C上面的例子还体现了,形如 \multicolumn{1}{?column-spec ?}{?item ?} 的命令可以用来修 改某一个单元格的列格式。 纵向合并单元格需要用到 multirow 宏包提供的 \multirow 命令: §3.7图片27\multirow{?n ?}{?width ?}{?item ?} ?width ? 为合并后单元格的宽度,可以填 * 以使用自然宽度。 我们看一个结合 \cline、\multicolumn 和 \multirow 命令的例子:\begin{tabular}{ccc} \hline \multirow{2}{*}{Item} & \multicolumn{2}{c}{Value} \\ \cline{2-3} & First & Second \\ \hline A & 1 & 2 \\ \hline \end{tabular}Item AValue First 1 Second 23.6.5行距控制A L TEX 生成的表格看起来通常比较紧凑。修改参数 \arraystretch 可以得到行距更加宽松的表格(相关命令参考 8.1 节) :\renewcommand\arraystretch{1.8} \begin{tabular}{|c|} \hline Really loose \\ \hline tabular rows.\\ \hline \end{tabular}Really loose tabular rows.另一种增加间距的办法是给换行命令 \\ 添加可选参数,在这一行下面加额外的间距,适合 用于在行间不加横线的表格:\begin{tabular}{c} \hline Head lines \\[6pt] tabular lines \\ tabular lines \\ \hline \end{tabular}Head lines tabular lines tabular lines但是这种换行方式的存在导致了一个缺陷――表格的首个单元格不能直接使用中括号 [], 否则 \\ 往往会将下一行的中括号当作自己的可选参数,因而出错。如果要使用中括号,应当放 在花括号 {} 里面。或者也可以选择将换行命令写成 \\[0pt]。3.7图片A L TEX 本身不支持插图功能,需要由 graphicx 宏包辅助支持。使用 latex + dvipdfmx 编译命令时,调用 graphicx 宏包时要给定 dvipdfmx 选项5 ;而使 用 pdflatex 或 xelatex 命令编译时不需要。A 读者可能听说过“L TEX 只能插入 .eps 格式的图片,需要把 .jpg 转成 .eps 格式”的观 A 点。L TEX 发展到今天,这个观点早已过时。事实上不同的编译命令支持的图片格式范围各异,5 早期常使用latex + dvips 组合命令,后者将 .dvi 文件转为 .ps 文件(PostScript) ,可进一步通过 ps2pdf 工A 具生成 PDF。dvips 和 dvipdfmx 在图形、颜色、超链接等功能的实现上有差别,而 L TEX 无法识别用户是用 dvips 还是 dvipdfmx,所以要给定选项(缺省为 dvips) 。6.4 节中的 hyperref 宏包同理。 28第三章文档元素见表 3.1。这个表格也能解答诸如“为什么 .eps 格式图片在 pdflatex 编译命令下出错”之类 的问题。本表格也再一次说明,使用 xelatex 命令是笔者最推荐的方式。 表 3.1: 各种编译方式支持的主流图片格式。 格式 latex + dvipdfmx pdflatex xelatex 矢量图 .eps .pdf .pdf .eps 位图 n/a .jpg .png .bmp .jpg .png .jpg .png .jpg .png .bmp?(调用 bmpsize 宏包) .eps .pdf ?(调用 epstopdf 宏包) .pdf .eps注:在较新的 TEX 发行版中,latex + dvipdfmx 和 pdflatex 命令可不依赖宏包,支持原来需要宏包 扩展的图片格式(但 pdflatex 命令仍不支持除 .jpg 和 .png 以外的位图) 。在调用了 graphicx 宏包以后,就可以使用 \includegraphics 命令加载图片了: \includegraphics[?options ?]{??lename ?} 其中 ??lename ? 为图片文件名,与使用 \include 命令类似,文件名有时需要使用相对路径 或绝对路径(见 1.6 节) 。图片文件的扩展名可写可不写。 另外 graphicx 宏包还提供了 \graphicspath 命令,用于声明一个或多个图片文件存放的目 录,使用这些目录里的图片时可不用写路径: % 假设主要的图片放在 figures 子目录下,标志放在 logo 子目录下 \graphicspath{{figures/}{logo/}} \includegraphics 命令的可选参数 ?options ? 支持 ?key ?=?value ? 形式赋值,常用的选项如 下: 选项 width=?width ? height=?height ? scale=?scale ? angle=?angle ? 含义 将图片缩放到宽度为 ?width ? 将图片缩放到高度为 ?height ? 将图片相对于原尺寸缩放 ?scale ? 倍 令图片逆时针旋转 ?angle ? 度3.8盒子A 盒子是 L TEX 排版的基础单元,虽然解释上去有些抽象:每一行是一个盒子,里面的文字 从左到右依次排列;每一页也是一个盒子,各行文字从上到下依次排布……颇有一些活字印刷术的味道。A 不管如何,L TEX 提供了一些实用的命令让我们生成一些有用的盒子。3.8.1水平盒子生成水平盒子的命令如下: \mbox{...} \makebox[?width ?][?align ?]{...} §3.8盒子29\mbox 生成一个基本的水平盒子,内容只有一行(除非嵌套下文的垂直盒子) ,不允许分段。 外表看上去,\mbox 的内容与正常的文本无二,不过断行时文字不会从盒子里断开。 \makebox 更进一步,可以加上可选参数用于控制盒子的宽度 ?width ?,以及内容的对齐方式 ?align ?,可选居中 c(默认值) 、左对齐 l、右对齐 r 和分散对齐 s6 。|\mbox{Test some words.}|\\ |\makebox[10em]{Test some words.}|\\ |\makebox[10em][l]{Test some words.}|\\ |\makebox[10em][r]{Test some words.}|\\ |\makebox[10em][s]{Test some words.}||Test some words.| | | |Test Test some words. | | |Test some words. someTest some words.| words.|3.8.2带框的水平盒子\fbox 和 \framebox 让我们可以为水平盒子添加边框。使用的语法与 \mbox 和 \makebox 一模一样: \fbox{...} \framebox[?width ?][?align ?]{...}\fbox{Test some words.}\\ \framebox[10em][r]{Test some words.}Test some words. Test some words.可以通过 \setlength 命令 (见 5.2.1 小节) 调节边框的宽度 \fboxrule 和内边距 \fboxsep:\framebox[10em][r]{Test box}\\[1ex] \setlength{\fboxrule}{1.6pt} \setlength{\fboxsep}{1em} \framebox[10em][r]{Test box}Test box Test box3.8.3垂直盒子A 如果需要排版一个文字可以换行的盒子,L TEX 提供了两种方式:\parbox[?align ?][?height ?][?inner-align ?]{?width ?}{...} \begin{minipage}[?align ?][?height ?][?inner-align ?]{?width ?} ... \end{minipage} 其中 ?align ? 为盒子和周围文字的对齐情况(类似 tabular 环境) ;?height ? 和 ?inner-align ? 设置盒子的高度和内容的对齐方式,类似水平盒子 \makebox 的设置,不过 ?inner-align ? 接受的 选项是顶部 t、底部 b、居中 c 和分散对齐 s。三字经:\parbox[t]{3em}% {人之初 性本善 性相近 习相远} \quad 千字文: \begin{minipage}[b][8ex][t]{4em} 天地玄黄 宇宙洪荒 \end{minipage}6 分散对齐方式强行拉开单词的间距,往往会报天地玄黄 三字经:人之初 性本善 性相近 习相远Underfull \hbox 的警告。宇宙洪荒 千字文: 30第三章文档元素如果在 minipage 里使用 \footnote 命令,生成的脚注会出现在盒子底部,编号是独立的, 并且使用小写字母编号。这也是 minipage 环境之被称为“迷你页” (Mini-page)的原因。而在 \parbox 里无法正常使用 \footnote 命令,只能在盒子里使用 \footnotemark,在盒子外使用 \footnotetext。\fbox{\begin{minipage}{10em}% 这是一个垂直盒子的测试。 \footnote{脚注来自 minipage。} \end{minipage}}这是一个垂直盒子的测 试。aa 脚注}

我要回帖

更多关于 文档字符间距 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信