WSL2安装TeXLive踩坑记录

众所周知,Windows 上 Latex 编译速度被 Linux 吊着打不知道几个来回。故打算以后都用 Linux 写 Latex。

但是毕竟 Linux 还算不上是主力系统,要写 Latex 重启切换 Linux 十分麻烦,那么我们可以在 wsl 上装 TeXLive。

又众所周知的是,wsl 默认装在 C 盘,而 TeXLive 近 10GB,所以有了这篇记录。

安装 WSL2 虚拟机到非系统盘

安装并启用 WSL2 教程已经满天飞了,故不再赘述。直接从安装 Linux 发行版开始。

  1. 下载发行版 选择你喜欢的系统下载,这里我选择了 Ubuntu 24.04。

  2. 把下载的文件 Ubuntu2404-240425.AppxBundle 后缀改为 zip 并解压。

  3. 在解压出的文件夹中选择符合你机器的系统包,AMD64 下所需文件为 Ubuntu_2404.0.5.0_x64.appx,改后缀为 zip 并将其解压到你要安装的路径下。比如我把它放在了 D:\WSL\Ubuntu2404-240425 下。

  4. 双击路径中的 ubuntu2404.exe 等待并设置用户名和密码就大功告成了。

  5. 更换清华源等更多个性化配置自行搜索教程。

下载 TeXLive 并安装至 WSL

到国内镜像站下载最新 TeXLive 镜像,比如 清华大学开源软件镜像站

WSL 是可以直接访问 Windows 的文件的,比如 C 盘的内容在 /mnt/c/ 下。假设我们下载的 TeXLive 镜像路径是 C:\texlive2024.iso

1
2
3
4
5
6
# 新建要挂载的目录
sudo mkdir /mnt/texlive 
# 把TeXLive镜像挂载过来
sudo mount /mnt/c/texlive2024.iso /mnt/texlive
# 执行安装脚本
sudo /mnt/texlive/install-tl

之后的页面你可以修改一些安装可选项,如果你懒得折腾就直接输入 I 默认安装即可。(个性化选项若有所需请自行了解)

安装过程可能需要几分钟,等待即可。之后弹出镜像并删除文件夹:

1
2
sudo umount /mnt/texlive
sudo rm -r /mnt/texlive

之后更新环境变量,修改 ~/.bashrc 文件在最后新增:

1
2
3
4
# Add TeX Live to the PATH, MANPATH, INFOPATH
export PATH=/usr/local/texlive/2024/bin/x86_64-linux:$PATH
export MANPATH=/usr/share/man:/usr/local/texlive/2024/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2024/texmf-dist/doc/info:$INFOPATH

重启终端或执行 source ~/.bashrc 即可。

之后可以执行 tex -v 查看安装是否成功。

我看的教程还有一个操作,不知道什么作用,反正执行就对了(

1
2
sudo cp /usr/local/texlive/2024/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf
sudo fc-cache -fsv

VSCode 的 LaTex 配置

基础配置

安装以下几个插件:

  • LaTeX Workshop(必选)
  • English word hint
  • Path Autocomplete

新建一个文件夹用于存放 tex 文件,假设名为 LaTexSpace

新建 LaTexSpace/.vscode/setting.json

配置编译工具链,添加如下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"latex-workshop.latex.tools": [
    {
        "name": "pdflatex",
        "command": "pdflatex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "%DOCFILE%"
        ]
    },
    {
        "name": "xelatex",
        "command": "xelatex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "%DOCFILE%"
        ]
    },
    {
        "name": "bibtex",
        "command": "bibtex",
        "args": [
            "%DOCFILE%"
        ]
    },
    // 下面这个是使用外部 PDF 查看器用的,仅配置编译工具链无需添加
    {
        "name": "correct_path",
        "command": "/home/spirit/LaTexSpace/.vscode/correct_path"
    },
],
// 下面 tools 中的 correct_path 也是要在 VSCode+wsl 环境下使用 Windows 的 PDF 查看器才需要添加的。
"latex-workshop.latex.recipes": [
    {
        "name": "xelatex",
        "tools": [
            "xelatex",
            "correct_path"
        ],
    },
    {
        "name": "pdflatex",
        "tools": [
            "pdflatex",
            "correct_path"
        ]
    },
    {
        "name": "xe->bib->xe->xe",
        "tools": [
            "xelatex",
            "bibtex",
            "xelatex",
            "xelatex",
            "correct_path"
        ]
    },
    {
        "name": "pdf->bib->pdf->pdf",
        "tools": [
            "pdflatex",
            "bibtex",
            "pdflatex",
            "pdflatex",
            "correct_path"
        ]
    },
],

配置 SumatraPDF 作外部查看器

首先贴上 SumatraPDF官网

在设置文件中添加以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
"latex-workshop.view.pdf.viewer": "external",
"latex-workshop.view.pdf.external.viewer.command": "/mnt/d/Program/SumatraPDF/SumatraPDF.exe", // 改为自己的路径
"latex-workshop.view.pdf.external.viewer.args": [
    "%PDF%"
],
"latex-workshop.view.pdf.external.synctex.command": "/mnt/d/Program/SumatraPDF/SumatraPDF.exe", // 改为自己的路径
"latex-workshop.view.pdf.external.synctex.args": [
    "-forward-search",
    "\\\\wsl$\\Ubuntu-24.04\\%TEX%", // 中间的 Ubuntu-24.04 改为自己的发行版名称
    "%LINE%",
    "-reuse-instance",
    "\\\\wsl$\\Ubuntu-24.04\\%PDF%" // 改为自己的发行版名称
],

不知道自己发行版准确名称的话可以使用 wsl -l -v 命令查看。

