计算机技术学习札记

在 WSL 2 中使用 TeX Live

综述

由于 TeX 引擎在 Linux 环境下的性能远高于同机器的 Windows 环境,又由于 WSL 2 在性能上已经能够达到相当不错的水准,故将 TeX 引擎安装在 WSL 2 中不失为一种不错的选择。

本文的系统环境是:Windows 11 64 bit + Debian 11 in WSL 2

安装 WSL 2

WSL 2 的安装可参见 微软的官方文档 或其他教程。注意 WSL 2 安装时会隐式地启用 Hyper-V 虚拟机平台,因此绝大多数的「安卓模拟器」和部分虚拟机软件将无法使用或需要重新配置。

安装 TeX Live

尽管各大 Linux 发行版的官方软件仓库中都有 TeX Live,但是版本往往较旧,因此我们选用手动加载 ISO 的方式来安装。

前往 CTAN镜像)下载 TeX Live 最新版本的 ISO 文件,然后将其拷贝到 WSL 的用户主目录中。接着,运行下面的命令来挂载这个 ISO 文件(texlive2021-20210325.iso 改成你自己下载到的文件名):

sudo mkdir /media/cdrom
sudo mount -o loop texlive2021-20210325.iso /media/cdrom
cd /media/cdrom

然后运行 install-tl 这个安装脚本来启动安装程序:

sudo ./install-tl

基本不需要调整什么配置,直接按提示开始安装即可。在 Linux 上,TeX Live 的安装速度非常快,十余分钟即可完成整个 TeX Live 的安装。安装完成后卸载虚拟 ISO,然后按需删除 ISO 文件:

sudo umount /media/cdrom
rm ~/texlive2021-20210325.iso

配置 TeX 引擎的符号链接

安装完成之后,我们还需要为 TeX 引擎配置符号链接,这样我们才可以直接在 PATH 中调用诸如 xelatex 这样的命令。

注意将下面的 2021 改成你安装的对应 TeX Live 版本。

sudo /usr/local/texlive/2021/bin/x86_64-linux/tlmgr path add

配置 TeX 引擎使用 Windows 中的字体

参考:Sharing Windows fonts with WSL - X410.dev

由于将 Windows 中的字体复制一份到 WSL 中相当占据空间,而且会造成一些其他的问题,因此我们选择直接让 WSL 中的 TeX 使用 Windows 中的字体。

首先安装 fontconfig:

sudo apt install fontconfig

然后,在 /etc/fonts 下以 root 用户身份新建一个文件 local.conf,内容为

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>

接着在终端中运行下面的命令刷新字体缓存:

sudo fc-cache -fsv

这样,TeX 引擎就可以使用 Windows 环境中的字体了。

尽管 WSL 2 的跨系统文件 IO 性能非常差,但即使这样,WSL 2 中的 TeX 用宿主字体的排版速度还要比宿主机好。

配置 texdoc 使用 Windows 中的 PDF 查看器

由于 WSL 中默认是没有安装 GUI 的 PDF 查看器的,因此直接执行 texdoc 查看宏包手册会报错。这时,借助 xdg-open-wsl 这个工具,我们可以让 WSL 中的 texdoc 使用 Windows 中的 PDF 查看器来打开 WSL 中的 PDF 文档。

首先需要安装 Python3-pip。

sudo apt install python3-pip

然后,运行下面的命令:

pip install --user git+https://github.com/cpbotha/xdg-open-wsl.git

安装完成后,编辑你 shell 的配置文件(例如 zsh 的 ~/.zshrc),将 ~/.local/bin 加入到 PATH 的最前面:

export PATH=~/.local/bin:$PATH

最后退出重进 shell。试试 texdoc 命令,应该能够正常打开宏包手册了。

注意

虽然不可避免,但请尽量不要用 WSL 中的 TeX 引擎去编译 Windows 环境中的文档,因为 WSL 2 的跨文件 IO 性能非常差。相反地,可以将 TeX 文档都放在 Linux 环境中,然后配置 VS Code 等编辑器的远程编辑功能来使用。

PS:没有实测性能损失,仅为估计。