Oct 30, 2012

天下无双的LaTeX

我曾经以为,LaTeX的无敌之处在于适合写充满公式,图表,交叉引用和复杂结构的科学文献或者技术文档。

但是我最近发现,只有把问题简单到纯粹自然语言,才能更显LaTeX的强大。

我最近只用ASCII码字符写teaching statement和research statement. 为了方便,我用了Google Docs. 然后我发现,Google终于作出了一个让我感觉烂的产品——当然,不是Google技术水平烂,而是WYSIWYG的编辑器无法很好解决的问题:全局优化排版。当然,还有一个烂的地方是LaTeX上可以用的某些字体Google Docs里面没有,比如Bookman.

举个例子,因为英语26个字母宽度不同(除非你用monospace字体),单词包含的字母数量也不同,一个很明显的问题是一行的结尾未必是一个单词的结尾(若不打破一个单词)。但是,如果每行长度不同,很难看。地球人想了很多办法,最笨的办法即强迫每一行结尾都是靠右对齐,曰 justify。幸好英语单词之间有空格,Microsoft为了如此,只好把某些行单词间空格变的很长,在写公式或者网址的时候,这个问题很明显。LibreOffice/OpenOffice早于Microsoft就实现了地球人在活字印刷时代发明的办法——把单词破行加横线连起来。但是,还是很丑。

让我们来看看天下无双的LaTeX怎么办的。Donald E. Knuth同学想(这是我推测,未在Knuth的paper中发现),地球人看字符不是公平的。比如,句号后面的空格地球人就忽视了,因为那代表一句话的结尾。所以,空格应该是动态的,逗号后面的空格可以比单词之间空格大,句号后面的空格可以更大。短的单词之间间距可以大一些,长的单词之间间距小一些。不信你自己用LaTeX再用Micro$oft Word排版两段话,打印出来拿在手上,你会发现你根本意识不到LaTeX里面空格的长度是不同的,而看Word的结果,你一扫即可感觉有些单词很挤,有的很松。LaTeX里面有很多ZB的指令用来控制优化,比如,你可以用\hyphenpenalty=100000来几乎阻止LaTeX把单词破行。

而这样的优化,必须至少先把文档扫一遍——否则你都不知道某个单词该在哪一行。在WYSIWYG的编辑器上,除非你每敲一个单词就把优化算法拿出来跑一次,做不到的。但是这样计算量太大了。

以后给女生写情书,一定要用LaTeX写。

"Microsoft has no taste. Absolutely no taste. " - Steve Jobs

Oct 25, 2012

雨花台还死了文天祥等真烈士

在我年幼时,共匪经常拉大家去雨花台,所谓的爱国主义教育基地,去教育大家,那里死了很多烈士,都是共产党,没有共产党就没新中国。

其实,雨花台死了很多著名的烈士,比如文天祥,比如方孝濡,还有辛亥革命雨花台之役阵亡将士,首都保卫战阵亡将士。其他在那里被杀的,不是日军战犯,就是共匪。

共匪标榜爱国教育基地,却不提这些真的中国的脊梁,亦不提被杀的日本人——比如搞百人斩的两个日本小军官。

因为这一切,都和共匪无关:为民族死的,关共匪鸟事,共匪要的是党天下;日本人是国民政府和盟军杀的,共匪沾不上光——何况共匪认为国民政府是不抗日的,怎么会杀日本战犯?

文天祥这样有种的人,居然和共匪沦落到一起,此乃天下最不幸的事。而我等居然和这种流氓生活在一个时代,不能吃夫子庙小吃,只能留在德州吃烤肉,实为人生的悲剧。

当然,神让我生在这个时代,一定有个使命,就是把共匪全杀了,然后让我们的后代提起雨花台想到的是文天祥这样有种的人,和我们中国人杀掉的日本战犯——这才是爱国主义教育基地。

PS:怪不得共匪最近几年说文天祥,岳飞不是民族英雄了。