Linux上LaTeX开发环境的安装(及Docker)

老系统烂掉了,现在又需要用$\LaTeX$写东西,Overleaf访问有时又不稳定,于是为了在本地开心愉快的编辑$\LaTeX$决定使用Docker容器的方法在本地安装一个Overleaf。

Docker安装

简单起见,我们使用Docker官网上提供的脚本方法来安装:

简单来说,我们只需要先通过

wget https://get.docker.com -O get-docker.sh

再通过

sudo sh get-docker.sh

即可安装Docker。在执行完以上命令后,运行apt list | grep docker命令(笔者使用的是Debian系统,因此默认的高级包管理器是apt,如果使用非Debian系系统需要使用其他命令),可以看到

Docker社区版本的软件包docker-ce以及其他附带软件已经在系统里安装。同时在/etc/apt/sources.list.d/目录内,观察到已经有docker.list文件,说明已经可以用apt包管理器来管理docker的更新。

Docker镜像

由于众所周知的原因,在国内如果直接访问Docker Hub来安装容器容易遇到速度慢、网络不稳等问题,因此需要添加国内镜像以加速:

供应商 网址
Docker Proxy https://dockerproxy.com
百度 https://mirror.baidubce.com

更多信息可参考:https://juejin.cn/post/7165806699461378085。之后在/etc/docker/daemon.json内加入镜像网站:

Overleaf安装

新版的Overleaf推出了Toolkit这种新的部署方式,仓库地址在https://github.com/overleaf/toolkit。如果用这种方式来维护本地的Overleaf,则不需要掌握太多的Docker技能,以下就主要介绍这种方式。首先下载仓库:

git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit

切换到overleaf-toolkit目录后,运行以下命令:

sudo ./bin/init # 生成配置文件
sudo ./bin/up -d # 启动容器,可以理解为docker的run命令

即可启动容器(可以直接关闭shell,不影响容器运行)。在运行完指令后,可以运行sudo docker ps -a来查看容器运行情况,如图所示,三个容器均正常运行:

如果需要更改配置文件,可以在/config/目录内更改,更改完毕后需要使用/bin/docker-compose down来删除原容器,并重新运行/bin/up创建新容器。

Overleaf初次使用

在浏览器登陆在config中指定的本地端口(在此教程中指定为8888),即可来到Overleaf主页。进入localhost:8888/launchpad即可创建第一个管理员账户,之后便可用此账户来对本地服务器进行一系列操作。

Overleaf维护

当然使用传统的Docker方法来维护容器是可以的,例如使用如下命令来维护容器:

sudo docker start mongo redis sharelatex # 启动容器
sudo docker stop sharelatex mongo redis # 关闭容器
sudo docker exec -it sharelatex bash # 在容器内运行bash并分配tty,使用后的效果即打开了一个容器内终端

但是Overleaf Toolkit为我们提供了一些更便捷的访问方式:

sudo ./bin/start # 相当于docker start
sudo ./bin/stop # 相当于docker stop
sudo ./bin/shell # 开启一个容器内终端

同时也提供了dockerlogsbackup-config等工具用来维护,再次不作过多赘述(查看Github获取更多信息)。

初始状态的Overleaf里并不完全含有我们需要的$\LaTeX$包,因此需要进入容器终端来进行更新操作。由于众所周知的原因,因此需要换成国内的CTAN(Tex包管理器)的源https://help.mirrors.cernet.edu.cn/CTAN/

sudo ./bin/shell
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet # 更换软件源,以清华源为例
tlmgr update --self --all # 更新已安装的包
tlmgr install scheme-full # 安装完整版TexLive
# 此处省略更改apt软件源及update
apt install --no-install-recommends ttf-mscorefonts-installer fonts-noto texlive-fonts-recommended tex-gyre \
fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra \
fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted fonts-texgyre -y # 更新字体
exit

之后重启容器即可

在设置完成之后,Overleaf默认是开机自启动的,这会消耗大量的系统资源。如果要禁用开机自启动,只需要禁用相应Docker容器的自启动即可:

sudo docker update --restart=no sharelatex redis mongo

修复XeLaTex

在使用中发现,如果编译器选择了XeLaTex则会直接报错。我们在容器的终端中排查问题:

可以观察到,即使是更新了完整的LaTex,在系统的PATH中仍然没有XeLaTex(在/bin/中有xetex,但是Overleaf无法识别)。因此我们只需要创建从Texlive目录到/usr/local/bin的软链接即可。首先进入Texlive的二进制可执行文件目录,查看XeLaTex的相关文件是否存在(如果不存在,则需要执行维护中的更新步骤):

如图所示文件存在,之后创建软链接(在二进制可执行文件的目录下执行):

ln -s /usr/local/texlive/2023/bin/x86_64-linux/xelatex /usr/local/bin/xelatex

之后就可以正常使用Xetex编译了。

Published At
Tagged with