Friday, April 24, 2009

圍觀各路神仙們介紹學習TeX的歷程

原帖地址,包括了newsmth上斑竹milksea,CTeX斑竹neals以及神人yulewang等的精彩介紹。
http://bbs.ctex.org/viewthread.php?tid=48138
膜拜yulewang....簡直是神仙啊……
轉他的學習歷程如下:
------------------------------------------------------------------
其实我高中的时候用word输入公式输郁闷了,我就四处寻找能够 没有痛苦输公式的软件,找了一堆不满意,后来才知道有个好东东叫LaTeX。当初学习很简单,就是拿了个别人的额文章模仿着打了自己的第一篇作业,40多 页,很有成就感,从此以后就和TeX结下了不解之缘。教材其实看得很少,只是看李平的那本书简单地学习了一下LaTeX,再后来就看了下TeXBook。 由于都是些三脚猫功夫,使用过程其实实经常是去查文档,一回生两回熟,写了很多文档后基本就能熟练使用TeX了。

2006年我从CTeX论坛学到很多的东西,当时我还是个新手,zpxing, Neals, resolvent等大牛牛教会了我很多基础知识,是我的引路人。后来我在水木和CTeX上有一段时间几乎成了版霸,回答过新手上千个问题。

由于我高中的时候用的是学校的Mac(当时用的还是那个像台灯一样的iMac),比较熟悉Unix系统以及Unix上的程序开发,所以到了大学后,用得比 较多的Linux或者FreeBSD。但是由于Linux和FreeBSD上没有CTeX发行版,安装中文字体很不方便,而且网站上很多的文档都有错误, 虽然当时有一些人做了集成中文字体的TeXLive2005,但是始终多少有些问题,因此后来我就在水木上发了一个和liangzi同学合作的集成中文字 体和ctex宏包的TeXLive2005。非Windows系统一般字符集编码都设置为UTF-8,为了让这些平台的用户有更好的体验,我们又积极完善 了一些周边的脚本和宏包,比如ctexutf8。TeXLive 2007发布后,我写下了在网络上广为流传的Chinese Howto,并且也同时做了一个很多人现在仍然在用的字体包。可能ctex或者水木上,大家都是从这个途径和我认识的,呵呵。

我大部分时间都在和文档打交道,文档包括作业、软件的说明书、论文、书籍、源代码注释、幻灯片、出版社的项目、别人出钱帮忙排的论文等等。我其实只是一个 普通TeX用户,我后来所有在TeX社区做的工作,其实都是由于我需要完成某一个文档项目,而顺便把一些问题解决或者把某个功能实现而已。刚刚用TeX和 MetaPost可能还是懵懂,总觉得它功能挺强,作业论文幻灯片无所不包。但是一段时日下来,就会知道其中有诸多不足。因此从2007年开始我一边使用 非TeX的排版工具来完成TeX所不能完成的工作(比如我一大部分时间其实是在用InDesign排图文并茂的文章,用PowerPoint和 Keynote做幻灯片,用blender等软件做一些动画和图片),一边尝试改进TeX,尤其是对于中文、汉字、中文的操作系统的支持。因此也是从 2007年开始我开始尝试参加一些能够影响上游的活动。刚开始做的时候主要就是帮忙做一些测试,报告一些bug,可能这些问题在老外看来不是问题,因此常 常被忽略,但是对于中国用户来说会造成不少麻烦。比如2006年末,我帮忙翻译TeXLive的官方文档,2007年初又向TeXLive邮件列表上报告 了两三个安装时中国用户会遇到的bug,当时我初出茅庐,国外的开发者对我bug汇报其实并不太在意,但最终还是修复了这些bug,因此TeXLive 2007的是我向上游做贡献的开始,TeXLive也是第一次能够在非拉丁文用户名的Windows系统上正常安装,呵呵。

当时jjgod和yindian等同学热衷于折腾XeTeX,给JK报告了不少bug,在我看来这些人就是心目中的榜样,尤其是yindian,还写了著 名的zhspacing。为了向牛牛们学习,这年后我经常出没于各个TeX开发的环节中。其实我觉得国内需要更多的同学去参加这些工作,来让开发者注意到 中日韩用户的声音,同时对自己也是一种锻炼,况且做到这个并不难,比如我所报告的所有的bug和feature request,基本上都来自于我的文档项目。

