是莽撞人就来单挑:还世界一个轻量级 TeXLive

谢益辉 2017-06-06

2017-12-18 更新

这个问题我终于自己动手基本解决了,参见 TinyTeX。它是一个特制版本的 TeX Live,在 macOS/Linux 下安装后的大小大约是 150 兆。

要把我最烦恼的软件问题排个名的话,我第一烦 Windows 下的字符编码问题,因为 UTF-8 明明可以一统江湖,在 Windows 下这个破问题却一直是一桶浆糊,永远杀不死;第二烦的就是 LaTeX 安装问题,因为这个问题明明有简化的可能,却也是一桶浆糊状态。Windows / Linux / macOS 各自打各自的江山,都是用的那种我最不喜欢的少数一两个人掌握核心权力的旧时代软件包分发办法。

我说 LaTeX 的安装可以简化是基于一个假设前提的:你不会没事用一些冷门包。我想解决的主要问题是:

废话少说,放码过来。

我们还是把希望寄托在 TeXLive 上,放弃那 MikTeX 和 MacTeX。姑且叫这个项目 SmallTeX 吧。我去年曾经在 Linux 上试过,完整的 TeXLive 中如果去掉文档和源代码,最终的压缩文件(tar.gz)大小在 1G 左右。我的安装代码在此,核心办法就是用一个 texlive.profile 文件实现自动化安装,这也是唯一的自动化安装 TeXLive 的办法。我把它装在用户根目录下,就是 $HOME/texlive。这个脚本是安装所有包,如果只想安装一部分包的话,可以挖我的 ubuntu-bin 库,看看里面我如何安装 TeXLive 以及一部分额外的包,那些额外的包来自我的血泪积累:我在跑 knitr 包的逆向检查时收集的某些 R 包中用到的一些怪异 LaTeX 依赖。相信有了这么些包之后,多数人应该能顺利编译多数 LaTeX 文档了。另外说一句,目前 Travis CI 上的 R 语言支持中的 LaTeX 安装其实就是基于我这项工作的,主要原因就是我提供了一个超小的安装包,几秒钟就可以下载完,而且覆盖了常见的包。

你也可以参考 LaTeX 的官方 GitHub 库中的 texlive.sh 脚本,它也是类似的办法,有一个 texlive.profile 文件,其中设定了安装最精简的包,然后再装更多的包。

这个 TeXLive 安装包可以通过 Travis 自动编译,然后通过 GitHub releases 自动发布,就像我的 ubuntu-bin 库所做的一样。注意发布的时候需要删除已有的文件,因为 GitHub 不支持在 GitHub releases 中覆盖文件,参见我生平唯一一个 Python 脚本

Travis 支持 Linux 和 macOS,不支持 Windows,不过 Windows 可以通过 AppVeyor 去编。不管什么系统,都要把 bin 路径放入系统的 PATH 变量中。Windows 下这个应该可以用脚本自动完成。*nix 用户自己在 ~/.bash_profile 中手工加一下也不是不行,当然也可以用 sudo tlmgr path add 自动把那些 LaTeX 的可执行文件以符号链接形式添加到系统的某个 PATH 路径下(/usr/local/bin 之类的)。

这个小项目让我来做也许要花三整天时间,主要是我对 Windows 下的 TeXLive 还没有经验。需要的技能:系统脚本语言、Travis/AppVeyor、GitHub 及其 API。欢迎死磕到底,挑战 LaTeX 世界无聊的(也许是无心的)专制。