以往无论是课堂报告,还是竞赛论文,我都是word一路用到底。再用上“模板”等功能,也能编出一篇大致能看的论文。
至于最近为何走上$\LaTeX$的道路,有些是竞赛的缘故,有些是自己喜欢瞎折腾的缘故。最终,学习LaTeX列在了我几个月前所计划的寒假清单中。
本文包含了编译平台选择、搭建工作流、插件配置等细节,不同需求的读者可选择阅读
本文包含较多引用链接,作者尽可能详尽、精准地列出了可供参考的信息源
1. 构思工作流
我当初思考评估了多种编译LaTeX的方式,大致列举如下:
- Overleaf
在线平台、多端编辑、文件托管、宏包一应俱全,甚至还有免费的1人协作可以白嫖,这就是我最初打算使用Overleaf的原因。但是它的缺点也存在,即便使用cn.三级域名,有时候网站仍然会抽风式地卡顿。通过搜索引擎可以发现,近一年仍可见到关于网络问题的反馈。倘若这发生在竞赛或高并发期间,轻则浪费时间,重则丢失文件,后果不堪设想。
国内也有替代版的Pageshare,但出于以上缘故我仍然没有考虑它。 - Texlive
在线网站不可回避的缺点就是网络隐患,那剩下的方法无非就是本地编译。Windows平台无非就是选择Texlive/Miktex,但编译速度慢是硬伤。知乎上的一篇文章详细对比了Windows与WSL的编译速度(同时也包括pdfLatex/XeLatex等对比),其表明WSL编译速度快于Windows约40%,原生Linux平台编译速度更快,而我手头上不正有一台Linux服务器吗?不将其价值剥削至极就对不起那几百块钱。网络带宽配置较好,编译速度+网络传输速度仍然很令人满意。
因此,我决定使用vscode的romote-ssh、LaTeX Workshop插件,远程调用Linux服务器中的Texlive编译Tex文件。
Overleaf的Docker版(Sharelatex)可以在自己的服务器上搭建私有团队Latex编译平台,协作人数无限制,具体以GitHub上的说明为准。缺点显而易见:服务器配置要求高、非Nginx不支持https、无法定制化、维护较为麻烦。
2. Ubuntu (Linux)安装Texlive流程
主要的安装步骤参考了texlive-zh-cn 2020年版(本文撰写时为中文最新版),可以说安装步骤非常详细了,官方各语种最新版见文档 – TeX Live。另外我还主要对照着参考了这份教程:加速LaTeX编译速度:使用VScode远程工具Remote-SSH在Linux系统上编译LaTeX,教程写得较为详细,但仍有一些不足之处。下面是我的操作流程,读者可以多方对照阅读。
Texlive既可使用root用户安装,也可使用普通用户。但是不建议远程登录时使用root账户。我当时使用的是普通用户进行安装,安装过程中如有需要加上sudo即可。
首先是普通的更新本地软件操作:
sudo apt update sudo apt upgrade
下载我使用的是iso镜像文件,下载源选用的是重庆大学镜像源,速度稳定在5Mb/s,比清华源的kbs级速度要好得多,里面选择最新的texlive.iso就行,下载命令如下:
cd ~/Download wget https://mirrors.cqu.edu.cn/CTAN/systems/texlive/Images/texlive.iso
等待几分钟下载完成,之后是挂载镜像并启动内置安装脚本。这里需要注意的是,启动安装脚本时,可以带上可选的命令行参数,常见的参数是配置镜像源(其他的见安装手册),我选择的是清华源(小文件下载速度还是能够接受的),其操作指南为CTAN | 镜像站使用帮助 | 清华大学开源软件镜像站(镜像源也可安装后配置,详见清华源使用帮助)。
由于Ubuntu自带perl工具,因此不加perl前缀命令安装程序也可自动打开:
sudo mount -o loop texlive2022.iso ~/mnt/ cd ~/mnt/ sudo ./install-tl -repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
注:在使用mount命令后会有“mount: … is write-protected, mounting read-only.”的警告,忽略即可。
主菜单中可以选择需要安装的宏包,分为scheme(大方案)和collection(更精细的集合)两种方式。我的建议是进入collection,去掉所有除中文、英文的其他外语种的宏包(有需要的可自我保留,之后也可随时下载回来),再去除不常用的LuaLaTeX编译引擎相关的宏包,最终能省大约1个G的空间。其他的宏包建议全部选择,最终大概占用空间7G。
其他的设置我建议都原封不动,直接选择开始安装。linux系统安装过程较为漫长,约半个小时。
下载完成后会显示“Welcome…”等信息,命令行按下ctrl+c退出。
开始设置环境变量。网上一些教程选用在~/.bashrc里设置,而texlive官方教程则是在~/.profile里设置的。我在LaTeX Workshop官方手册中找到了答案:
LateX Workshop: Setting PATH environment variable
Notice that, to set thePATH
environment variable for VS Code Remote Development, you usually have to edit.bash_profile
or.profile
instead of.bashrc
. See the document for WSL and an issue for Remote SSH.
为了确保万无一失,应当选择.profile文件设置环境变量(Ubuntu用户根目录里我没发现.bash_profile文件,因此选择了已有的.profile)。另一个问题是官方手册中的环境变量里的某些路径并不在我的系统上存在,我在网上找到了如下的设置,添加进.profile文件末尾保存(读者需在设置前检查这些路径是否存在):
export MANPATH=${MANPATH}:/usr/local/texlive/2022/texmf-dist/doc/man export INFOPATH=${INFOPATH}:/usr/local/texlive/2022/texmf-dist/doc/info export PATH=${PATH}:/usr/local/texlive/2022/bin/x86_64-linux
输入以下命令使环境变量生效:
source ~/.profile
我们还需删除之前所下载的镜像文件:
sudo umount ~/mnt/ rm -rf ~/mnt/ rm -f texlive2022.iso
这里我在输入umount命令时碰到了“target is busy”的信息,导致无法正常解除挂载,可以尝试停止相关进程(实在不行重启系统也行):
ps aux | grep ~/mnt/ kill -9 <相关进程的PID> ... sudo umount ~/mnt/ rm -rf ~/mnt/ rm -f texlive2022.iso
一般来说到这步就差不多了,但过了几天我想通过tlmgr升级宏包时,还发现了一个问题。tlmgr安装宏包时,会弹出让你进入User Mode的warning,并且报权限error。之后我使用了诸多方法仍不好解决,最后使用了一个粗暴方法,即修改texlive安装目录所有者为非root用户 :
chown -R <你的非root用户名> /usr/local/texlive/
2023.9.20更新:使用tlmgr更新宏包时应该加sudo,即可解决权限问题
tlmgr是texlive的宏包管理器,相关手册见此:tlmgr-intro-zh-cn.pdf,其文末附英文原版详细手册链接。时不时我们还是需要更新宏包的。
3. 配置vscode
vscode的基本用法我就不赘述了,安装中文语言插件后每个人都能摸索学懂。
对于多语言开发者,我强烈推荐在vscode设置不同工作区,以便不同插件、设置和快捷键不会互相影响。相关帮助可参考关于VSCode中工作区的讲解与使用工作区还你一个轻量的VSCode,一文足以,下文也会有所提及。
3.1. remote-ssh
remote-ssh是vscode的一款基于ssh协议的用于远程连接的插件。安装后点击左下角“远程控制”,选择打开ssh配置文件,添加如下内容并保存:
Host <自定义连接名称> HostName <主机ip> User <linux系统的用户名称> Port 22 # 默认22,请确保服务器22端口打开 IdentityFile <windows平台下id_rsa格式私钥文件路径> # 最好将其放在~/.ssh/下,如有空格符用双引号括起来
RSA非对称加密是为了确保信息传输过程中的安全性。这里有一篇扫盲RSA文件格式的文章:ssh-keygen生成的id_rsa文件的格式。
由于我之前已经有了RSA密钥文件,这里只需添加路径即可。对于没有密钥的人而言,可以参考云服务器商本身提供的密钥生成工具指南,也可以自己生成,参考VS Code Remote SSH配置。
现在点击左下角,选择连接主机及主机连接名称,如果无误就会打开远程操作下的vscode窗口。打开或创建你的Latex目录,以后你可以将这里作为Latex项目的保存区。
3.2. LaTeX Workshop
许多文章提到了该插件的配置流程,如Visual Studio Code (vscode)配置LaTeX,尽管没有提到remote-ssh,但该文详细解释了LaTeX Workshop的配置文件。我的配置文件和文中基本一致(由于个人喜好将pdflatex编译链放在了xelatex前面)。
之后,你可以尝试编译该文所提供的测试Tex文件,测试系统能否正常工作。
到此,在插件设置完后,你可以选择左上角的“文件-将工作区另存为”来保存你的Latex工作区,以后可选择该文件快速启动工作区。
最后,关于LaTeX的学习,推荐The Short Introduction to LaTeX2e (Chinese Simplified) 。
3.3. Live Share(可选)
如果你的团队喜欢或有实时协作的需要,那么Live Share拓展一定不能错过。我还没有测试完该插件与以上工作流的兼容性和表现,但有兴趣的小伙伴可以尝试一下,操作并不那么复杂,官方文档很详细:什么是 Live Share? – Live Share | Microsoft Learn。
4. 尾——一些个人杂想
写该文的目的主要是为了给后来人指明一条方便的路。
大多数包括我在内的人在面对一个目标时,都免不了产生迷茫的无力感。分析目标、规划、检索、解决问题……虽只有简简单单的几个步骤,只有深入其中,才知道成果来之不易。
在配置上述工作流的过程中,我阅读了大量的文档手册,既膜拜于互联网上各路教程之丰富,也深刻地感受到知识的繁杂、错误指南的干扰和信息熵的低下。
在后信息时代下,我们似乎已经前理解式地把互联网等信息源预定义为纷繁杂乱的糟糕噪音,把不能一次性解决问题看作是不可思议的意外事件。在这样的环境下,大多数人渐渐自我培养为了中规中矩的互联网保守主义用户。
命令行的每一个操作,几乎都存在另外的参数可供更改,从而悄然地影响用户的安装结果——成功,抑或是“莫名其妙的错误”。这无疑会让有些读者觉得,安装这些所谓开源/自由软件时,总会像面对未知的黑箱一样,小心翼翼、忐忑不安。显然,我们大多数人落入了互联网与自我心理所编织的一张难以逾越的大网里。
为了破除这种壁垒,我给出自己常用的一种“原始策略经验”:
- 无论何时安装软件,选择官方指南,仔细阅读安装指南
- 可以选择阅读1-3篇非官方安装指南,综合比照并思考不同
- 除官方外,较次的优质信息源也应记住,对一些平台、搜索引擎质量要有合理的认识
- 为求阅读速度可使用划词插件、pdf翻译软件,但在某些时候,英文阅读仍然不可或缺(如命令行)
- 详尽的帮助手册和“傻瓜式”的指南教程理应权衡。或许,阅读一篇枯燥漫长的官方文档,比简短但暗藏bug的“教程”更省时间