LATEX笔记
记录LATEX的一些知识点.
大部分内容来自中国 CTEX 用户小组译制的一份不太简短的 LATEX 2ε 介绍.
未完待续.
基本知识
LATEX源文件
LATEX 源文件的格式为普通的 ASCII 文件,你可以使用任何文本编辑器来创建。
空白距离
LATEX 将空格和制表符等空白字符视为相同的空白距离(space)。多个连续的空白字符等同为一个空白字符。在 LATEX 文件中,每行开始的空白字符将被忽略,而单个的回车符被视为一空格。
LATEX 使用空行来结束段落,两行文本中的空行标志上一段落的结束和新段落的开始。如同空格一样,多个空行所起的作用和一个空行的作用是相同的。
特殊字符
下面的这些字符是 LATEX 的保留字符:
# $ % ^ & _ { } ~ \
在这些字符(除' \ ')前加上' \ '就可以在文本中得到,而' \ '为断行命令.
命令$\backslash$
将生成 ' \ '。
LATEX命令
LATEX 命令(commands)是大小写敏感的并有下面两种格式:
- 以一反斜线' \ '开始,加上只包含字母字符命令名组成。命令名后的空格符、数字或其它非字母字符标志该命令的结束。
- 由一反斜线和一特殊字符组成。
LATEX
忽略命令后面的空格。如果你希望在命令后面得到一空格,可以在命令后面加上
{} 和一个空格,或者加上一个特殊的空白距离命令。{} 将阻止 LATEX
吞噬掉命令后面的空格。例如: I read that Knuth divides the people working with \TeX{} into \TeX{}nicians and \TeX perts.\\ Today is \today.
得到
I read that Knuth divides the people working with TEX into TEXnicians and EXperts. |
许多命令需要一个参数(parameter)并用一对大括号(curly braces){ }将其括起来置于命令名称的后面。也有一些命令支持用方括号(square brace)括起来的可选参数。
注释
当 LATEX 在处理源文件时,如果遇到一个百分号字符 %,那么 LATEX将忽略 % 后的该行文本,分行符以及下一行开始的空白字符。这样,我们就可以在源文件中写一些注释,而不会担心他们会出现在最后的排版结果中。
This is an % stupid |
得到
This is an example: Supercalifragilisticexpialidocious |
% 也可以用来分割不允许有空格或分行的较长输入文本。
源文件的结构
LATEX 需要所处理的源文件遵从一定的结构,每个 LATEX
文档必须以如下的命令开始: \documentclass{...}
这个命令指定了你所写的文档的类别。在此之后,你可以加入控制文档式
样的命令,或者使用命令 \usepackage{...}
来调入一些宏集,进而为 LATEX 系统增添 一些新的功能。
当完成所有的设置后,你可利用命令\begin{document}
来开始你的文档.\documentclass
和 \begin{document}
之间的区域称作导言区。
现在你可以输入你所希望排版的文本和所使用的一些 LATEX
命令。在文档的最后键入命令\end{document}
来告诉 LATEX
你的文档到此结束,从而使 LATEX忽略文档在此命令之后的部分。
文档布局
文档类
当 LATEX
处理源文件时,首先需要知道的是作者所要创建的文档类型。该信息可以通过命令\documentclass[options]{class}
来提供给
LATEX。例如,一个 LATEX 源文件以下面一行开始:
\documentclass[11pt,twoside,a4paper]{article} |
{class}
可以是: - article
排版科技期刊、短报告、程序文档、邀请函等。 - report
排版多章节的长报告、短篇的书籍、博士论文等。 - book 排版书籍。 - slides
排版幻灯片。其中使用了较大的 sans serif 字体。也可以考虑使用 FoilTEX
来得到相同的效果。
options
可以包含: - 10pt, 11pt, 12pt
设置文档所使用的字体的大小。如果没有声明任何选项,缺省将使用 10pt 字体。
- a4paper, letterpaper, . . .
定义纸张的大小,缺省的设置为letterpaper。此外,还可以使用a5paper,b5paper,executivepaper
和 legalpaper。 - fleqn 设置该选项将使数学公式左对齐,而不是中间对齐。 -
leqno 设置该选项将使数学公式的编号放置于左侧。 - titlepage, notitlepage
指定是否在文档标题(document title)后开始一新页。article
文档类缺省不开始新页,而 book 文档类则相反。 - onecolumn, twocolumn 指定
LATEX 以单列(one column)或双列(two column)方式排版文档。 - twoside,
oneside 指定 LATEX 排版的文档为双面或单面格式。article 和 report
缺省使用单面格式,而 book
则缺省使用双面格式。需要注意的是该选项仅作用于文档的式样。twoside选项不会通知你的打印机让以得到双面的打印输出。
- openright, openany
此选项决定新的章是仅仅在右边页(奇数页)还是在下一可用页开始。该选项对
article 文档类不起作用,因为该类中并没有定义“章”(Chapter)。report
类中新的一章开始于下一可用页,而 book 类中新的一章总是开始于右边页。
宏包
如果你想插入图形、彩色文本或源代码文件,你需要使用宏包来增强 LATEX 的功能。调入宏包使用如下的命令:
\usepackage[options]{package} |
这里 package 是宏包的名称,options 是用来触发宏包中的特殊功能的一组关键词。
各类LATEX文件
- .tex LATEX 或 TEX 源文件。可以用 latex 处理。
- .sty LATEX 宏包文件。可使用命令 将其加载到你的 LATEX 文件中。
- .dtx 文档化 TEX 文件。这也是 LATEX 宏包发布的主要格式。通过处理一个 dtx 文件就可以得到该 LATEX 宏中所包括的宏代码文档。
- .ins 为相应的 .dtx 文件的安装文件。如果你在网络上下载了一 LATEX 宏包,你通常会发现会有一个 .dtx 和一个 .ins 文件。使用 LATEX 对 .ins 文件进行处理,可以从 .dtx 文件中提取出宏包。
当你运行 LATEX 处理你的源文件时,会得到下列文件:
- .dvi 与设备无关文件。这是 LATEX 编译运行的主要结果。你可以使用 DVI预览器浏览其内容,或者使用像 dvips 这样的应用程序输出到打印机。
- .log 记录了上次编译运行时的详细信息。
- .toc 存储了所有章节标题。该文件将在下次编译运行时被读入并生成目录。
- .lof 类似 .toc 文件,可生成图形目录。
- .lot 类似 .toc 文件,可生成表格目录。
- .aux 另一个用来向下次编译运行传递信息的辅助文件。除了其它信息外,.aux 文件通常包含交叉引用信息。
- .idx 如果你的文件中包含有索引,LATEX 使用此文件存储所有的索引词条。此文件需要使用 makeindex 处理。
- .ind 经过处理后的 .idx 文件。可在下次编译运行时加入到你的文档中。
- .ilg 运行 makeindex 时生成的记录文件。
页面式样
LATEX
支持三种预定的页眉、页脚(header/footer)格式,称为页面式样(page
styles)。命令 \pagestyle{style}
中的参数定义了所使用页面式样。
- plain 页眉为空,页脚由居中的的页码组成。这是默认的页面式样。
- headings 页眉由当前的章节标题和页码组成,页脚为空。
- empty 设置页眉、页脚均为空。
可以使用下面的命令改变当前页的页面式样:
\thispagestyle{style}
大型文档
当处理大型文档时,最好将源文件分成几个部分。LATEX 有两条命令来处理这种情况。
在文档的正文中使用命令 \include{filename}
可将文件名为
filename.tex 的内容包括进来。注意 LATEX 在开始处理
filename.tex 的内容之前将会开始一新页。
第二个命令 \includeonly{filename,filename,. . . }
可用在文档的导言区,它允许你指导 LATEX 仅仅读入某些 *
文件。这条命令在导言区被 LATEX 读入执行后,在所有的 *
命令中,只有 *
命令参数中列出的文件才会被执行。注意在参数中,文件名和逗号之间不能有空格**。
* 命令在新页上排版包括进来的文本,这对于使用 *命令很有帮助。应为即使一些包括的文件被忽略,分页处也不会变更。如果不想在新页排版包括进来的文本,可使用下面的命令: 该命令只是简单地将指定的文件包括进来,并没有其它限制。
使用 syntonly 宏包可以让 LATEX 快速的检查你的文档:LATEX 浏览你的文档,仅仅检查语法和所使用的命令是否正确,不会产生 DVI 输出。在这种模式下,LATEX 运行的非常快,可以节省可观的时间。使用方法非常简 单:
\usepackage{syntonly} |
文档排版
文档和语言的结构
在 LATEX
中段落是最重要的文档单位。我们之所以称之为“文档单位”,因为段落是反映一个连贯思想或观点的排版风格形式。在下面的章节中你将学习如何用
\\
强行断行,通过在源文件中留一空行强行转段。所以,如果开始一个新思想,就另起一段,否则,只应使用断行。如果还犹豫是否应转段,可以把文档想象为观点和思想的传递者。如果旧的思路还在继续,就不应转段。如果同一段中出现了全新的思路,就应该另起一段。
下一个较小的文档单位是句子。在英语文档中,在一个句子结尾处句号后的空间大于缩写词句号后的空间。LATEX 试图分辨出你需要那一个。如果 LATEX 分辨错了,你必须告诉 LATEX 你到底需要什么。
句子也有结构。大多数语言具有非常复杂的标点符号系统,但是在很多语言中(包括德语和英语)只要你记住它表示什么:语言流中的短暂停顿,你就能近乎完美地使用逗号。如果你不肯定在哪里使用逗号,就大声地朗读这个句子,在每个逗号处做一短呼吸。在什么地方如果你感到别扭,就删掉这个逗号;如果在什么地方,你感到必须呼吸(或做了短暂停顿)就插入一个逗号。
最后,通过分成章、节、子节等形式,文档中的段落应该按逻辑在更高的层次进行组织。但是,使用的排版效果是如此明显,以致如何使用这些高水平的结构几乎是不证自明的。
断行和分页
段落整理
通常书籍是用等长的行来排版的。为了优化整个段落的内容,LATEX 在单词之间插入必要的断行点(linebreak)和间隔。如果一行的单词排不下,LATEX 也会进行必要的断字。段落如何排版依赖于文档类别。通常,每一段的第一行有缩进,在两段之间没有额外的间隔。
在特殊情形下,有必要命令 LATEX 断行:
\\
或\newline
另起一行,而不另起一段。\\*
在强行断行后,还禁止分页。\newpage
另起一新页。\linebreak[n], \nolinebreak[n], \pagebreak[n] and \nopagebreak[n]
上述命令的效果可以从它们的名称看出来。通过可选参数 n,作者可以影响这些命令的效果。n 可以置为 0 和 4 之间的数。如果命令的效果看起来非常差,把 n 取为小于 4 的数,可以让 LATEX 选择忽略这个命令。不要这些“break” 命令与 “new” 命令混淆。即使你给出了 “break” 命令,LATEX 仍然试图对齐页面的右边界。如果你真想另起一行,就使用相应的命令。
LATEX 总是尽可能产生最好的断行效果。如果断行无法达到 LATEX
的高标准,就让这一行在段落的右侧溢出。然后在处理输入文件的同时,报告溢出的消息(“overfull
hbox”)。这最可能发生在 LATEX 找不到合适的地方断字时候。你可以使用
\sloppy
命令,告诉 LATEX
降低一点儿标准。虽然最终的输出结果不是最优的,它通过增加单词之间的间隔,以防止出现过长的行。在这种情况下给出警告(“underfull
hbox”)。在大多数情况下得到的结果看起来不会非常好。\fussy
命令把 LATEX 恢复为缺省状态。
当发生(“overfull hbox”)时,虽然 LATEX 给出一个警告并显示溢出的那一行,但是不太容易发现溢出的行。如果你在 \documentclass 命令中使用选项 draft,LATEX 就在溢出行的右边标以粗黑线。
断字
必要时就会出现断字。如果断字算法不能确定正确的断字点,可以使用如下命令告诉 TEX 如何弥补这个缺憾。
\hyphenation{word list} |
使列于参量中的单词仅在注有 “-” 的点断字。命令的参量仅由正常字母构成的单词,或由激活文本中视为正常字母的符号组成。应用于(特殊)语言的已存好,当断字命令出现时,就为激活的语言储存断字可选点。这意 味着如果你在文档导言中设置了断字命令,它将影响英文的断字。如果断字命令置于 \begin{document} 后面,而且你正使用类似 babel 的国际语言支持宏包,那么断字可选点在由 babel 激活的语言中就处于活动状态。
下面的例子允许对 “hyphenation” 和 “Hyphenation” 进行断字,却根本不允许 “FORTRAN”, “Fortran” 和 “fortran” 进行断字。在参量中不允许出现特殊的字符和符号。
\hyphenation{FORTRAN Hy-phen-a-tion} |
命令 \-
在单词中插入一个自主的断字点。它也就成为这个单词中允许出现的唯一断字点。对于包含特殊字符(注音字符)的单词,这个命令是特别有用的,因为对于包含特殊字符的单词
LATEX 不自动断字。
I think this is: su\-per\-cal\-% |
I think this is: supercalifragilisticexpialido- |
命令 \mbox{text}
保证把几个单词排在同一行上。在任何情况下,这个命令把它的参量排在一起(同一行上)。
My phone number will change soon. |
My phone number will change soon. It will |
上述两星号之间为斜体
命令 和 类似,此外它还能围绕内容画一个框。
特殊字符串和符号
引号
不要像在打字机上那样,把 " 用作引号。在 LATEX 中有专门的左引号和右引号。在 LATEX 中,用两个 ‘ 产生左引号,用两个 ’ 产生右引号。一个 ‘ 和一个 ’ 产生一个单引号。
‘‘Please press the ‘x’ key.’’ |
“Please press the ‘x’ key.” |
破折号和连字号
LATEX 中有四种短划标点符号。连续用不同数目的短划,可以得到其中的三种。第四个实际不是标点符号,它是数学中的减号:
daughter-in-law, X-rated\\ |
daughter-in-law, X-rated |
这些短划线的名称是: ‘-’ 连字号,‘--’ 短破折号,‘---’ 长破折号和 ‘−’ 减号。
波浪号
波浪号经常和网址用在一起。它在 LATEX 中,可用 ~ 产生,但其结果:˜ 却不是你真正想要的。试一下这个:
http://www.rich.edu/\~{}bush \\ |
http://www.rich.edu/˜bush |
度的符号 (◦)
在LATEX中如何排度的符号?
Its $-30\,^{\circ}\mathrm{C}$, |
Its −30 ◦C, I will soon start to super-conduct. |
省略号
在打字机上,逗号或句号占据的空间和其他字母相等。在书籍印刷中,这些字符仅占据一点儿空间,并且与前一个字母贴得非常紧。所以不能只键入三个点来输出‘省略号’,因为间隔划分得不对。我们使用专门的命令
\ldots
输出省略号。
连字
一些字母组合不是简单键入一个个字母得到得的,而实际上用到了一些特殊符号。 在两个字母之间插入一个 ,可以禁止连字。对于由两个词构成的单词,这可能是必要的。
注音符号和特殊字符
LATEX 支持来自许多语言中的注音符号和特殊字符。在字母 i 和 j
上标一个注音符号,它的点儿必须去掉。这个可由 \i
和
\j
做到。
H\^otel, na\"\i ve, \’el\‘eve,\\ |
Hˆotel, na¨ıve, ´el`eve, |
上述为注音符号
支持使用国际语言
略
单词的间隔
为了使输出的右边界对齐,LATEX 在单词间插入不等的间隔。在句子的末尾插入的空间稍多一些,因为这使得文本更具可读性。LATEX 假定句子以句号、问号或惊叹号结尾。如果句号紧跟一个大写字母,它就不视为句子的结尾。因为一般在有缩写地方,才出现句号紧跟大写字母的情况。
作者必须详细说明,这些假设中的任何一个例外。空格前的反斜线符号产生一个不能伸长的空格。波浪字符 ‘~’ 也产生一个不能伸长的空格,并且禁止断行。句号前的命令 @ 说明这个句号是句子的末尾,即使它紧跟一个大写字母。
Mr.~Smith was happy to see her\\ |
Mr. Smith was happy to see her |
命令 \frenchspacing
能禁止在句号后插入额外的空间,它告诉
LATEX
在句号后不要插入比正常字母更多的空间。除了参考文献,这在非英语语言中非常普遍。如果使用了
\frenchspacing
,命令 \@
就不必要了。