缘起
上大学以前不管写什么文章都是用的 Microsoft Office Word。那个时候,依稀知道一点内容与样式分离的原则,并且一直为数学公式的排版效果头痛不已。
后来上了大学。第一个学期的课有线性代数。有一次上课的时候,老师提到,用 TeX 和 LaTeX 排版数学公式效果很好。
后来过了几个月,有一次上网的时候,突然想到了老师的这句话,于是就用上了。一开始用的是 CTeX 发行版,引擎是 LaTeX,中文支持用的是 CJK,还挺好用的。
后来又过了几年,问了一个学数学的师兄用的是什么发行版。师兄说是 TeX Live,于是我也试了试。我用的引擎还是 LaTeX,中文支持用的是 xeCJK,比 CTeX 发行版更好。
其实一直让我很不满的是 LaTeX 引擎。首先是可定制性太差,改个页眉页脚还要插件。然后是命令混乱,很多命令的功能是相同的。最后实在不能忍受的是,参考文档是要钱的。
后来在 CTeX 论坛上听说了 ConTeXt,就去看了看,一看就爱上了。只是一直忙于学业,没时间学习。这几天突然闲下来了,就了了这个心愿吧。
TeX、LaTeX、ConTeXt 的关系
话说很多学数学和自然科学的学生都被逼着用 LaTeX 写论文,却一直很困惑 TeX 和 LaTeX 的关系。
TeX 是大牛 Donald Knuth 写的。Knuth 同学写了一套书叫 The Art of Computer Programming,然而他对出版社的排版效果非常不满,于是决定自己写一个排版系统,TeX 就诞生了。
LaTeX 是大牛 Leslie Lamport 写的。Lamport 同学也用 TeX,但是他觉得太难用了,于是自己改改,就有了 LaTeX。
LaTeX 风靡全球。但是还有些人不满,比如我和 Hans Hagen。差别在于,我坐着什么都没干,而大牛 Hagen 编写了 ConTeXt。
简单来说,可以认为 LaTeX 和 ConTeXt 都是 TeX 的扩展。严格来说这些其实都称为 TeX,而原始的 TeX 被称为 Plain TeX。LaTeX 和 ConTeXt 是平行的关系,前者比后者用户多,后者比前者好用,至少我这么觉得。
ConTeXt 的安装和中文环境的建立
ConTeXt 的官方网站是
http://www.contextgarden.net/我在 Windows 下面使用,用 Unix/Linux 的同学智商比较高,所以一定能自己找到对应的方法。下面都是说 Windows 环境。
用下面这个链接下载安装程序:
http://minimals.contextgarden.net/setup/context-setup-mswin.zip解压到某个目录,例如
C:\context\进去发现里面有个
first-setup.bat,运行这个就可以安装了。但是我们不这样做,我们启动命令行,这样安装:first-setup.bat --extras="t-simplefonts"可以看出来加这个参数是为了多安装一个
simplefonts 模块,这个模块将用于建立中文环境。运行之后不用管了,安装是在线的,保持良好的 Internet 连接。以后更新呢,运行同样的命令就好了,非常方便。
然后如下建立一个快捷方式:
%SystemRoot%\system32\cmd.exe /k C:\context\tex\setuptex.bat这是因为 ConTeXt 的运行需要一系列环境变量,这个批处理就是设置环境变量的,当然只在这个命令行中生效,不影响整个系统。
启动这个快捷方式,就能够运行 ConTeXt 了。
先运行这个,扫描所有的字体:
mtxrun --script fonts --reload然后运行这个打印字体列表:
mtxrun --script fonts --list --pattern=* --all看看你需要的系统字体是不是在里面,如果都在,就说明 ConTeXt 能够识别和使用系统字体了。
用你最喜欢的编辑器写一个文档,例如:
\usemodule[simplefonts] \setmainfont[texgyrepagella] \setsansfont[texgyreheros] \setmonofont[texgyrecursor] \setcjkmainfont[adobesongstd] \setcjksansfont[adobeheitistd] \setcjkmonofont[adobefangsongstd] \setscript[hanzi] \starttext Where there is a will, there is a way. 我命由我不由天。 \stoptext注意如果你没有这里使用的六款字体,编译会出错。你可以更改为系统里面安装的其他字体,注意这里使用的字体名是前面提到的字体列表的第一列。
假设文件名叫做 test.tex,用以下命令编译这个文档:
context test显然,扩展名可以省略。
编译出一个 PDF 文件,在我这里效果如下
![]() |
| From Blog |
至此,ConTeXt 环境就建立起来了,并且支持中文。