2007年是LuaTeX的第一个测试版本发布,该年早些时候我就注意到了这个项目,只是当时中日韩用户并不看好它,反而倾向于XeTeX。后来年中开发 者表明LuaTeX的开发并非局限于Lua加上TeX,我就从这个时候开始看好这个项目。所以从这一年开始我就为这个项目做了很多的工作。LuaTeX早 年的时候特别烂,要么是编译不通过,要么就是一运行就core dump,即使能够跑起来,载入个plain,加个英文ttf字体就能够占用上百兆内存。不过由于当时课业负担也不重,因此我一直紧随着它的开发脚步。如 果没错的话,我应该是第一个能够使用LuaTeX调用中日韩字体的人,网络上目前流行的调用TTF中文字体的代码还是我改写的。我大概也是第一个向 LuaTeX报告问题的中国人。我报告的一个对于accent的bug被开发者修复后,我成为第一个能够在LuaTeX上运行LaTeX的人。

LuaTeX和ConTeXt的联系相当紧密,为了能够更好地用LuaTeX所提供的高级的功能,我在2007年左右成了ConTeXt用户,当然从这以 后我依然还是一个LaTeX和plain TeX用户。在ConTeXt社区中做了不少工作,也忽悠了一些热心的用户比如liyanrui来帮忙。经过长达半年多的和Hans的沟通和交 流,ConTeXt MKIV终于能够支持中英文排版。后来,我又成功地先后多次忽悠了开发者认真地考虑中文用户的需求,这些工作使得开发者改进软件,使得LuaTeX下的 ConTeXt载入Adobe四个中文字体所占用的内存从1.5G降低至300MB (ConTeXt载入一个typeface会分别载入不同的point size,因此内存消耗本来就要比plain TeX的\font大得多,因此300MB其实已经是个很低的数值了)。我大半的文档项目是使用ConTeXt完成的,因此在使用过程中遇到了各种各样的 问题,所以近两年来我提交了几十个bug report或feature request。应该是国内最为积极的ConTeXt用户了。

2008年是我大学中最忙的一年,但是依然在TeX社区中做了不少工作。比如我们彻底弄明白了为什么我们产生的PDF文件会有字体发虚的现象,同时由于在 LuaTeX那边混熟了,就很容易结识其他人,因此我常常和Wolfgang, Karl, Hans, Taco, Mojca, Yannis, Arthur等牛牛经常往来。彼此混熟后我提交的patch和bug report也越来越能够被那些开发者接受。所以我很顺理成章地成为了TeXLive的committer(虽然我几乎不怎么commit),以及 ConTeXt Minimals的FreeBSD平台的编译者。2007-2009年,我总计向LuaTeX、dvipdfmx、TeXLive、XeTeX的开发者 (在邮件列表,bugtracker,或者私下)报告过上百个bug,提交过近十个patch(07,08年对于TeX的代码理解很肤浅,出了问题基本上 不知怎么改,因此都只能给bug report)。

2009年寒假由于实在没事干,我花了一个星期第一次从头到尾看了遍TeX的代码(先前都是零零散散看的),算是对于TeX探索的一个了结。才感觉先前对 于TeX的很多认识其实是不准确的。这番经历使得我对TeX了如指掌。从此以后基本上我发现任何的bug,都能给出patch而不是和开发者吵架。不过可 悲的是,从今年下半年开始,我可能很少需要去处理中文文档了,pdfTeX估计能够满足我所有的文档需求了,因此我可能在TeX社区并不会如同往年那样活 跃。不过在今后的研究中,我会继续大量地使用TeX完成我的文档,同时,我未来所涉及的研究中肯定会涉及其他的一些开源软件(主要是 Blender,QT),在TeX社区的工作所获得的经验(比如阅读代码的技巧、打patch的技巧,和开发者交流的技巧等等),会使我在将来的研究中获 益许多。

