Word之外的另一个世界——TeX和它的朋友们
广大科研搬砖工工作者常用的排版和绘图工具主要是以下几种:微软Office系列的Word、Powerpoint、Excel,Origin,Mathtype等等。这些软件都属于所见即所得类的软件,也就是说你在输入或者操作的同时能够实时地看到最终的输出结果。然而他们实际上只是理论上的所见即所得,在实际使用中,这些软件都或多或少的存在着以下这些缺点:
- 版本和兼容问题:同一个文件用不同版本的软件打开时,显示效果往往会有变化,最重要的是这种变化往往无法预知,难以避免。
- 格式与内容混为一体:在使用Word时,每输入一段文字,基本都要停滞一段时间,将键盘上连续打字的手移到鼠标上,点击软件上的各种按钮,设置格式。如果想等到完全输入完之后再修改格式,要么已经忘记了哪些地方需要修改,要么限于长时间的无聊的重复操作之中。
- 多软件的协同问题:我们在写论文或者做PPT的时候,总是免不了需要用到多个软件,比如用Excel处理数据,用Origin绘制图表。然而多个不同公司、不同类型的软件之间经常很难做到完美配合、合理分工。也许这里处理完的数据复制到那个软件里,格式就出了错,或者这里画的图在那个软件里发生了变形,产生了错误。这些情况不仅经常发生,而且很难解决,耗费了我们很多精力。
- 排版的细节问题:如果你看过国外排版精美的教科书,你也许会发现Word之类的软件排版出的文字有一种奇怪的感觉,文字之间的间隔、行与行之间的间距很僵硬。图片、表格和文字之间的结合也有一种粗糙感,显得不够专业。
相信每一个科研工作者或者几乎需要写作技术类文字的人都希望有一个更加完美的写作体系。这一个写作体系最好具有以下几个特点:
- 格式和内容的分离:输入内容的时间可以不考虑格式,修改格式的时候无需再回到具体的内容中。
- 美观而方便的公式输入:技术类文章中往往少不了公式,而传统的鼠标点击式的公式输入方式无疑是十分低效而丑陋的。
- 自动化的编号和引用系统:参考文献的编号和插入、章节的序号、目录的生成应该能够自动实现,不需要我们操心。
- 精确的、可自定义的绘图功能:示意图、流程图之类的图片中每一个元素的位置、大小、形状之类的参数应该是可以精确定义的,生成的图片应该是不受缩放影响的矢量格式。
- 一致的工作方式、丰富的可拓展性:无论是文字、公式、图片、还是表格、 参考文献都可以在一个软件里用一种方式生成,同时还能根据需要方便的植入其他功能。
也许有人会想,这么好的东西我怎么没听说过,应该还没出现吧。事实是,具有上述特点的写作系统不仅有、而且早就有了。然而由于一定的入门门槛,仅仅在相对较小的圈子中使用。然而,科研和技术工作者理应就是这一小圈子的目标受众,因此,我希望简单介绍一下Tex排版系统,让更多的人能够使用它,同时也介绍一些简单、强大的工具,希望能够降低一下初学者的入门门槛,不要在感受到Tex的魅力之前就被它吓倒。
Tex的简单历史和现状
Tex是由计算机专家Knuth(中文名高德纳)在80年代创造的,Knuth是以为编程大牛,他在写作的巨作《计算机编程艺术》第二卷的过程中发现当时使用的计算机排版系统实在是丑陋不堪,大牛就是大牛,不忍他的著作被糟糕的排版污染,就发挥自己的特长,花费了近十年的时间从头创造了一个新的排版系统,并将其命名为Tex,是希腊语艺术和技术两词的词头,同时创造的还有字体处理程序Metafont。大家可能已经猜到了,Tex其实是一门编程语言,只不过他的任务是进行排版。Tex作为一门编程语言,天生具有强大的功能性、拓展性和可移植性。但是最初的Tex实在是太复杂了,需要记忆数百个格式处理命令,即使是专家用起来也不轻松。后来一个名字以La开头的数学系博士在Tex的基础将格式和内容文件分离,形成了现在广为使用的Latex系统。现在的Latex最新版本是Latex2e。
对于我们中国的使用者来说,如果你直接去用原版的Latex的话,并不是一件轻松的事,应为要让Tex支持中文需要复杂的设置。幸好,已经有前人帮我们做好了功课。现在大部分中国Latex使用者使用的是已经配置好的CTex套装。这一套装已经集成了Tex系统、编译器、绝大多数宏包、pdf阅读器等一系列工具,到手即用,非常方便,大家可以搜索下载。
Tex学习资源推荐
Tex是一个非常复杂的系统,然而大部分人不需要用到它的全部功能,只需要用到一小部分即可。国内有一些非常热心人致力于Tex的普及工作,下面是一些常用的资源:
- Latex Studio:http://www.latexstudio.net/ 国内最为活跃和全面的Latex综合站点,提供Latex教程、资源、模板等等。
- 《Latex2e完全学习手册》非常全面的中文入门教程,覆盖了Latex的方方面面,对于一般的使用者来说已经足够。
- 如果你觉得上面的学习手册篇幅太长,或者你已经有一定的Latex基础,可以看看K.L Wu 所写的《简单粗暴Latex》,这本书的latex源码作者也共享出来了,可以到此地址下载:https://github.com/wklchris/Note-by-LaTeX/tree/master/LaTeX-cn
Latex的重要性
Latex的学习曲线是十分陡峭的,理论上,你可以直接将一些模板拿来使用,改改文字就行了。但是,实际上,你总会遇到各种各样的问题。对于很多人来说,碰到一个Error,却有找不到错误所在的感觉是十分令人抓狂的。而且,一旦你不满足与现成的模板,想对格式做一些针对性的修改,往往有一些无所适从。你必须去检索、查阅大量的资料。这些特点注定了Latex的小众。那么我们为什么还要学习Latex呢?
回想起当初走进Latex这个大坑的缘由,吸引我努力学习Latex的第一个理由就是对完美排版的追求。有过完整的Latex使用体验的人大多会被它排版的精致和美观所感动。和同样内容的Word文档对比,这种精致感是显而易见的,就像看到花了几百大洋买的精装书一样由衷发自内心的愉悦感。当你一旦知道了有很好的排版方式存在,就越来越不能忍受那些粗糙而低劣的效果。尤其对于数学公式而言,没有其他任何工具可以提供和Latex一样的效果。另一个理由就是Latex可以避免重复劳动。我十分讨厌Word上一遍遍的鼠标点击、拖选、再点击,就是为了把某些段落改个格式。除了时间上的浪费,损害最大的其实是写作时的心情。而Latex的哲学是格式和内容的分离。无论多少内容、无论分布于文档的何处,都可以通过一两个命令一次性完成调整。就像学习其他知识一样,一旦你掌握了某个技巧,你可以永远享受它带来的好处。一旦你学会了某个Latex命令,你以后再也不需要花时间去学它了。还有一个理由,是Latex对特殊格式的处理能力。比如说,生物领域的学者往往需要排版大段的DNA序列,用Word来处理会非常头疼。而通过自定义Latex命令,你可以实现下面的效果。又或者你需要插入外文、音阶之类的特殊符号,在Word环境下,你需要非常费力的去找、然而插入进去,但是插入的特殊符号往往与其他文字格格不入。Latex可以通过调入宏包的方式很方便的实现。
Latex绘图——Tikz 和 pstricks
Latex的绘图曾经是一个麻烦的问题。当然,你可以用其他工具将图片画好之后直接插入进来,但是,那样的话图片的清晰度、图片与文本之间的协调型必然会大打折扣。对于已经进了Latex大坑的完美主义者肯定是不能容忍的事。所以有人搞出了tikz和pstricks。它们是Latex的宏包,通过程序语言能够直接绘制出各种复杂精美的图形。原则上,如果你是个编程控的,你可以精确的定义图形上每一个数据点、坐标轴、图形的坐标、大小、位置、样式。然而,大部分普通用户往往会被大段的程序吓到,不信的话可以去http://www.texample.net/tikz/ 上感受一下。这里我就不介绍tikz的具体语法和使用了(毕竟我自己也不会,如果你想学的话,可以去看看这个:http://blog.sina.com.cn/s/blog_01ea59580100urwi.html )。这里我介绍一个图形界面工具,帮助大家用更简单的方法画出美观的图形。
Matlab2Tikz
对于工程技术类工作者来说,Matlab是一个常用工具。Matlab输出的函数图表可以通过非常简单的方法输出为Tikz图表,直接插入到Latex文件中。这样,你既可以利用Matlab强大的数据处理和绘图功能,又能利用Tikz的绘图、排版功能,在文本中插入风格一致、可编辑的矢量位图。经过latex输出的图片在精细度、美观度上都比Matlab的原图有所提升。这个程序在数学建模之类的比赛中非常有用,能够在保证效率的前提下大大提高输出文件的美观度。
事实上,除了Matlab,Mathematica软件的数据也可以通过简单的处理导入Tikz来绘制,详情可见http://bbs.ctex.org/forum.php?mod=viewthread&tid=40700&highlight= 。
GeoGebra
初见GeoGebra的时候,以为它只是一个其貌不扬的小工具。然而简单使用一番之后,却发现它的功能真是出乎意料的强大。 一方面,GeoGebra 是一个动态的几何软件。你可以在上面画点、向量、线段、直线、多边形、圆锥曲线,甚至是函数,事后你还可以改变它们的属性。另一方面,你也可以直接输入方程和点坐标来绘制图形。GeoGebra 也有处理变数的能力(这些变数可以是一个数字、角度、向量或点坐标),它也可以对函数作微分与积分,找出方程的根或计算函数的极大极小值。总的来说,GeoGebra是一个面向中学数学教育的功能全面的综合数学平台。之所以在介绍Latex的这篇文章里介绍这个软件,是因为它可以方便的将绘制的各种平面函数图形直接导出为Tikz格式的latex文件。对于中学数学老师来说,出试卷方便了很多啊(不要打我)。
初步感觉,Geogebra真的是一个很强大的软件,但是知名度很低。我自己也没怎么用过,无法过多评价,希望大家多多挖掘它的潜力。
Dia
Dia是一个简单好用的小工具。它主要是用来画各种流程图、UML图。同样支持直接导出为Tikz格式。相比于现在各种各样的流程图软件来说,Dia体积小巧、界面简洁、功能强大,是个不错的选择。
Inkscape
Inkscape是一个类似于Adobe illustrator的矢量绘图软件。免费、小巧,功能同样强大。Inkscape可以将绘制的矢量图导出为Latex支持的格式。
TikzEdt
Tikzedt是一个专门用来绘制Tikz图形的软件,它支持Tikz图形的实时编译预览,内置了很多命令,大大降低了Tikz的使用门槛。
好工具的意义不在它自身
很多人会问这样一个问题:Word已经够用了,我为什么要学Latex?我自己也问过自己同样的问题。其实这个问题的答案很简单:如果你觉得Word已经够用的话,你不需要去学Latex。就像天天用电脑的人也没必要去学怎么造计算机一样。这篇文章标题的前半部分已经强调了,这是一个科研神器,它更适用于理工科技术类人员。尤其适用于能够自己产出知识的那一部分。就像望子成龙的父母一样,每一个研究出新想法、新理论的人都希望给自己辛苦计算出的公式、图形、文字一个好的外表,在他们看来,学习Latex的成本远远不及量子力学,而因为糟糕的排版使得其他人不愿意认真阅读背后的内容所带来的损失无疑大得多。
同时,好工具的意义并不在于工具本身。优秀的工具能够让你重新去思考你所做的事。学习Latex的过程能够重新审视写作和排版的内涵,让你掌握一个更为优秀的工作理念。正如知乎上这个问题所问的一样:如何做到像使用 LaTeX 那样优雅地使用 Word?。即使你放弃了Latex,重新用起了Word,它依然发挥了它的价值。