Emacs 23 需要两款字体的支持

昨天,又遇到在 Emacs 23 中无法启用 ibus 的情况。

Gentoo Portage 里给出了这样的提示:

You need to install some fonts for Emacs.
Installing media-fonts/font-adobe-{75,100}dpi on the X server's
machine would satisfy basic Emacs requirements under X11.
See also http://www.gentoo.org/proj/en/lisp/emacs/xft.xml
for how to enable anti-aliased fonts.

发现 Emacs 还真变态。现代一点的文本编辑器有哪个还需要跟字体勾结在一起呢?

冯友兰与《中国哲学史新编》

最近上厕所的时候,通常是带着冯友兰先生的《中国哲学简史》而去的,虽然在行为上有些亵渎,但是在精神上却是极为尊崇的。所以在去了 N 次厕所之后,感觉已将这本书大致翻阅了一遍,便开始在网络上四处搜索冯友兰先生的其他作品。

首先是找到了他在大陆解放(台湾人说是沦陷)之前的出版的《中国哲学史》,分上下两卷。由于这本书是竖排的,而且里面大段大段的古代文献的原文引用,阅读有些吃力。后来看到有人评论,说冯友兰早期的著作还不能算是哲学史,只是历代中国哲学资料的汇编。

那么好吧,我就继续搜索,发现冯友兰先生在上个世纪 70 年代初期开始编写的《中国哲学史新编》,分上中下三卷,共六册。史料说冯友兰先生在打算开始搞哲学史新编之前(1949 年),曾经给毛主席写了一封信,大意是说自己在过去讲封建哲学,帮了国民党的忙,现在决心改造思想,学习马克思主义,准备在五年之内用马克思主义的立场、观点和方法,重新写一部中国哲学史。毛主席收到这封信之后,貌似有些凶狠的写了一封回信:

友兰先生:

十月五日来函已悉。我们是欢迎人们进步的。像你这样的人,过去犯过错误,现在准备改正错误,如果能实践,那是好的。也不必急于求效,可以慢慢地改。总以采取老实态度为宜。此复。敬颂

教祺!

毛泽东

十月十三日 

然后,冯友兰先生学习了一番马克思主义之后,写出了中国哲学史新编的第一、二册,但是到了文革开始的时候,这项工作就停止了。在文革时期,冯友兰先生所呈现出的“气节”问题一直被许多后人所不齿。我对此不以为然,难道非要在文革时期去自杀或者去精神分裂才能体现知识分子的气节么?冯很早就将“阐旧邦以辅新命”作为自己的努力方向,苟全性命于乱世,等待机会来实现自己的抱负,这个算不算气节?历史上就有苏武牧羊,王佐断臂的故事,我认为这样的人不仅有气节,而且是大气节。

其实用气节这种东西去否定一个历史人物,真是再简单也不过了,只需将某个历史人物的只言片语从那个特定的历史时期中抽出来,然后用现代人的思维狂批一通,然后彻底否定掉这个人以及他的所有主张。爱屋及乌的反面就是恨乌及屋,都是比较极端的思想。这种思想的典型表现就是在批判另外某种思想的时候,通常都是不去认真对这种思想研究一番,而是倾向于人云亦云,没有真正形成自己的见识,几分钟就得出了结论。文革虽然早已过去了数十年,但是文革的遗毒还是屡屡可见。

我也是有点极端的倾向,当我知道了上述的那些历史情节之后,我不禁对冯的为人也有了一些轻视,毕竟他跟我心目中的那些大义凛然的英雄人物相差太远。当我打开冯的《中国哲学史新编》的上卷,一眼望去,到处都是马克思说什么什么,恩格斯说什么什么,列宁说什么什么,还有毛泽东说什么什么……用现代人的思维来看,这个简直没劲透了。写这本历史书的人是你冯友兰,那些人说什么什么干你什么事呢?他毛泽东所写的书里怎么不写冯友兰说什么什么呢?不过,仔细想想那个时代,我才发现自己没劲透了,为什么非要去拿着放大镜去看人家的污点,而不能扔掉放大镜去看看人家的全貌?我到底在意的是中国哲学史还是马克思主义,假如我真的想去从冯的书里去了解中国哲学史的话,完全可以不理睬那些伟人说什么什么,只需去看冯说什么什么就可以了。

冯友兰在晚年的时候,写出了《中国哲学史新编》的第七册,是讲中国哲学近代史的,于 1990 年完成。传说这本书写到最后,他老人家已经目不能视,只能靠口述,由弟子代笔而写。但是这本“人之将死,其言也善“的书,当时在大陆没能出版,结果在香港出版了。再后来,1999 年,这本第七册在广东人民出版社以单行本的形式出版了,换了个名字,叫做《中国现代哲学史》。

我对中国哲学谈不上什么研究,充其量只是个业余到不能再业余的爱好者了。当我突然感兴趣要去读一本系统的介绍中国哲学发展历史的书,却遭遇了这么多的故事。总的来说,我认为这本书可以读,但是要放下一些偏见。另外,第七卷更要认真的读,因为它表现出冯友兰先生最后的客观。

跟 Asymptote 认识了一下

在 2010 年初的某一个寒冷的晚上,一个叫做 Garfileo 的人类打开空调之后,开始考虑学习 Asymptote 的事情。这原本是他计划之外的事情。原来的计划是学习 MathGL,不过当他打开了 MathGL 的源码,看到许多类似下面那样的代码,很快就放弃了。

