下文是王垠介绍的TeX--一个专业的排版系统!
这是一个介绍 TeX — 一个漂亮,有趣又可靠的排版程序的网页。希望通过我的介绍,你能体会到使用 TeX 的快乐感觉。
这页分成了很多小主题,可以叫做一个非技术性的 FAQ. 里面藏着我收集的很多有趣的有关 TeX 的言论,你可以挑你喜欢的看。
- TeX 是什么?
TeX 是一个排版系统。用 TeX,你可以把你的文章做成书那种效果。你可以把它打印出来,或者送到出版社投稿。TeX 非常适合科学家用来写学术论文和书籍。
- 排版 Word 也可以啊!TeX 跟 Word, WordPerfect 有什么不一 样?
Word 和 WordPerfect 是“字处理程序”(wordprocessor),它们是“所见即所得(WYSIWYG)”的,你直接修改字体,颜色,用鼠标画出表格……马上就可以看到 效果。屏幕上显示出来是什么效果, 印出来基本上就是那个效果。而 TeX不是,你输入的都是文本文件,需要一个程序(当然就是tex了)处理之后才能得到一个排版后的结果。
- 那样的话 TeX 还不如 Word 呢!
科 学家喜欢偷懒,他用所见即所得的程序写论文是很累的。他的脑子如果总是想着专业排版人员考虑的问题,比如 “这个单词使用什么字体呢?”,“这行应该缩进多少呢?”……还有什么时间用来思考语言和内容?所以TeX 被设计为“WYTIWYG(所 想即所得)”,非常适合懒到家了的人。
用TeX写文章,他想的是“这一段是否应该属于上一节呢?”,“这句话跟我这章的主题符合 吗?”,“是否应该开始新的一章呢?”,“这个概念读者是否容易理解呢?”…… 你告诉TeX 的是:“这是一章开始”,“这个单词应该强调”,“这里是一段诗”……就像在对他的秘书口授机宜。而不是告诉她:“这是第3章,应该用黑体三号字,开头有 一个‘双S',……”,“这个单词用斜体楷体小四”, “左右缩进各一英寸,右边不要对齐,换用小一号花体”…… 这些是秘书的事情,不用你操心。
TeX 就是你优雅而聪明的秘书。你写论文的时候,能专注于逻辑思维。她排出的数学公式是无与伦比的漂亮,所以数学家最喜欢这个东西。
- 你能说说 TeX 的效果比Word之类的字处理程序好在哪里吗?
你比较一下 Word 和 LaTeX 生成的的PDF文档就可以发现:
- 远远看去,LaTeX 文档格式更加均称,黑白程度均匀,而 Word 文档是黑一块的白一块,字符密度不均匀。
- 仔细看看,你就知道原因了。 Word 文档里上下两行经常有这种情况,上一行的单词间距很宽,而下面一行却很窄。这在排版美学上是 非常不好的。相临行的单词间据应该尽量相同。
- 数 学公式。输入的时候就不说了,你知道用Word自带的公式编辑 器输入公式有多麻烦。现在看看效果:Word 的公式,该近的不近,该远的不远。很多标点符号都不好看,大一点的括号怎么看也不舒服, 你仔细看看那些逗号,省略号,非常难看。如果公式插入到段落中,整个段落的行距会有灾难性的效果。而 TeX 的数学公式却是无可挑 剔的,而且输入起来很方便,你可以根本不看屏幕,不用鼠标就输入 很复杂的公式。
- 你这么关心文档的外表干什么?重要的是内容!
知之者不如好之者,好之者不如乐之者。
科 学家都知道艺术和美感给他们带来了什么。看到均称的排版,优雅的字体,漂亮的公式,看到 ∑ 和 ∽的曲线相互辉映,他的潜意识感觉到世界的和谐,上帝的召唤。他就可能想到王羲之在挥笔疾书,就想到太极云手,想到泰格伍兹打了一个老鹰球,想到舒马赫冲 过最后一个弯道,路旁漂亮女孩的头发在飘扬,一个急刹车差点撞上一只过路的穿着西服的兔子,他手里举着一面格子旗,上面写着“道可道,非常道”。一个千年 难题的答案,不知不觉就送到你面前了。整个过程有如行云流水,一气呵成……啧啧(有点吹牛了。哈哈!)有人说科学的目的就是为了美,也许就是这个意思吧。 - TeX 输入的数学公式跟 Word 有什么区别?
看看 TeX 输入的公式:
再用 Word 输入同样的公式:
上面这个公式是一位很熟悉 Word 的数学系的朋友耐着性子仔仔细细帮我用 MS Equation 3.0 输入了,然后转成 PDF 后的效果,他说:“还好,凑合能认出来是什么。”
用心体会这些曲线给你带来的感觉,真是天上掉到地上。王羲之,太极拳,老鹰球,美女,兔子,……都没有了。当然千年难题的答案也没有了。
TeX 输入的数学公式都是文本。你可以直接用键盘敲入。比如这 个漂亮的公式是这样打出来的:
$$sum_{prm;prime}f(p) = int_{t>1}f(t)dpi(t).$$
sum 就是那个求和符号, "_"后面括起来的就是下标,rm 使后 面的 "prime" 用正体显示, ; 是一个空格。int 就是积分(integrate)符号, pi 就是那个圆周率符号。很难吗?麻烦吗?好吧,试试用 Word的公式编辑器怎样打出这个公式,再比较一下效果。
其实有很多符号你在 Word 里就不容易找到了。比如:
用 TeX 就这样输入:
$$2uparrowuparrow k mathrel{mathop=^{rm def}} 2^{2^{cdot^{cdot^{cdot^2}}}} vbox{hbox{$Big}scriptstyle k$}kern0pt}.$$
虽然比一般的公式复杂一点,但是你发现里面的简单的对应关系没有?uparrow 就是向上的箭头,mathrel可以构造那个组合的等号,cdot 就是那些点,我们不断提升上标,最后那个后花括号稍微复杂一些。
你在一下午就可以学到不止这种程度。其实一下午你就可以学会 输入世界上最复杂的公式。比如像下面这个……我也不知道这是什么就打进去了。感觉好像是个兔子洞的路线图?谁知道这是什么告诉我一声。
- TeX 有 Word 那样强大的宏吗?
其 实 TeX 的宏比Word强大很多。TeX 本身就是一种宏语言,TeX 的宏才是真正意义上的宏,TeX 的宏是世界上最强大的宏之一。宏(macro)这个单词意味着强大,用TeX的宏你可以定义具有参数的变化的结构,TeX 能够用宏来扩展自己的语法,比如 TeX其实没有循环语句,但是它可以用宏来实现一个loop循环结构。
TeX 的宏可以写出强大的“宏包”。我们常说的 LaTeX 其实就是 一个宏包,这个宏包功能如此之大,我们把它叫做一个 "format", 它几乎完全改变和扩展了 TeX 的能力。
- TeX 能像 Word 那样“套用格式”吗?
所谓的“套用格式”在 LaTeX 里叫做使用文档类。这是一种把样 式和结构分开的做法。LaTeX 是最早支持这种思想的系统之一。
许多世界著名的大学都有自己用 LaTeX 定义的毕业论文格式。几乎每一个世界性的学术组织 SIAM, ACM,IEEE, AMS, ... 都有自己文档 格式要求的 LaTeX 风格文件, 其中 AMS(美国数学会)还有专门的 amsTeX, 有专门的字体。作者们有了这些风格文件,可以一瞬间把已 经写好的论文转化成投稿需要的格式。真的是一瞬间,你试试在LaTeX 文档的开头把
documentclass{article}
改成documentclass[twocolomn]{IEEEtran}
运行 LaTeX,马上就得到一篇可以投到 IEEE transactions,并且满足他们所有的格式要求的文章。 - TeX 是哪家公司生产的?
TeX 不是一家公司生产的,它主要是由计算机科学家 Donald.E.Knuth设 计并实现的。在 TeX 的诞生过程中,还包含了许许多多艺术家,设计师的功劳,其中包括著名的书法家和字体设计师 Hermann Zapf。TeX的宏包,字体,扩展软件成千上万,是由各个领域的的专家按照自己专业的需要设计的。所以 TeX 就如它的名字一样,是科学和艺术结合的产物。
- TeX 怎么念啊?"Tecks"?
TeX 的名字是由大写的希腊字母组 成。Knuth 说,在希腊语中这个词的意思是“科学”和“艺术”,这也解释了它的发音。“T”和“E”就像在“technology”中的发音一样,而“X”的发音类似 于苏格兰语单词“loch”或德语单词“ach”中的“ch”,也类似于西班牙语中的“j”或俄语中的“kh”。当你对着电脑屏幕读这个单词,你的屏幕就 会起雾。
Knuth 的这个说法对中国人太不管用了,几乎没几个人知道什么苏格兰语啊,所以用中文模拟一下吧,有点像“泰克喝~”
- LaTeX 怎么发音?
LaTeX 读作:“雷TeX”。
- 我还听说 LaTeX 非常好,TeX 比它还好吗?
呵呵,你有个概念没有搞清楚。这两者其实是同一个程序,但是有层次上的不同,TeX 是 LaTeX 的基石,LaTeX 建立在 TeX 之上。如果你想搞清楚他们具体是怎样的关系,可以看看LaTeX+CJK是怎样工作的。
其 实世界上只有一个TeX程序,它就叫做 "tex", 它是由 D. E.Knuth 设计并且实现的。TeX 不仅是一个排版程序,而且是一种程序语言。LaTeX 就是用这种语言写成的一个“TeX 宏包”,它扩展了 TeX 的功能,使我们很方便的逻辑的进行创作而不是专心于字体,缩进这些烦人的东西。TeX 还有其它的大型宏包,它们和 LaTeX 一起都被叫做 "format",现在还有一种常用的format叫做 ConTeXt, 用它能方便的作出漂亮的幻灯片,动态屏幕文档…… 我们通常用 TeX 都是在用 LaTeX, ConTeXt, 因为 TeX 的底层需要更多的知识才能了解,一般人不需要自己设计自己的格式。
所以答案是 LaTeX 和 TeX 一样好。
- LaTeX2e 是什么?这些东西怎么这么奇怪啊?
LaTeX2e 是 LaTeX 目前的版本。以前的 LaTeX 叫做 LaTeX2.09. 这就就跟 Windows2000 升级成 WindowsXP 差不多。你现在随便下载一个 TeX 系统,里面带的 LaTeX 都是 LaTeX2e。
- LaTeX 建立在 plain TeX 之上吗?
不 是。很多人把 plain TeX 认为是最底层的,其实不是这样。plain 和 LaTeX 一样,都是 TeX 的宏包,也叫 format,它们是平等的关系。只不过这个 plain format 实在太简单了,你需要自己定义很多宏才能很好的工作,所以叫做 "plain"。在它们之下就是 TeX,或者明确一点,叫做 "TeX primitive" — 最基本的 TeX 语言。你几乎不想用 TeX primitive 干任何事情,因为即使打出一个很简单的符号,用 TeX primitive 你也需要费很多事。即使最顽固的号称“永远不用 LaTeX” 的底层派,他们也不敢不依赖 plain TeX,因为自己设计一个 format 是很不容易的,你自己看看,最简单的 plain 的宏包都有1200行稀奇古怪的 TeX primitive!
- 那还有 MikTeX, teTeX, ... 呢。它们到底是什么?
Knuth 创造了 TeX 之后,免费公布了 TeX 程序的源代码。所以任何人都可以在保证不修改那个文件的情况下把它编译成程序,然后跟其它很多程序一起打包发行。这样就有了很多发行版本,比如 Windows 下有 MikTeX,fpTeX, ... Linux 和 UNIX 下有 teTeX. 这些简称“发行”。
你知道 Linux 吗?如果知道我就打个比方:TeX 和 MikTeX,teTeX... 的关系,就像 Linux 和 Debian GNU/Linux, RedhatLinux, ... 的关系。每一个TeX发行里都包含了 TeX, METAFONT,LaTeX, amsTeX, MetaPost, dvips, pdfTeX, dvipdfm...每一个 Linux 发行都包含Linux内核,bash, gcc, tar, XFree86, ...
- TeX 如何管理文献数据库呢?这在 Word 里是一个让我头疼的问题。
这个 就是 LaTeX 的强中之强了。TeX 主要依靠 BibTeX 实现文献管理,它是由 Knuth 的好朋友 Patashnik 设计的。作者可以从杂志,协会,网站等地方得到 BitTeX 文献数据库,然后在自己的文件里只需要写一个几个字母长的标识符,比如 "kn95",就可以自动在论文,书籍末尾加上已经引用的文献的参考文献条目。文献条目可以自动排序,也可以不排序。
这种数据库条目是附和 国际文献分类规则的,只要一个样式文件就可以把文献数据自动排成需要的样子。一个期刊要求引用时采用[Bhatt and Cai, 1993] 这样的字样,另一个期刊要 [BC93] 这样的,而第三个期刊要 [10] 这样的数字编号,一个个改起来多麻烦!BibTeX 就可以让你轻松改变这些样式。而且这种文献条目的样式可以自己选择。各个协会,比如 ACM,IEEE, SIAM, AMS ... 都会提供附和它们投稿要求的 BibTeX 样式文件 .bst 给你。只要有了这种样式文件,就可以不费力气的插入各种样式的参考文献条目了。
这里有一些 BibTeX 样式的例子。你可以看看。
- TeX 完全没有 bug 吗?
不 能说完全没有 bug. Knuth 用他自己设计的“文学编程语言”WEB写了TeX的代码,到了正式发行的时候,他非常自信的奖励 $1.28 给第一个发现 bug 的人,以后每发现一个 bug, 奖金都会翻倍,最多 $327.68。后来由于加入了对8字节字符的支持,产生了一些小 bug. 从1995年到现在,总共只发现一个 bug. 发现 bug 的周期越来越长,而且后来的 bug 都是一些在挑剔的人找出来的一些“美学”上的问题了。但是严谨的 Knuth 仍然把它们作为 bug 处理。
- TeX,几十年前的东西了,又不更新,早过时了吧?
TeX 确实已经很老了,它在 1982 年以后基本就没有变化过。但是你要相信 TeX 是一个 masterpiece。它几乎没有bug, 而且你可以在几乎任何计算机上使用它,从PC机到Cray巨型机。经过几十年的风霜,它仍然是 "state-of-the-art". TeX 是如此的稳定,几十年前的文档在现在输出效果不会有任何变化。虽然TeX程序和语言本身没有再变化,但是TeX是可以在不修改主程序的情况下扩展的。Knuth 在那个年代就想到了程序的扩展性,展现了卓越的远见。
- 听说 Knuth 不允许别人改进它的程序?
不 是这样。Knuth 不但公开了全部代码,而且欢迎大家利用 TeX 改进成为更加好的排版程序。但是为了保障以前的文档不会失去支持,保证一个稳定的语言的存在,也许也是为了满足自己对完美的追求,Knuth 设计了一个测试,只有通过测试的程序才能使用 "TeX" 这三个字作为名字。所有对 TeX 有重大改进(或者退步)的程序都不能使用这个名字。
现在确实有很多改进的 TeX, 比如 Omega, NTS, ... 他们的思想是和 TeX 类似的,用过 TeX 的人用起那些程序也很容易。
- 既然有这么好,为什么现在用的人很少呢?
TeX 面向的是对美观程度要求很高的用户,TeX 编辑的是有逻辑性结构的文档,需要分章节,有插图编号,…… 所以你不会看到有人用 TeX 记流水帐,一般的画报也不会用 TeX。
TeX 用户的多少跟你所处的环境有关系。TeX 是最好的学术排版系统,它的用户基本上都是科学家和工程师,也就是最会偷懒的的那种人。用户的数目虽然少,但是很稳定。TeX 的用户一般集中在大学和科研机构里。比如,欧洲原子能研究中心(CERN)几百人都是 (La)TeX 用户,而且有专人把设计文档样式作为爱好。这样的气氛很好,大家可以轻轻松松得到样式统一的文档。而且多人合写论文,书籍是非常方便的。
- 我听说 TeX 很难学?
你 可能经常听说“LaTeX 很难学”这样的传闻。但是你第一次用TeX 之后就知道它有多简单。通常你用的 TeX 叫做 LaTeX,我可以在半个小时之内教会一个人用 LaTeX 写出一篇象样的文档。包括章节,脚注,目录,表格,插图,索引,参考书目…… 如果你能体会到它有多简单,请告诉你的朋友们:“LaTeX 不用学,只要用就行了。”
- 怎么开始呢?
跟写程序一样,拿到一个别人写好的文档来修改修改,是最快的入门方式。 我师姐就是这样一下午学会 LaTeX 的。如果想要深入一点,可以看看lshort这本书自学,大概也就是 90 分钟 的时间吧。以后如果你感兴趣就可以看看 The TeXbook, 里面有很多底层的细节。还可以参考这些资料。
- 听说 LaTeX 插图的时候很麻烦?
LaTeX 插图就这么简单:
begin{figure} includegraphics{tex.eps} caption{This is me, TeX!} label{tex} end{figure}
这样插入图片后,图片会被自动放在合适美观的地方,自动被加上编号,你可以用
请看图ref{tex}
来引用这个图片。到时候如果图片被编号1,那么你的句子就变成“请看图1”。而且你可以用
listoffigures
得到所有图片的列表,包括编号,注释,页码,插到你的目录里去。如果你的文档使用 hyperref 宏包,还可以在 PDF 文件里生成可以点击的目录。多方便!
- LaTeX 在排版程序代码时有什么好处吗?
你只要用几句话设置好 listings 宏包:
usepackage{listings} lstloadlanguages{C, csh, make} lstset{language=C,tabsize=4, keepspaces=true, breakindent=22pt, numbers=left,stepnumber=1,numberstyle=tiny, basicstyle=footnotesize, showspaces=false, flexiblecolumns=true, breaklines=true, breakautoindent=true,breakindent=4em, escapeinside={} }
就可以把你成千上万行的代码都排成下面这个效果。
而且你可以在代码里插入标记,可以在文章里引用这个标记,比如你可以在代码某处插入一个注释。
int restart_card(.......) { ..... }
这样的注释在排版时会被 LaTeX 去掉。注释的方式是在 lstset 里定义的,就是上面那个 "escapeinside={}".
你以后就可以说:“在第ref{code:restart}行,我们重新启动。”排版时,ref{code:restart}会被变成正确的行号。以后即使程序改动,行号也会完全正确!
有 的人看出来了,这里排版出来的程序使用的是非等宽字体。而通常程序编辑时应该使用等宽字体。如果你喜欢等宽字体,你可以很简单的换成 Courier 之类的字体。但是其实程序一旦印在纸上,就没有必要用等宽字体了,因为等宽字体只是用来方便你编辑,非等宽字体印出来要好看的多。
- 别人的论文投稿时都是 PDF, PS,我用TeX,出版社接受吗?
你 有一个很重要的问题没有搞清楚。PDF 和 PS 是 hardcopy 格式, 是 Adobe 公司创造的试图“与纸比美”的文件交换格式,它们是与纸张效果完全一样的。它们是了不起的发明,但是你不能直接编辑出漂亮的 PDF 和 PS 文件,它们都是用其它程序生成的。
虽然在这个年代,TeX 写的文档最后打印的时候大多转换成 PS,PDF,但是 TeX 生成的 dvi 文件不依赖任何 hardcopy 格式。在没有 PS, PDF 的年代,TeX 还是具有高质量的输出。PS 和 PDF 使得 TeX 如虎添翼,TeX 生成的 PDF 比其它程序生成的都要漂亮。你看看这些样例都是PS, PDF, 甚至 DJVU 格式。如果你想把 Word 转成 PDF,你需要AdobeAcrobat完全版,价格是 $249. 你能接受吗?
出 版社基本上都可以接受任何 PDF, PS 文件。即使是不能处理 LaTeX 的小出版社,你也可以把你的文件转成 PDF 给他们,其实你甚至可以把 LaTeX 转换成 HTML(latex2html), Word 文档(tex2doc), ... 出版社有时要求必须用 LaTeX 的源文件,以便把你的文章插入论文集。所以你用 LaTeX 写文档不会有任何问题,反而有时是必须的。
看看这些大出版机构,每一个都把 LaTeX 的名字放在最前面,有些甚至只接受 (La)TeX.
- 有人说 XML, MathML 要取代 TeX?
XML, MathML, 甚至 ChemML, 它们在本质上是跟 TeX 完全不同的东西。TeX 是一种排版系统。XML, MathML 这些标记语言要变成漂亮的可以印在纸上的文档,还得靠 TeX 这样的后端支持。所以 XML 不会代替 TeX。
- TeX 能处理汉字吗?
当 然能。TeX 是跟语言无关的,也就是说,它可以处理任何人类语言。在 TeX 的眼里没有语言,只有不同大小的“盒子”,这些盒子里装的可以是汉字,也可以是英语,法语,阿拉伯语,西伯来语…… 在 LaTeX 下,你可以用 CJK 宏包方便的编辑汉字文档,经过CJK宏包,汉字就变成跟其它语言一样的东西了—盒子。
- 虽然如此,但是我听说LaTeX处理汉字不符合中国人的习惯
LaTeX 处理汉字主要依靠的是 CJK 宏包,CJK 的主要任务是实现汉字编码的映射,而不管中文格式的问题,它是由德国学者 WernerLemberg 设计的。中文排版确实有很多方面跟英语不一样,比如很多人抱怨为什么每一节后面的那一段都不缩进,因为 article 格式是按照英文排版方式。
但是你可以修改这一切,让你的文档都符合你自己设定的同一个样式。这是相当容易的。你也可以拷贝别人的样式定义,这就不用你自己操心样式了。
- TeX 除了编辑论文还能做什么?
TeX 是一个非常多才多艺的程序。它不但可以编辑论文,书籍,幻灯片,学术杂志,还可以编辑乐谱,化学分子图,电路图,国际象棋,中国象棋,甚至围棋棋谱,……事实上只有少量文档不适合用 TeX 编辑。你可以到这里看看样品。
TeX 的一个宏包 MusiXTeX 可以做出漂亮的乐谱。你可以在MusiXTeX的网页找到很多乐谱。
- 什么东西不适合用 TeX 编辑?
不 适合直接用 TeX编辑的是没有逻辑结构的东西,比如报纸,画报,广告等。像彩色杂志,图片多多,还有各种变化多端的分栏方式,肯定不能用 TeX 来排版。所以,TeX似乎不大适合艺术创作。另外,文学家可能不会用 TeX。实际上文学创作的人通常使用一些叫做 outliner 的程序来写草稿。还有,你可能不想用TeX 来编辑一封写给你妈妈的信。这样似乎用 TeX 的人都是喜欢偷懒的人,也就是说:科学家 :)
- 我是初学者,你推荐使用什么发行的 TeX?
不太会用命令行的朋友可以到 http://www.ctex.org 下载配置好立即可用中文的 CTeX 套装。如果你硬盘很小的话可以安装 CTeX 套装基本版。请看 这里。
如 果你熟悉命令行操作又大部分时间在用英文,那么可以用 TeXLive CD。它不但包含了所有操作系统需要的程序,而且有许许多多宏包,如果你不是特别特殊的用户,有了它你可以完成你的任何任务。而且它直接拷贝到硬盘上就可 以用了,甚至可以从光盘运行。不过配置 TeXLive CD 的中文麻烦一点。