阅读本文以前,最好已经读过『序幕有些长』segmentfault
这个星球上最复杂庞大的软件可能不是 Unix-like 与 Windows 这些操做系统,像 TeX Live 这种网罗了几乎全部的 TeX 及其周边工具的软件体系(天然也是包括 ConTeXt 的)也差很少拥有一我的一辈子也没法穷尽其一切的复杂性。这种复杂性也许并不是来自开发者们孜孜不倦的努力,而是来自他们的耐心经营,因而时间就帮助他们慢慢的让系统膨胀,让复杂涌现。因而系统就会尽力保持稳定,其结果也就变得审慎与保守。bash
ConTeXt Standalone 仅关注 ConTeXt 自身的完整性,可以为 ConTeXt 自身的运行提供一个自成一体的最小运行环境——TeX 引擎、宏包、周边工具、字体以及文档,这些加起来不过占据 200 MB 左右的空间,并且只要你愿意,可让它变得更小一点——我曾经制做过一份不到 20 MB 的只支持 Plain TeX 的 LuaTeX 运行环境。因此,这是 ConTeXt Standalone 的前身叫作『ConTeXt Minimals』的缘由。网络
在 Linux 中经过网络安装 ConTeXt Standalone 的过程很是简单,若是将建立目录与下载文件也算做安装步骤,那么只需三步:编辑器
$ mkdir ~/context ; cd ~/context # 能够换成你喜欢的目录 $ wget http://minimals.contextgarden.net/setup/first-setup.sh $ sh ./first-setup.sh --engine=luatex
上述步骤可将 ConTeXt MkIV 安装到 ~/context
目录。first-setup.sh 是个 Shell 脚本,它的 --engine=luatex
选项表示只安装 MkIV,不安装 MkII 文件。对于 ConTeXt 的新用户而言,安装 MkII 的意义不大。工具
first-setup.sh 也能用于 ConTeXt MkIV 的升级。升级步骤只是比安装步骤省去建立 context
目录的环节,即:post
$ cd ~/context $ wget http://minimals.contextgarden.net/setup/first-setup.sh $ sh ./first-setup.sh --engine=luatex
接下来,用你喜欢的文本编辑器,在 /tmp 目录创建一份名为 hello.tex 的文件,其内容以下:测试
\starttext \title{Hello \ConTeXt} Here I come! \stoptext
而后便可使用 context
命令将 hello.tex 编译为 hello.pdf 文件。在调用 context
命令以前,须要开启 ConTeXt 运行环境,不然 Shell 不知道 context
命令对应的可执行文件位于何处。开启 ConTeXt 运行环境的命令是:字体
$ source ~/context/tex/setuptex
setuptex 文件是一份 Shell 脚本,其中定义了 PATH
变量,而 Shell 是经过 PATH
变量的值在系统搜寻可执行文件的。上述的 source
命令可以使得这些环境变量在当前 Shell 环境中生效。也就是说,上述命令只需在当前终端中执行一次便可,执行一次便可,执行一次便可……重要的事重复三遍!lua
开启了 ConTeXt 运行环境以后,便可在当前 Shell 中使用 context
编译 hello.tex 文件:操作系统
$ context hello # 不须要输入 hello.tex 的后缀 ".tex"
而后使用 PDF 阅读器,例如 evince,查看生成的 pdf 文件:
$ evince hello.pdf
一切就这么简单!
若是 ConTeXt Standalone 不采用这种运行方式,那么势必会形成天无二日,土无二主的局面。由于若是你的系统装有 TeX Live,那么它与 ConTeXt 有交集的那部分构件可能会存在版本的不一样,从而由于同名而发生冲突。例如,TeX Live 中有一个 luatex
,而 ConTeXt MkIV 中也有个 luatex
。因为 TeX Live 的发行周期是 1 年,而在这一年中 ConTeXt MkIV 中的 luatex
的版本可能已经更新了屡次,所以它们虽然都有 luatex
,可是它们是不一样的 luatex
。
虽然 ConTeXt 秉持睦邻友好的原则,仅在运行 context
以前开启运行环境,但仍是有些繁琐了一些,能够利用 Shell 脚本简化这一过程。在 /usr/local/bin
目录创建一份名为 ctx 的 Bash 脚本,内容以下:
#!/bin/bash source /opt/context/tex/setuptex /opt/context/tex context $@
而后使得ctx 具有可执行权限:
$ sudo chmod +x /usr/local/bin/ctx
之后能够直接使用 ctx
命令去编译 .tex 文件,例如:
$ ctx hello
ConTeXt Standalone 能够跨 GNU/Linux、MS Windows 以及 Mac OS X 等平台运行。关于它的更多的介绍,请参考:http://wiki.contextgarden.net/ConTeXt_Standalone
如今,ConTeXt Standalone 可以初步支持中文排版,前提是须要向它提供中文字体。由于适合排版使用的中文字体,目前几乎没有自由或无偿使用的字体,因此 ConTeXt Standalone 从法律上没法将咱们在 MS Word 中习惯使用的那些中文字体打包进来。
如今假设你具备 simsun.ttf 这份字体文件,它就是 MS Word 中用的最多的宋体。要将这个字体安装到 ConTeXt 中,最简单的办法在你的 ConTeXt 安装目录中建立字体目录,专门用于存放中文字体。例如:
$ mkdir -p ~/context/tex/texmf-local/fonts/truetype/non-free $ cp simsun.ttf ~/context/tex/texmf-local/fonts/truetype/non-free
而后刷新一下 ConTeXt 的字体数据信息,至关于将新安装的字体『注册』到 ConTeXt 的字体数据表中,以便它可以查找到字体文件。
$ mtxrun --script fonts --reload
而后用下面这份 test-zh-fonts.tex 验证所添加的 simsun.ttf 是否可用:
\definefontfamily[myfont][serif][nsimsun] \setscript[hanzi] \setupbodyfont[myfont] \starttext 测试是否支持中文字体。 \stoptext
上述第一行代码便做加载 simsun.ttf 之用。要注意的是,ConTeXt 是使用字体名来加载字体,而非字体文件。要查看所安装的字体文件对应的字体名,例如 simsun.ttf,可以使用如下命令:
mtxrun --script fonts --list --all
输出结果相似:
... ... ... kaiti kaiti simkai.ttf kaitinormal kaiti simkai.ttf kaitiregular kaiti simkai.ttf nsimsun nsimsun simsun.ttf nsimsunnormal nsimsun simsun.ttf nsimsunregular nsimsun simsun.ttf ... ... ...
从输出结果的第一列中找出 simsun.ttf 对应的字体名,而后在 test-zh-fonts.tex 中使用。若是一份字体文件对应多个字体名,随便取一个字体名用便可。
目前,对于不怎么讲究的中文排版,ConTeXt 目前对中文的支持勉强够用。若是但愿对中文标点符号的排版作一些控制,例如相邻标点的间距调整与文本左右边界处标点与边界对其等,ConTeXt 便无能为力了。为了使得 ConTeXt 能对中文支持的更好一些,我写了一个 zhfonts 模块,它可以解决一些问题,但并不是所有问题。有关 zhfonts 的安装与用法请参考:http://garfileo.is-programmer.com/posts/23740