docker安装overleaf并升级texlive

news/2024/10/23 9:35:03/

20230321

0. 引言

之前在虚拟机安装了overleaf,应该是两年前的事情了,本来是想尝试一下overleaf更新了什么功能,但是没想到浪费了这么多时间。当时安装的还是2.5的版本,现在已经是3.5了。

在这个过程中,有几个地方需要注意:

  • docker的拉取镜像的代理
  • 容器内部的代理
  • texlive版本问题

代理问题是为了在安装镜像或者包的时候能够快一点;版本问题是因为默认安装的是最小版本,而使用tlmgr去安装包,直接报错无法安装,因为版本不一致。所以这个过程也是浪费了非常多的时间。

1. 安装过程

1.1 安装镜像

首先要做的就是安装三个镜像,sharelate、redis、mongo。overleaf提供了一个toolkit工具,也可以直接使用;不过我还是乐意直接就使用docker-compose来进行安装。

curl -O https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml 

在安装镜像的时候,要看一下怎么来配置docker拉取镜像的代理;这种命令在网上一大堆,这里不在赘述。

1.2 更新texlive版本

由于sharelatex他提供的tex版本非常精简,那么需要安装包的时候,需要使用tlmgr,他的toolkit也说明了这个事情,但是关键问题在于,使用tlmgr的时候,他会报错说版本不一致,例如现在是2023年,实际上镜像里面tex还是2022的版本,但是tlmgr那边已经说到2023了。。所以只能更新。

按照提示来到了网站[1],但是他会告诉你不如直接安装。。然后又来到了[2],可以按照他的介绍来进行安装。注意,这里安装的时候,一定要设置终端的代理,这个代理,相比于docker的就比较容易,直接export环境变量即可。虽然可以使用国内镜像源,但是简单看了两个个。。都没有文档;还是踏踏实实先按照官网说法来执行。

这里我使用的方法是,在perl ./install-tl --no-interaction命令后面加上了--scheme=small,毕竟完整安装太慢了,当然挂上代理其实也还好。如果速度开,直接全安装也还好。

1.3 替换命令

这个时候,在sharelatex镜像中,/usr/local/texlive/中可以看到两个两个版本,一个是2023,一个是2022,可以直接把2022删除。但是这个时候/usr/local/bin里面的命令链接全都失效了[3]。

此时需要把这些新命令都全部链接到新的文件,进入到新版本的bin/xxx/中,xxx是下载的架构;然后执行./tlmgr path add。链接都生效了。

1.4 安装库

但是这个时候,进入sharelatex执行,却发现根本编译不了,只说报错了。
这个时候比较尴尬,比原来仅仅说缺失包还恶心。

这个时候只能去镜像里面查看,/var/log/sharelatex里面可以看,然后发现是命令latexmk失效,这个缺失可以在/usr/local/bin里面看到,安装这个只需要执行tlmgr install latexmk即可。

此时在sharelatex的网页新建一些简单的文档是可以编译的。还是一些比较复杂的文档就不行了,那么就需要安装一些库。

他的报错信息例如:makecell.sty找不到,那就是库不存在,此时一般来说,进入到镜像里面然后安装tlmgr install xxx即可,但是也有一些不行,例如authblk,在ctan官网查找包,可以看到其实这个命令是在preprint包里面的,所以直接安装preprint即可。

但是说实话,缺的包多了之后,属实顶不住。所以想图方便的话,还是把前面安装的时候那个small给去掉。

参考

[1]Upgrade from TeX Live 2022 to 2023
[2]TeX Live - Quick install for Unix
[3]After a completed TeX Live installation on Linux: how can I run just the “Create symlinks to standard directories” option?


http://www.ppmy.cn/news/33702.html

相关文章

脱不下孔乙己的长衫,现代的年轻人该怎么办?

“如果我没读过书,我还可以做别的工作,可我偏偏读过书” “学历本该是我的敲门砖,却成了我脱不下的长衫。” 最近,“脱下孔乙己的长衫”在网上火了。在鲁迅的原著小说中,孔乙己属于知识阶级(长衫客&#xf…

供水管网微观水力模型

国外在管网建模方面起步于20世纪60年代。20世纪80年代,随着计算机及相应技术的发展,遥测远传设备的应用进入了实用化阶段,国内已有很多供水企业实现了供水管网建模。给水管网系统建模,就是为仿真模拟管网系统动态实时运行情况建立…

从 hybrid开发----》微前端

为什么开始写关于微前端的一系列博客? 1. 学生时代讨论关于hybrid APP的应用开发,历史的选择总是变化的,需要更进一步深入。 2. 之前工作项目中见到过沙箱隔离之后CSS冲突,需要学一下如何解决 ----------------------------- …

【Django 网页Web开发】05. 数据库操作,实战用户管理(保姆级图文)

目录1. 安装第三方模块2. ORM2.1 自己手动创建数据库2.2 django连接数据库2.3 建表语句写在哪里?2.4 建表语句写好后如何运行生效?3. 操作表3.1 创建数据表3.2 修改数据表4. 操作数据4.1 插入数据4.2 删除数据4.3 修改数据4.4 查询数据5. 实战&#xff1…

Qt基础之三十三:海量网络数据实时显示

开发中我们可能会遇到接收的网络数据来不及显示的问题。最基础的做法是限制UI中加载的数据行数,这样一来可以防止内存一直涨,二来数据刷新非常快,加载再多也来不及看。此时UI能看到数据当前处理到什么阶段就行,实时性更加重要,要做数据分析的话还得查看日志文件。 这里给出…

MYSQL常用命令大全

文章目录 基本语句链接数据库显示已有数据库创建数据库选择数据库显示数据库中的表显示当前数据库的版本信息,链接用户名删除数据库创建表表 增加将查询结果插入到新表中:表 删除表 修改表 查询in子查询between ~ and ~ 模糊查询模糊查询regexp中的OR:多个信息查询同义词:删…

linux语法复习-01天-用户管理-关机和重启

学习环境推荐使用VMware(搭建linux虚拟机) XShell(在windows命令操作) Xftp(从windows传输文件)linux操作系统大同小异,基本语法都是一样的,我用的是CentOS 7.X,其他版…

48天强训 Day1 JavaOj

48天强训 & Day1 & JavaOj 1. 编程题1 - 组队竞赛 组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 1.1 读题 1.2 算法思想基础 我们应该尽量的让每一个队伍的中间值都最大化~我们应该尽量的让每一个队伍的最小值都足够小~前33%的不应该都作为每个队伍的最大值~ 接下来…