关于TeX,LaTeX,MikTex,CTeX,etc.

时间:2020-12-26 06:48:52

下文是王垠介绍的TeX--一个专业的排版系统!

这是一个介绍 TeX — 一个漂亮,有趣又可靠的排版程序的网页。希望通过我的介绍,你能体会到使用 TeX 的快乐感觉。

这页分成了很多小主题,可以叫做一个非技术性的 FAQ. 里面藏着我收集的很多有趣的有关 TeX 的言论,你可以挑你喜欢的看。

  1. TeX 是什么?

    TeX 是一个排版系统。用 TeX,你可以把你的文章做成书那种效果。你可以把它打印出来,或者送到出版社投稿。TeX 非常适合科学家用来写学术论文和书籍。

  2. 排版 Word 也可以啊!TeX 跟 Word, WordPerfect 有什么不一 样?

    Word 和 WordPerfect 是“字处理程序”(wordprocessor),它们是“所见即所得(WYSIWYG)”的,你直接修改字体,颜色,用鼠标画出表格……马上就可以看到 效果。屏幕上显示出来是什么效果, 印出来基本上就是那个效果。而 TeX不是,你输入的都是文本文件,需要一个程序(当然就是tex了)处理之后才能得到一个排版后的结果。

  3. 那样的话 TeX 还不如 Word 呢!

    科 学家喜欢偷懒,他用所见即所得的程序写论文是很累的。他的脑子如果总是想着专业排版人员考虑的问题,比如 “这个单词使用什么字体呢?”,“这行应该缩进多少呢?”……还有什么时间用来思考语言和内容?所以TeX 被设计为“WYTIWYG(所 想即所得)”,非常适合懒到家了的人。

    用TeX写文章,他想的是“这一段是否应该属于上一节呢?”,“这句话跟我这章的主题符合 吗?”,“是否应该开始新的一章呢?”,“这个概念读者是否容易理解呢?”…… 你告诉TeX 的是:“这是一章开始”,“这个单词应该强调”,“这里是一段诗”……就像在对他的秘书口授机宜。而不是告诉她:“这是第3章,应该用黑体三号字,开头有 一个‘双S',……”,“这个单词用斜体楷体小四”, “左右缩进各一英寸,右边不要对齐,换用小一号花体”…… 这些是秘书的事情,不用你操心。

    TeX 就是你优雅而聪明的秘书。你写论文的时候,能专注于逻辑思维。她排出的数学公式是无与伦比的漂亮,所以数学家最喜欢这个东西。

  4. 你能说说 TeX 的效果比Word之类的字处理程序好在哪里吗?

    你比较一下 Word 和 LaTeX 生成的的PDF文档就可以发现:

    • 远远看去,LaTeX 文档格式更加均称,黑白程度均匀,而 Word 文档是黑一块的白一块,字符密度不均匀。
    • 仔细看看,你就知道原因了。 Word 文档里上下两行经常有这种情况,上一行的单词间距很宽,而下面一行却很窄。这在排版美学上是 非常不好的。相临行的单词间据应该尽量相同。
    • 数 学公式。输入的时候就不说了,你知道用Word自带的公式编辑 器输入公式有多麻烦。现在看看效果:Word 的公式,该近的不近,该远的不远。很多标点符号都不好看,大一点的括号怎么看也不舒服, 你仔细看看那些逗号,省略号,非常难看。如果公式插入到段落中,整个段落的行距会有灾难性的效果。而 TeX 的数学公式却是无可挑 剔的,而且输入起来很方便,你可以根本不看屏幕,不用鼠标就输入 很复杂的公式。
  5. 你这么关心文档的外表干什么?重要的是内容!

    知之者不如好之者,好之者不如乐之者。科 学家都知道艺术和美感给他们带来了什么。看到均称的排版,优雅的字体,漂亮的公式,看到 ∑ 和 ∽的曲线相互辉映,他的潜意识感觉到世界的和谐,上帝的召唤。他就可能想到王羲之在挥笔疾书,就想到太极云手,想到泰格伍兹打了一个老鹰球,想到舒马赫冲 过最后一个弯道,路旁漂亮女孩的头发在飘扬,一个急刹车差点撞上一只过路的穿着西服的兔子,他手里举着一面格子旗,上面写着“道可道,非常道”。一个千年 难题的答案,不知不觉就送到你面前了。整个过程有如行云流水,一气呵成……啧啧(有点吹牛了。哈哈!)有人说科学的目的就是为了美,也许就是这个意思吧。

  6. TeX 输入的数学公式跟 Word 有什么区别?

    看看 TeX 输入的公式:
    关于TeX,LaTeX,MikTex,CTeX,etc.

    再用 Word 输入同样的公式:

    关于TeX,LaTeX,MikTex,CTeX,etc.

    上面这个公式是一位很熟悉 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,LaTeX,MikTex,CTeX,etc.

    用 TeX 就这样输入:

    $$2uparrowuparrow k 
    mathrel{mathop=^{rm def}} 
    2^{2^{cdot^{cdot^{cdot^2}}}} 
    vbox{hbox{$Big}scriptstyle k$}kern0pt}.$$
    

    虽然比一般的公式复杂一点,但是你发现里面的简单的对应关系没有?uparrow 就是向上的箭头,mathrel可以构造那个组合的等号,cdot 就是那些点,我们不断提升上标,最后那个后花括号稍微复杂一些。

    你在一下午就可以学到不止这种程度。其实一下午你就可以学会 输入世界上最复杂的公式。比如像下面这个……我也不知道这是什么就打进去了。感觉好像是个兔子洞的路线图?谁知道这是什么告诉我一声。
    关于TeX,LaTeX,MikTex,CTeX,etc.

  7. TeX 有 Word 那样强大的宏吗?

    其 实 TeX 的宏比Word强大很多。TeX 本身就是一种宏语言,TeX 的宏才是真正意义上的宏,TeX 的宏是世界上最强大的宏之一。宏(macro)这个单词意味着强大,用TeX的宏你可以定义具有参数的变化的结构,TeX 能够用宏来扩展自己的语法,比如 TeX其实没有循环语句,但是它可以用宏来实现一个loop循环结构。

    TeX 的宏可以写出强大的“宏包”。我们常说的 LaTeX 其实就是 一个宏包,这个宏包功能如此之大,我们把它叫做一个 "format", 它几乎完全改变和扩展了 TeX 的能力。

  8. TeX 能像 Word 那样“套用格式”吗?

    所谓的“套用格式”在 LaTeX 里叫做使用文档类。这是一种把样 式和结构分开的做法。LaTeX 是最早支持这种思想的系统之一。

    许多世界著名的大学都有自己用 LaTeX 定义的毕业论文格式。几乎每一个世界性的学术组织 SIAMACM,IEEEAMS, ... 都有自己文档 格式要求的 LaTeX 风格文件, 其中 AMS(美国数学会)还有专门的 amsTeX, 有专门的字体。作者们有了这些风格文件,可以一瞬间把已 经写好的论文转化成投稿需要的格式。真的是一瞬间,你试试在LaTeX 文档的开头把

    documentclass{article}
    
    改成
    documentclass[twocolomn]{IEEEtran}
    
    运行 LaTeX,马上就得到一篇可以投到 IEEE transactions,并且满足他们所有的格式要求的文章。
  9. TeX 是哪家公司生产的?

    TeX 不是一家公司生产的,它主要是由计算机科学家 Donald.E.Knuth设 计并实现的。在 TeX 的诞生过程中,还包含了许许多多艺术家,设计师的功劳,其中包括著名的书法家和字体设计师 Hermann Zapf。TeX的宏包,字体,扩展软件成千上万,是由各个领域的的专家按照自己专业的需要设计的。所以 TeX 就如它的名字一样,是科学和艺术结合的产物。

  10. TeX 怎么念啊?"Tecks"?

    TeX 的名字是由大写的希腊字母关于TeX,LaTeX,MikTex,CTeX,etc.组 成。Knuth 说,在希腊语中这个词的意思是“科学”和“艺术”,这也解释了它的发音。“T”和“E”就像在“technology”中的发音一样,而“X”的发音类似 于苏格兰语单词“loch”或德语单词“ach”中的“ch”,也类似于西班牙语中的“j”或俄语中的“kh”。当你对着电脑屏幕读这个单词,你的屏幕就 会起雾。

    Knuth 的这个说法对中国人太不管用了,几乎没几个人知道什么苏格兰语啊,所以用中文模拟一下吧,有点像“泰克喝~”

  11. LaTeX 怎么发音?

    LaTeX 读作:“雷TeX”。

  12. 我还听说 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 一样好。

  13. LaTeX2e 是什么?这些东西怎么这么奇怪啊?

    LaTeX2e 是 LaTeX 目前的版本。以前的 LaTeX 叫做 LaTeX2.09. 这就就跟 Windows2000 升级成 WindowsXP 差不多。你现在随便下载一个 TeX 系统,里面带的 LaTeX 都是 LaTeX2e。

  14. 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!

  15. 那还有 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, ...

  16. TeX 如何管理文献数据库呢?这在 Word 里是一个让我头疼的问题。

    这个 就是 LaTeX 的强中之强了。TeX 主要依靠 BibTeX 实现文献管理,它是由 Knuth 的好朋友 Patashnik 设计的。作者可以从杂志,协会,网站等地方得到 BitTeX 文献数据库,然后在自己的文件里只需要写一个几个字母长的标识符,比如 "kn95",就可以自动在论文,书籍末尾加上已经引用的文献的参考文献条目。文献条目可以自动排序,也可以不排序。

    这种数据库条目是附和 国际文献分类规则的,只要一个样式文件就可以把文献数据自动排成需要的样子。一个期刊要求引用时采用[Bhatt and Cai, 1993] 这样的字样,另一个期刊要 [BC93] 这样的,而第三个期刊要 [10] 这样的数字编号,一个个改起来多麻烦!BibTeX 就可以让你轻松改变这些样式。而且这种文献条目的样式可以自己选择。各个协会,比如 ACM,IEEE, SIAM, AMS ... 都会提供附和它们投稿要求的 BibTeX 样式文件 .bst 给你。只要有了这种样式文件,就可以不费力气的插入各种样式的参考文献条目了。

    这里有一些 BibTeX 样式的例子。你可以看看

  17. TeX 完全没有 bug 吗?

    不 能说完全没有 bug. Knuth 用他自己设计的“文学编程语言”WEB写了TeX的代码,到了正式发行的时候,他非常自信的奖励 $1.28 给第一个发现 bug 的人,以后每发现一个 bug, 奖金都会翻倍,最多 $327.68。后来由于加入了对8字节字符的支持,产生了一些小 bug. 从1995年到现在,总共只发现一个 bug. 发现 bug 的周期越来越长,而且后来的 bug 都是一些在挑剔的人找出来的一些“美学”上的问题了。但是严谨的 Knuth 仍然把它们作为 bug 处理。

  18. TeX,几十年前的东西了,又不更新,早过时了吧?

    TeX 确实已经很老了,它在 1982 年以后基本就没有变化过。但是你要相信 TeX 是一个 masterpiece。它几乎没有bug, 而且你可以在几乎任何计算机上使用它,从PC机到Cray巨型机。经过几十年的风霜,它仍然是 "state-of-the-art". TeX 是如此的稳定,几十年前的文档在现在输出效果不会有任何变化。虽然TeX程序和语言本身没有再变化,但是TeX是可以在不修改主程序的情况下扩展的。Knuth 在那个年代就想到了程序的扩展性,展现了卓越的远见。

  19. 听说 Knuth 不允许别人改进它的程序?

    不 是这样。Knuth 不但公开了全部代码,而且欢迎大家利用 TeX 改进成为更加好的排版程序。但是为了保障以前的文档不会失去支持,保证一个稳定的语言的存在,也许也是为了满足自己对完美的追求,Knuth 设计了一个测试,只有通过测试的程序才能使用 "TeX" 这三个字作为名字。所有对 TeX 有重大改进(或者退步)的程序都不能使用这个名字。

    现在确实有很多改进的 TeX, 比如 Omega, NTS, ... 他们的思想是和 TeX 类似的,用过 TeX 的人用起那些程序也很容易。

  20. 既然有这么好,为什么现在用的人很少呢?

    TeX 面向的是对美观程度要求很高的用户,TeX 编辑的是有逻辑性结构的文档,需要分章节,有插图编号,…… 所以你不会看到有人用 TeX 记流水帐,一般的画报也不会用 TeX。

    TeX 用户的多少跟你所处的环境有关系。TeX 是最好的学术排版系统,它的用户基本上都是科学家和工程师,也就是最会偷懒的的那种人。用户的数目虽然少,但是很稳定。TeX 的用户一般集中在大学和科研机构里。比如,欧洲原子能研究中心(CERN)几百人都是 (La)TeX 用户,而且有专人把设计文档样式作为爱好。这样的气氛很好,大家可以轻轻松松得到样式统一的文档。而且多人合写论文,书籍是非常方便的。

  21. 我听说 TeX 很难学?

    你 可能经常听说“LaTeX 很难学”这样的传闻。但是你第一次用TeX 之后就知道它有多简单。通常你用的 TeX 叫做 LaTeX,我可以在半个小时之内教会一个人用 LaTeX 写出一篇象样的文档。包括章节,脚注,目录,表格,插图,索引,参考书目…… 如果你能体会到它有多简单,请告诉你的朋友们:“LaTeX 不用,只要就行了。”

  22. 怎么开始呢?

    跟写程序一样,拿到一个别人写好的文档来修改修改,是最快的入门方式。 我师姐就是这样一下午学会 LaTeX 的。如果想要深入一点,可以看看lshort这本书自学,大概也就是 90 分钟 的时间吧。以后如果你感兴趣就可以看看 The TeXbook, 里面有很多底层的细节。还可以参考这些资料

  23. 听说 LaTeX 插图的时候很麻烦?

    关于TeX,LaTeX,MikTex,CTeX,etc.

    LaTeX 插图就这么简单:

    begin{figure}
    includegraphics{tex.eps}
    caption{This is me, TeX!}
    label{tex}
    end{figure}
    

    这样插入图片后,图片会被自动放在合适美观的地方,自动被加上编号,你可以用

    请看图ref{tex}
    

    来引用这个图片。到时候如果图片被编号1,那么你的句子就变成“请看图1”。而且你可以用

    listoffigures
    

    得到所有图片的列表,包括编号,注释,页码,插到你的目录里去。如果你的文档使用 hyperref 宏包,还可以在 PDF 文件里生成可以点击的目录。多方便!

    关于TeX,LaTeX,MikTex,CTeX,etc.

  24. 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={}
    }
    

    就可以把你成千上万行的代码都排成下面这个效果。

    关于TeX,LaTeX,MikTex,CTeX,etc.

    而且你可以在代码里插入标记,可以在文章里引用这个标记,比如你可以在代码某处插入一个注释。

    int restart_card(.......)
    {
       .....
    }
    

    这样的注释在排版时会被 LaTeX 去掉。注释的方式是在 lstset 里定义的,就是上面那个 "escapeinside={}".

    你以后就可以说:“在第ref{code:restart}行,我们重新启动。”排版时,ref{code:restart}会被变成正确的行号。以后即使程序改动,行号也会完全正确!

    有 的人看出来了,这里排版出来的程序使用的是非等宽字体。而通常程序编辑时应该使用等宽字体。如果你喜欢等宽字体,你可以很简单的换成 Courier 之类的字体。但是其实程序一旦印在纸上,就没有必要用等宽字体了,因为等宽字体只是用来方便你编辑,非等宽字体印出来要好看的多。

  25. 别人的论文投稿时都是 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.

  26. 有人说 XML, MathML 要取代 TeX?

    XML, MathML, 甚至 ChemML, 它们在本质上是跟 TeX 完全不同的东西。TeX 是一种排版系统。XML, MathML 这些标记语言要变成漂亮的可以印在纸上的文档,还得靠 TeX 这样的后端支持。所以 XML 不会代替 TeX。

  27. TeX 能处理汉字吗?

    当 然能。TeX 是跟语言无关的,也就是说,它可以处理任何人类语言。在 TeX 的眼里没有语言,只有不同大小的“盒子”,这些盒子里装的可以是汉字,也可以是英语,法语,阿拉伯语,西伯来语…… 在 LaTeX 下,你可以用 CJK 宏包方便的编辑汉字文档,经过CJK宏包,汉字就变成跟其它语言一样的东西了—盒子。

  28. 虽然如此,但是我听说LaTeX处理汉字不符合中国人的习惯

    LaTeX 处理汉字主要依靠的是 CJK 宏包,CJK 的主要任务是实现汉字编码的映射,而不管中文格式的问题,它是由德国学者 WernerLemberg 设计的。中文排版确实有很多方面跟英语不一样,比如很多人抱怨为什么每一节后面的那一段都不缩进,因为 article 格式是按照英文排版方式。

    但是你可以修改这一切,让你的文档都符合你自己设定的同一个样式。这是相当容易的。你也可以拷贝别人的样式定义,这就不用你自己操心样式了。

  29. TeX 除了编辑论文还能做什么?

    TeX 是一个非常多才多艺的程序。它不但可以编辑论文,书籍,幻灯片,学术杂志,还可以编辑乐谱,化学分子图,电路图,国际象棋,中国象棋,甚至围棋棋谱,……事实上只有少量文档不适合用 TeX 编辑。你可以到这里看看样品

    TeX 的一个宏包 MusiXTeX 可以做出漂亮的乐谱。你可以在MusiXTeX的网页找到很多乐谱。

    关于TeX,LaTeX,MikTex,CTeX,etc.

    关于TeX,LaTeX,MikTex,CTeX,etc.

  30. 什么东西不适合用 TeX 编辑?

    不 适合直接用 TeX编辑的是没有逻辑结构的东西,比如报纸,画报,广告等。像彩色杂志,图片多多,还有各种变化多端的分栏方式,肯定不能用 TeX 来排版。所以,TeX似乎不大适合艺术创作。另外,文学家可能不会用 TeX。实际上文学创作的人通常使用一些叫做 outliner 的程序来写草稿。还有,你可能不想用TeX 来编辑一封写给你妈妈的信。这样似乎用 TeX 的人都是喜欢偷懒的人,也就是说:科学家 :)

  31. 我是初学者,你推荐使用什么发行的 TeX?

    不太会用命令行的朋友可以到 http://www.ctex.org 下载配置好立即可用中文的 CTeX 套装。如果你硬盘很小的话可以安装 CTeX 套装基本版。请看 这里

    如 果你熟悉命令行操作又大部分时间在用英文,那么可以用 TeXLive CD。它不但包含了所有操作系统需要的程序,而且有许许多多宏包,如果你不是特别特殊的用户,有了它你可以完成你的任何任务。而且它直接拷贝到硬盘上就可 以用了,甚至可以从光盘运行。不过配置 TeXLive CD 的中文麻烦一点。