前段时间听说在 Linux 下 TeX 的编译速度会比 Windows 上快不少,所以就想着搞一个 WSL 来玩一下。正好想着既然折腾了那就干脆折腾的彻底一点,再琢磨一下 TinyTeX 看看能否节省一些硬盘空间。于是就搞出了这个也许是 Windows 上最轻快的 LaTeX 配置。
安装 WSL Ubuntu
首先在开始菜单搜索 “启用或关闭 Windows 功能”,打开,勾选 “适用于 Linux 的 Windows 子系统”
![2ecc413090c0561720ff88f3c8b936fa.png](https://i-blog.csdnimg.cn/blog_migrate/97630b67d13f18f2e45bee8a9b20fb88.png)
然后在 Microsoft Store 中搜索 Ubuntu(其他的 Linux 系统我没试过),安装即可,大概几百 Mb;这样安装的 Ubuntu 是一个嵌入 Windows 的子系统,没有图形界面,只有一个终端。在开始菜单中搜索 “Ubuntu”,即可启动终端。
![1cdda6168917d51b6eb13eed6efc6ecf.png](https://i-blog.csdnimg.cn/blog_migrate/10a8f4c3991f7fd3b51ed100bb707888.jpeg)
Ubuntu 子系统的根目录在 Windows 上的位置如下,如果需要修改什么文件可以直接在 Windows 里面改,而不必用命令行,比较方便:
C:UserskeyuaAppDataLocalPackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscLocalStaterootfs
(PS:直接复制不一定能导航过去,应该是 UbuntuWindows 后面那串乱码在不同机器上不一定相同,建议手动导航)
这个子系统也可以直接操作 Windows 中的文件,在终端中通过 cd /mnt/c/
即可导航到电脑的 c 盘
然后需要在终端中对 Ubuntu 进行一些设置。首先切换镜像源为清华源:到 Ubuntu 系统的根目录里面,把 /etc/apt/sources.list
这个文件改成
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
然后在 Ubuntu 终端中更新:
sudo apt-get update
然后就可以用 apt 安装软件了。比如安装 python 的包管理器(Ubuntu 自带了最新版的 python3)
sudo apt-get install python3-pip
在 Ubuntu 中安装 TinyTeX
TinyTeX 是谢益辉大佬开发的一个瘦身版的 TeX Live,相比于 TeX Live 几个 G 的体积,TinyTeX 的体积不到 500M,它减去了 TeX Live 中大量不常用的包和文档,配合 R 在编译的时候可以自动补全所缺的包。
首先需要安装 R(如果不装 R 缺包就只能手动一个一个装,相当痛苦),在 Ubuntu 终端中运行
sudo apt-get install r-base
(PS:这样安装的 R 不是最新版,但是最省事,而且不是最新版也够用了)
然后在终端中输入 R
,以启动 R 交互环境,R 语言的命令只能在 R 交互环境中运行
然后运行下面两条 R 命令,以安装 TinyTeX:
install.packages('tinytex')
tinytex::install_tinytex()
安装好之后,需要把 tlmgr(TeX Live 那极其难用的包管理器)的镜像源也换成国内源(如清华源),这样子装包的时候才不会有网络问题。使用 q()
推出 R 交互环境,在 Ubuntu 终端中输入
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
完成上述操作之后,就可以用下面的 R 命令来编译工作目录里面的 tex 文件了,编译的过程中如果缺包,就会自动安装。
tinytex::pdflatex('test.tex')
tinytex::xelatex('test.tex')
还需要稍微配置一下,才能在 Ubuntu 中使用 Windows 的字体。首先在终端中运行:
sudo apt install fontconfig
然后在 Ubuntu 根目录的 etc/fonts/
文件夹中新建一个 local.conf
文件,内容是
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
在 VS Code 中使用 Ubuntu
想在 Ubuntu 中通过(Windows 系统的) VS Code 中打开(Windows 系统的)某个文件夹有两种方式:
- 在 Ubuntu 终端中用
code
命令打开,如果没有安装 remote_wsl 插件的话会提示你安装 - 如果已经装好了 remote_wsl 插件,就可以在 Windows 中右键文件夹,然后选择 “在 Code 中打开”,然后再 Ctrl+Shift+P 在命令窗口中输入 reopen,选择 reopen folder in wsl。这个方法可以避免打开 Ubuntu 终端。
如果当前的工作目录是在 Ubuntu 中打开的,那么 VS Code 左下角会提示 “WSL:Ubuntu“
![a450ac4dcf4671df84c36bb48d0c1fe9.png](https://i-blog.csdnimg.cn/blog_migrate/b156e2ee6c2b4bf3fea6d6c01e8b1573.png)
打开 VS Code 之后,还需要为 Ubuntu 系统安装 LaTeX Workshop 插件:在插件市场中搜索然后选择 “install for ubuntu”;VS Code 的 settings.json 会共用 Windows 的(如果你有配置过的话),然后就可以开始写 .tex 文件了;如果你不会配置,那么可以看这篇文章
使用 Ctrl+Alt+B 编译的时候,有可能会报 emergency stop 的错误,这个时候在状态栏上会有一个红叉叉(如下图所示),这种情况大概率是缺包导致的,因为 TinyTeX 里面基本上就没什么包
![3105fc4802aea5a1090c13de015929b2.png](https://i-blog.csdnimg.cn/blog_migrate/3630fe5c911755ee0726a0dff9c21574.jpeg)
解决的办法也很简单:打开终端(VS Code 中 Ctrl + ~),进入 R 交互环境,用 R 命令 tinytex::xelatex()
来编译,这样子就会自动装缺失的包,装包的过程可能会有些长。然后下一次再在 VS Code 中编译的时候就不会缺包了。
假如没有报缺包错误的话,那还是在 VS Code 里面用 Ctrl+Alt+B 编译比较方便,用 R 命令编译单纯只是为了自动装包
排除奇怪的错误
如果 R 命令编译 .tex 文件失败,可以检查是否是这两个原因:
- tlmgr 未切换到国内源,导致无法安装包或者安装过于缓慢,切换方法可以查看上一小节。
- 如果使用了某些高科技上网工具,清华源(不确定其他国内源有无这个问题)有可能无法访问或者速度很慢,这时可以考虑关了某上网工具并重试编译
- 如果不是源的问题,那有可能是 tlmgr 没有加如环境变量,试一下
tlmgr path add
- 如果还不行,那就更新一下 tlmgr 试试:
tlmgr update --self --all
如果在 Ubuntu 中安装扩展失败,报错 "corrupt zip",这有可能是安装网速太慢,或者之前扩展的 “尸体” 没删干净。可以尝试下面的手段来排除错误:
- 进入 Ubuntu 根目录中的 `/home/<username>/.vscode-server/extensions`,删除该扩展的文件夹,然后重启 VS Code,再在 VS Code 中删除 Windows 本地的扩展,然后再安装 Ubuntu 的扩展(这也会顺带在 Windows 上装)
实在不行,还有最后的大招:重装/卸载 TinyTeX
tinytex::reinstall_tinytex()
tinytex::uninstall_tinytex()