此外还需要把 WSL 的路径转为 Windows 的,如上一小节添加 correct_path 工具,并新建 LaTexSpace/.vscode/correct_path 文件。其内容如下,注意其中的路径和发行版名称都要修改为自己的。

1
2
3
gunzip *.synctex.gz
sed -i "s/\/home\/spirit\/LaTexSpace\//\\\\\\\\wsl$\\\\Ubuntu-24.04\\\\home\\\\spirit\\\\LaTexSpace\\\\/g" *.synctex
gzip *.synctex

在 Windows 上新建一个 vbs 文件,路径自定义即可。

注意修改为自己的 wsl 发行版名称和 VSCode 路径。

1
2
3
4
5
6
Set args = WScript.Arguments
arg = ""
For Each s In args
arg = arg & " " & s
Next
WScript.CreateObject("WScript.Shell").Run "wsl -d Ubuntu-24.04 '/mnt/d/Program Files/Microsoft VS Code/bin/code' " & arg, 0

在 SumatraPDF 的设置-选项中填写反向查找命令,注意微调。

1
wscript "D:\Code\LaTex\Inverse Search.vbs" -r -g $(echo $(wslpath '%f:%l') "|" sed 's/\/mnt\/d\/wsl$\/Ubuntu-24.04//g')

latexindent 格式化 tex 文档

真没必要搞这个,费劲还没用

setting.json 中添加如下内容:

1
2
3
"latex-workshop.formatting.latex": "latexindent",
// 修改为自己的 TeXLive 路径
"latex-workshop.formatting.latexindent.path": "/usr/local/texlive/2024/bin/x86_64-linux/latexindent"

latexindent 是一个 perl 脚本。要使用它需要安装依赖:

1
2
3
4
5
sudo cpan Log::Log4perl
sudo cpan Log::Dispatch
sudo cpan YAML::Tiny
sudo cpan File::HomeDir
sudo cpan Unicode::GCString

踩坑

‘xxx.sty’ not found

缺啥装啥就行。

1
sudo tlmgr install xxx

sudo 执行 tlmgr,command not found

因为 sudo 并不使用用户的环境变量,也不调用shell执行命令。故你折腾 ~/.bashrc /etc/profile 什么的都是没用的。

可以在命令中指定环境变量:

1
sudo env PATH="$PATH" tlmgr install package

但是这样做好麻烦,在 ~/.bashrc 中用 alias 简化一下吧:

1
alias psudo='sudo env PATH="$PATH"'

这样用 psudo 代替 sudo 就是使用当前终端的环境变量了。

还有一种强制 sudo 在 shell 中执行命令的办法,对应内容如下:

1
2
sudo sh -l -c tlmgr install package
alias shsudo='sudo sh -l -c'

编译一个 Beamer 模板莫名失败

缺包导致的,TeXLive 镜像默认不带这些东西吗?

1
sudo apt install latex-cjk-all texlive-lang-chinese texlive-lang-english

如果最开始用 sudo apt install texlive-full 安装环境似乎没有这个问题,但我没试。感兴趣的可以在新的系统上试试,坏处就是仓库里的是什么版本你就只能用什么版本。

复制 Windows 字体到 WSL

1
2
3
4
5
6
7
8
9
sudo mkdir /usr/share/fonts/windows_fonts
cd /usr/share/fonts/windows_fonts
sudo cp /mnt/c/Windows/Fonts/*.ttf ./
sudo cp /mnt/c/Windows/Fonts/*.TTF ./
sudo cp /mnt/c/Windows/Fonts/*.otf ./
sudo cp /mnt/c/Windows/Fonts/simsun.ttc ./
sudo mkfontscale
sudo mkfontdir
fc-cache -fv

好消息:如果你能使用 deb 包,就不需要上面这个用处不大的东西了。

可以直接安装Linux字体包(百度网盘,提取码yfsb)。非常全面的同时操作还简单。

LinuxFont(夸克网盘,提取码ks4L)

perl 依赖装不上

需要先安装一些工具:

1
2
# 事到如今我也不知道哪个有用了,都tm装上得了
sudo apt install gcc g++ gcc-multilib g++-multilib make cmake build-essential libperl-dev build-essential libperl-dev 

这样还会有一个依赖 Log::Dispatch 装不上。顺着报错的依赖一路追到上游然后手动编译安装就好了:

1
2
3
4
5
6
7
wget https://www.cpan.org/modules/by-module/Devel/Module-Pluggable-6.2.tar.gz
gzip -dc Module-Pluggable-6.2.tar.gz | tar xf -
cd Module-Pluggable-6.2
perl Makefile.PL
make
make test 
sudo make install

然后顺着这一串报错的依赖再装回来:

1
2
3
4
 sudo cpan Test2::Plugin::NoWarnings
 sudo cpan Params::ValidationCompiler
 # 说不定直接跑这个就行了?试试?
 sudo cpan Log::Dispatch

然后这 byd latexindent 就终于能用了。

说实话我现在感觉手写的 tex 挺好看的,没事别瞎折腾(能跑就行

参考文献

WSL2 虚拟机 其他盘安装(非C盘)及调试(含填坑)

TeX Live 2024 安装教程(Windows/WSL/Linux)

Permission problem when installing package from tlmgr

Setting TeX Live path for root

CPAN general build error (or fail during “install Module::ScanDeps”)

hilinxinhui/VSCode_LaTeX_configuration

ubuntu下vscode LaTeX文档格式化

shinyypig/latex-vscode-config

基于WSL-LaTeX的VS Code+SumatraPDF协作

WSL下LaTeX的VS Code+SumatraPDF协作

VS Code的LaTeX配置

LaTeX配置安装大对比:TeXLive/MiKTeX、Windows/WSL、xelatex/lualatex/pdflatex编译器的速度性能详细对比