mreal pp[3*31]; 
bool tt[31];
//... ...
for(v=x;v<10*x;v+=x) if(v>Min.x && v<Max.x) DrawXTick(v,y0,z0,ddy,ddz,1);
//... ...
bool both = x.nx*x.ny*x.nz==n*m*l && y.nx*y.ny*y.nz==n*m*l && z.nx*z.ny*z.nz==n*m*l;

Garfileo 似乎是比往年有所进步。他开始不满足自己只是一个不问细节只求结果的终端用户,他开始幻想自己也许会偶尔 hack 一些代码,不过只有他认为自己有能力看懂的代码才是值得 hack 的。也许以后能够让他接受的自由/开源软件,必须得是源码干净一些的。子曾经曰过:色恶不食,臭恶不食,失饪不食,不时不食……

阅读过 CTeX 论坛里的矢量图强人 cvgmt 的所写的 asy 教程后, 开始动手搭建 Asymptote + ConTeXt Minimals 这样一个作图环境。之所以是 ConTeXt Minimals,而不是 TeX Live,这纯属个人癖好。对于 Asymptote 而言,ConTeXt Minimals 的作用仅仅是用于 Asymptote 所绘制的图形中的文字标注。

现在选择 ConTeXt Minimals 与 Asymptote 这样的组合,如果是从编译源码来安装 Asymptote,那么最大的痛苦就是不得不事先安装一个满足需求的 LaTeX 环境,因为 Asymptote 源码的编译需要它的支持。当然,这种杯具只是具有一点完美主义倾向的人方能拥有的。如果不那么在意一些无关主题的细节(主要是 Asymptote 文档的编译问题),可以完全不需要 LaTeX 环境。

Asymptote 的项目主页上可以下到最新的源码包,在下载过程中,可以顺便瞻仰一下 Asymptote 的画展。获得 Asymptote 源码包之后,先不要急着解包以及 `make && make install`,要先解决 LaTeX 环境的问题。

在 Linux 发行版里,要建立一个较新的 LaTeX 环境,是以尽快删除发行版为你安装的那些 TeX 软件作为见面礼的。我应当告诉大家一个“真相”:那些 Linux 发行版的开发者们是比较轻视 TeX 的,他们往往乐于追随 GNOME 或 KDE 这样的套件的最新版本,却从来也不理睬 TeX 套件的最新版本。像 Ubuntu、Fedora、Suse、Gentoo、Archlinux……这些发行版,在 2010 年的时候,软件仓库里居然还没有收录 TeX Live 2009。或许只有 Debian 例外,在 TeX Live 2009 释出后不久就收录到软件仓库里了。这里应当赞美一下伟大却不哗众取宠的 Debian 开发者!

现在,当你成功的将 Linux 发行版为你安装的 TeX Live 驱逐出境并且永世不再录用它之后,就可以手动安装 TeX Live 2009 了,具体安装方法见这里,郑重推荐采用 "medium scheme" 模式进行安装。装完后,再使用 tlmgr 工具将 movie15 宏包装上。

搭建了 TeX Live 提供的 LaTeX 环境之后,就可以将下载的 Asymptote 包解开,然后使用以下命令进行编译、安装:

$ ./configure --with-context=/opt/context/tex/texmf-local/tex/context/third
$ make all
$ sudo make install

编译安装后,在 /usr/local/bin 目录里会有 asy 程序,我们用它来编译 .asy 文件,从而产生矢量图形。另外在 /usr/local/share/asymptote 目录中会有一些 asy 库文件,在使用 Asymptote 绘图时,经常需要它们的支持。

安装完后,可通过以下示例验证一下 ConTeXt MkIV 能否与 Asymptote 协同工作。

texpreamble ("\usemodule[zhfonts]");
defaultpen (font ("zhfonts", "ss") + linewidth (1pt));
import three;
size (400);
currentprojection = orthographic(-2, -2, 1);
path[] g = texpath("□□□");
for (path p:g) {
    draw (path3 (p), red + 1pt);
    draw (extrude (p, 2Z), yellow);
    draw (shift (2Z) * path3 (p), red + 1pt);
}

使用以下命令编译上述 asy 绘图代码:

$ 开启 ConTeXt Minimals 工作环境
$ asy -noV -noprc -f pdf -tex context -maxtile="(512, 512)" this.asy

编译结果类似下图所示:

http://garfileo.is-programmer.com/user_files/garfileo/Image/some-test/asy.png

示例中的 "\usemodule[zhfonts]" 表示使用我写的一个 ConTeXt 模块——zhfonts,它主要是为了方便在 ConTeXt 中加载中文字体,可从 http://github.com/liyanrui 下载。

有关 ConTeXt 以及 ConTeXt Minimals 的一些知识,可参考:

1.  序幕有点长
2.  这就是 ConTeXt Minimals
3.  不仅仅是为了中文

有关 GObject 的网络文档

这几日心甘情愿地放着正事不做而被 GObject 虐,又看了一遍 GObject 参考手册,结果还是一头雾水,感觉这个手册不是写给像我这般愚蠢的人看的。

发现对岸那边有人用 OOo 制作了 4 份演示文档,并提供了一些较具说明性的示例代码,可从其项目主页下载。演示文档做的很是言简意赅,提供的示例也很有代表性。

最后,比较值得阅读的资料是 cloverprince 写的一系列笔记,不过是英文的,内容上自下向上的分析了 GObject 的一些重要的知识点。

建议想学习 GObject 的同学,最好是先阅读以上笔记,然后再去阅读官方的 GObject 参考手册。