自建overleaf (在线latex环境)全过程指南
西桑2333
2022年03月16日 17:34

前言

本文不仅解释如何在服务器上安装overleaf,还将说明如何加速下载安装包、如何安装各种必要字体等等,以便达到类似于“开箱即用”的效果。

我对于LaTeX的要求是:

  1. 比较简便的排版日文和中文(通过安装思源宋体实现,如果做不到将会是一个比较大的劝退点。这个word也能做到)

  2. 能够顺畅的使用和无缝连接(比如说在宿舍、在图书馆,乃至外出时。还有在台式机、平板电脑,甚至pad上都能拥有相同的打字体验。这是word万万做不到的,光是字体就得在每台电脑上都安装一遍)

因此我决定使用overleaf来解决我的需求。而我的overleaf已经运行了1年,写了20多篇作业/讲义/幻灯片,使用体验已经相当不错了。可以说是用比较有限的学习成本,达到了全方位超越word的效果。LaTeX带给我的好处还包括:

  1. 美观且方便(比如我在用word的时候,每新建一个文档写作业,第一件事情是设置各种标题的字体、行间距、段前段后间距等等。换成LaTeX之后只需要拷贝模板文件就OK)

  2. 拼接生僻字(古文偶尔需要)、做图等。

可以看出,即便是不太需要排版数学公式的文科学生,也是可以找到充分理由去使用LaTeX的。

而之前阻碍我使用LaTeX的一大因素,就是它需要配置环境(字体、包等等)。换一台电脑又得重新配置,很不方便,更严重的是它有可能导致我在过去写好的文档,在N年后的新电脑上无法编译。而使用Overleaf之后,我只需要配置一次环境,即可在左右地方享受到完全一致的体验。

Overleaf的缺点包括:

  1. 就我所知,似乎只有网页浏览器端一种编辑器,不够灵活。

  2. 需要一台服务器来运行(对我来说不算缺点,因为我本来就需要一台服务器)

安装

首先你需要一台运行Linux操作系统的电脑(官方推荐Ubuntu),我这里使用的是2核4G的某讯云学生机。有NAS的同学完全可以在NAS上运行overleaf服务。

首先安装Docker-compose,打开终端运行下面的命令:

代码块
Shell
自动换行
复制代码
# 参考https://www.runoob.com/docker/ubuntu-docker-install.html
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#安装docker-compose
sudo su #切换到root
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
su <自己的用户名> #这里写你自己的用户名
复制成功

然后拉取overleaf的安装文件:

代码块
Shell
自动换行
复制代码
git clone https://github.com/overleaf/toolkit.git ./overleaf
# 上面这条命令大概率没有反应,我们可以使用github的国内镜像站来代替:
git clone https://hub.fastgit.org/overleaf/toolkit.git ./overleaf
# 镜像站不止上面一个,可以百度一下,多尝试几个。
复制成功

然后我们自动安装即可:

代码块
Shell
自动换行
复制代码
cd ./overleaf
bin/init
sudo bin/up
复制成功

这一步会拉取overleaf的docker镜像,docker可以理解为Linux里面运行的一个套娃。这里我们是通过overleaf toolkit提供的脚本直接安装,大概率会遇到网络问题。因此我们需要更换国内的云镜像。

运行这个命令,会进入到一个类似记事本的地方:

代码块
Shell
自动换行
复制代码
sudo nano /etc/docker/daemon.json
复制成功

把下面的内容复制进去:

代码块
Shell
自动换行
复制代码
{
    "registry-mirrors":[
         "http://docker.mirrors.ustc.edu.cn",
         "http://hub-mirror.c.163.com",
         "http://registry.docker-cn.com"
    ] ,
    "insecure-registries":[
       "docker.mirrors.ustc.edu.cn",
         "registry.docker-cn.com"
    ]
}
复制成功

按Ctrl+X退出。

然后重新运行

代码块
Shell
自动换行
复制代码
sudo bin/up
复制成功

中间有时候会发现运行失败,重新运行即可。安装成功后会自动开始运行,而且会在开机后自动运行,不需要我们自己去操心它。我们需要在浏览器上输入:

http://<ip地址>/launchpad

网站会提示我们设置用户名和密码,之后我们发现Overleaf已经可以使用了。到这里,只需要排版英文等欧洲语言的朋友看到这里基本上可以离开了。当然up主的需求是排版中文和日文,所以下面我们需要进入后半部分: 

安装中文

(这部分参考 https://github.com/overleaf/toolkit/blob/master/doc/ce-upgrading-texlive.md 和 https://www.freesion.com/article/9925804761/ )

关闭浏览器,回到终端。

前面说了,docker相当于一个虚拟的linux系统。我们可以登陆进去手动调整overleaf后端的latex环境,且这个环境并不影响物理机的使用。overleaf内部使用texlive作为tex包管理器,而默认安装的Overleaf toolkit自带的texlive环境并不能满足使用要求(尤其输入中文的要求)。我们需要安装完整版的texlive,但是texlive会提示我们必须升级到texlive2021,只需按照指引输入升级即可。

代码块
Shell
自动换行
复制代码
sudo ~/overleaf/bin/shell
sudo docker exec -it sharelatex bash # 切换到docker环境
复制成功

当我们看到“root@____________:/# ”的时候,说明我们顺利切换到了内部环境(也就是overleaf所在的container)。下面的命令需要在内部环境执行:

代码块
Shell
自动换行
复制代码
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
# 让LaTeX下载速度更快
# 也可以使用 tlmgr option repository https://mirrors.bfsu.edu.cn/CTAN/systems/texlive/tlnet
tlmgr update --self
tlmgr install scheme-full
#稍等亿下,可以去喝杯茶。
复制成功

现在,overleaf已经完整安装在服务器里。但字体依然是不全的,我们需要手动安装字体。我有一定的中日文混排的需求,如果使用一般字体,只能保证正确显示一种语言,另一种语言会出现大量的豆腐块。使用Noto / 思源字体可以解决这个问题(但是,仍然只能指定一种可以完美显示的语言,另一种语言的一些具体的汉字字形会不标准,如下图)。

这种方法至少能保证PDF中不出现“豆腐块”

上面是思源的日文字体,中文的“改”不标准(左边下面的弯钩)。下面是思源的中文字体,日文的“变”不标准(上面亦的一撇的长度、竖钩)。up主写日文为主,因此一直都使用日文字体。

回到正题,我们开始下载字体:

代码块
Shell
自动换行
复制代码
wget https://mirrors.tuna.tsinghua.edu.cn/github-release/googlefonts/noto-cjk/LatestRelease/repo-snapshot.tar.gz # 下载noto字体
tar zxvf repo-snapshot.tar.gz # 解压
mv goo~~~/ /usr/share/fonts/ # 复制字体
apt update
apt install xfonts-utils
mkfontdir # 安装字体
fc-cache -fv # 刷新字体缓存
复制成功

 注意,上面goo~~~/这一步的意思是,输入“goo”,然后按“CAPSlock”键上面的那个“Tab”键,就可以自动补全成文件夹的名字。

现在我们已经可以正常运行overleaf了。下面是两个可选操作。Enjoy!

(可选,有法律风险

还可以把自己电脑里面的字体上传到/usr/share/fonts/文件夹下,并运行fc-cache -fv。

或者直接下载安装:

代码块
Shell
自动换行
复制代码
sudo apt install ttf-mscorefonts-installer
复制成功

(可选)

如果你不希望Overleaf安装在80端口,你可以参考: https://github.com/overleaf/toolkit/blob/master/doc/overleaf-rc.md