在 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 中的字体
由于将 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:没有实测性能损失,仅为估计。