我的Gentoo系统备份与还原方案
Gentoo下如何编译安装xetex-dev
Java 应用程序中文显示及输入的解决方案现在已经可以:$ sudo emerge -avt texlive-xetex 来安装 xetex 0.997 了。下文无需再看。
我的系统中安装了texlive 2007套件,该套件中的xetex版本是0.996。最近yindian写了一个zhspacing宏包,可以帮助xetex中文用户处理中文标点间距紧责、中英文字体自动切换等问题。但是zhspacing是利用的xetex-0.997提供的几个特性,因此xetex-0.996是不行的。对于Linux用户,目前只有从xetex svn上迁出 (checkout) 正在开发中的xetex-0.997,并进行编译后才能得到支持zhspacing宏包的xetex。下面讲一讲我的做法。
1 获取xetex源码
首先是获取xetex与xdvipdfmx的svn版本,在终端当前的工作目录下:
$ svn co http://scripts.sil.org/svn-public/xdvipdfmx/TRUNK xdvipdfmx-dev
这样就将xetex与xdvipdfmx的源码分别下载到当前工作目录的xetex-dev与xdvipdfmx-dev目录下了。
2 编译kpathsea库
因为要编译xetex与xdvipdfmx,需要kpathsea库的支持,但是texlive 2007安装时没有包含kpathsea库,所以也只好自己从texlive 2007光盘镜像中解出kpathsea源码自行编译。
在TeXlive的光盘中的source目录下有source.tar.bz2文件,我们将它解压到临时目录中。解压出来的文件中有一个texk目录,其下有kpathsea目录,这就是kpathsea的源文件。关于如何编译kpathsea库,可以参考kpathsea目录中的INSTALL文件。如果你不想阅读这份英文文档,而且对我也足够信任,可以参考一下我的编译过程。
首先进入kpathsea目录,执行:
然后执行make,进行编译:
这时,你可能会得到这样的错误信息:
/bin/sh: ../libtool: 没有那个文件或目录
make: *** [tex-file.lo] 错误 127
之所以得到这样的错误信息,是因为现在你是在单独编译kpathsea源码,而不是在编译整个的tex工具集。这样在编译kpathsea时,它默认以为libtool工具已经在其父目录下准备好了的,实际上是没有的,所以报错。要想顺利编译kpathsea,就必须在Makefile中申明libtool的正确位置,有两种做法。
第一种做法很简单,在 kapthsea 源码目录下实际上是已经生成了一个 libtool 工具的,只需要将其复制到上一层目录下即可。
第二种做法是使用Gentoo系统中的libtool,做法如下:
- 打开kpathsea目录下的Makefile文件;
- 找到“LIBTOOL = $(SHELL) $(kpathsea_parent)/libtool”这样一行信息;
- 将其修改为“LIBTOOL = $(SHELL) /usr/bin/libtool”
采用以上方法的任一种,完成后,就应该可以顺利编译kpathsea了:
$ sudo make install
要注意的一个问题就是在安装所编译的 kpathsea 库时,会把一些编译的 kpathsea 相关的程序复制到了 /usr/local/bin 目录下了。由于我们只是想使用 kpathsea 库,而不是这些程序,另外这些程序实际上已经存在你的 TeX Live 目录下了,因此这里可以把 /usr/local/bin 目录下的有关 kpathsea 的程序都清除掉。否则系统默认会优先调用它们,导致你的 TeX Live 系统配置文件的位置有可能访问出错。
3 编译xdvipdfmx-dev
进入xdvipdfmx-dev目录,执行:
之所以要指定freetype2头文件目录与库文件,是因为编译xdvipdfmx需要freetype2库的支持。此处目录的设定只是针对我的Gentoo系统配置而言的。
如果configure成功,就可以进行编译并安装了:
$ sudo make install
所编译的xdvipdfmx默认是安装在/usr/local/bin目录下的,建议你将它移动到$TEXLIVE/current/bin/i386-linux目录下,覆盖texlive 2007原有的xdvipdfmx。
4 编译xetex-dev
进入xetex-dev目录,执行:
$ sudo ./install-xetex
$ rm -rf ~/.texlive2007/texmf-var/web2c/xetex/*
上述第三行代码是删除个人home目录下的上一版本xetex的一些fmt文件,因为它们与新安装的xetex版本不符,而它们的优先权又最高,所以应当都干掉。
5 生成xelatex
$TEXLIVE/current/bin/i386-linux目录中原有的xelatex调用的是xetex-0.996,因此它已经没有存在的必要了,把它干掉。yulewang言:在该目录下建立一个指向xetex的连接,即xelatex:
这样在执行xelatex的时候,它会根据argv来获知该load哪个format.

该文很有用,被我收藏了。谢谢作者的努力。
lyanry
lyanry