8 comments:

Anonymous said...

是 milksea 吧,不是 milkren...

anyway,我很弱的,别叫我神人……
我在TeX世界就是个涉世不深的小孩子,即使在中国也不能和jjgod,yindian,milksea等大牛牛比,更不敢跟吴老师、张老师等先辈比。
我做的都是应该做的事情而已。

Ivan Z. G. Xiao said...

hey,开个玩笑而已,表达一下内心的景仰 :)
的确是milksea....因为我们学校bbs有个人叫milkren,不小心搞错了,马上改.

不过真的很佩服你们能在一样东西上钻这么深,而且还是花上自己那么多的业余时间.TeX社区有你们这群人是大家的福气.

Anonymous said...

>而且还是花上自己那么多的业余时间.TeX社区有你们这群人是大家的福气.

我对于网络游戏或者其他东西都几乎没有兴趣,只对漂亮的书籍和文档有兴趣。大家各有兴趣爱好嘛,都一样,呵呵。就好比我周围有好些人,所有的业余时间都花在了写诗,谈恋爱,画画,踢足球,拍DV上一样。

中文TeX社区我做的工作并不多,基本上就是我要排文档遇到啥问题了就去邮件列表吵架,这样LuaTeX和ConTeXt等项目由于我们这一大群power users就这么完善起来了,因此主要是开发者他们的功劳。

天天看文档、写文档、排文档,大学四年就这么一晃而过,快啊。马上要到头了,呵呵。

Ivan Z. G. Xiao said...

恩,看来你是对typography很有兴趣了.
可以帮人排版赚外快....

用TeX排出来的东西的确很赏心悦目,但是发觉我没有那么多精力去深入, 还是老老实实做一个普通用户, 开发工作交给各位高手去折腾就好了.....

快毕业了阿,准备在哪里高就阿?

Anonymous said...

目前的开发工作也是这么进行的,主要是用户提出建议,国外的引擎和格式开发者来码代码。ConTeXt的中文支持就是这么弄出来的。

我其实也就一普通用户,只是由于天天处理文档,处理的文档就要比一般用户多好多,要求自然会比一般的用户多一些,呵呵,因此上邮件列表提bug提feature request就勤一些。有些开发者不高兴满足的,我们就只能自己动手丰衣足食了。

毕业只是一段生活的结束,另一段生活才刚刚开始…… 我得继续宅五年,混个博士出来……

Ivan Z. G. Xiao said...

原來如此. 這麽說中文支持也算是國人爭取回來的咯.
其實我也比較想參與到一些linux的開源項目上, 無奈接觸比較晚, 等到現在稍微入了點門時, 已經比較忙了.

直博? 決心很大嘛. 錄取到哪裏了?

BTW. 不介意的話可以加我的gtalk or msn. 以後在latex應用碰到問題的話向您請教下 :)

(gtalk和msn的id都是iveney
分別是gmail.com和hotmail.com)

Anonymous said...

> 原來如此. 這麽說中文支持也算是國人爭取回來的咯.

基本上是国外的开发者和国内的开发者合作完成的。比如XeTeX中的inter char token机制就是开发者听取中文用户意见后新增的。

>其實我也比較想參與到一些linux的開源項目上, 無奈接觸比較晚, 等到現在稍微入了點門時, 已經比較忙了.

我到没有特别的参加项目的欲望。但有些是迫不得已,比如我的一些课题会用到OpenFOAM, Blender, QT,只好自己啃,我又不是学计算机的,所以折腾起来挺艰苦的:(

> 不介意的話可以加我的gtalk or msn.

已加

> 以後在latex應用碰到問題的話向您請教下

您客气了:)

>直博?

是的。还不知道能不能读出来……

Ivan Z. G. Xiao said...

贊,我特佩服那些不是學cs但是又對技術鑽研得很深的人.像我認識幾個讀經濟的對C programming與linux sys admin. 都精通熟練,我都崇拜死了.

如果在國內的話,應該不會``能不能讀出來''吧..
只是個時間問題, 我估計也要讀,恩... 大家好好幹 :)