使用Docker部署ShareLaTex并简单配置中文环境

使用Docker部署ShareLaTex并简单配置中文环境

转载:使用Docker部署ShareLaTex并简单配置中文环境来自 YXN’s Blog

因为工作需要,在服务器上配置了ShareLaTex环境,因为资料真的超级少,然后看到了转载博主的博客较为详细,故转载在此,但是博主博客中有一点点地方没有说到后面会进行补充。

准备工作

系统与Docker环境安装同上篇Docker部署GitLab并实现基本配置,然后继续按照教程安装==docker-compose==组件。

安装并配置ShareLaTeX

由于ShareLaTeX的安装依赖于MongoDB和Redis,因此本文将使用官方向导建议使用==docker-compose==快速部署ShareLaTeX

  • 拉取最新的ShareLaTeX镜像
1
docker pull sharelatex/sharelatex
1
2
3
4
mkdir -p ~/sharelatex          # 在用户目录下创建一个sharelatex文件夹
cd ~/sharelatex # 进入sharelatex文件夹
curl -O https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml # 下载官方的docker-compose.yml配置文件
sudo vi docker-compose.yml # 使用vi修改配置文件
  • 需要配置的项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 避免端口重复
ports:
- 5000:80

# 修改本地挂载目录
volumes:
- /home/docker/sharelatex:/var/lib/sharelatex

# 添加升级texlive需要的环境变量,主要是添加2018目录到2017前面,目的是为了防止后面安装完整版texlive时出现错误
# 【这里原博主有写,但是我添加以后好像并没有什么效果,不添加也是可以的】
environment:
- PATH: /usr/localsbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/2018/bin/x86_64-linux:/usr/local/texlive/2017/bin/x86_64-linux

# 下面选项设置ShareLaTeX的显示样式
SHARELATEX_APP_NAME: Our ShareLaTeX
SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance
SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png
SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by <a href=\"https://www.sharelatex.com\">ShareLaTeX</a> 2016"},{"text": "Another page I want to link to can be found <a href=\"here\">here</a>"} ]'
SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'

# 修改mongo和redis的本地挂载目录
# mongo
volumes:
- /home/docker/mongo_data:/data/db
# redis
volumes:
- /home/docker/redis_data:/data
  • 创建并运行ShareLaTeX容器,启动后不要着急进入网站
1
2
# 在sharelatex目录下
docker-compose up -d

==这里有一点需要注意==:就是我们配置好ShareLaTex后,如何也配置好了后面的中文环境,如果这个时候我们再去更改配置文件==docker-compose.yml==的话,我们再重新==docker-compose up -d==更新docker环境参数的话,下面的所有的操作都将要重新执行,包括升级并安装texlive操作,以及中文环境的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 进入容器的命令行(sharelatex容器本质上是一个Ubuntu)
docker exec -it sharelatex bash

# 进入texlive默认安装目录
cd /usr/local/texlive

# 复制2017文件夹为2018
cp -a 2017 2018

# 下载并运行升级脚本
wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
sh update-tlmgr-latest.sh -- --upgrade

# 更换texlive的下载源,例如国内的清华源
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/

# 升级tlmgr
tlmgr update --self --all

# 更新字体缓存(好像没成功,但是不影响下面操作)
luaotfload-tool -fu

# 安装完整版texlive(漫长的等待,不要让shell断开)
tlmgr install scheme-full

# 推出sharelatex的命令行界面,并重启sharelatex容器
exit
docker restart sharelatex
  • 使用ShareLaTeX

进入浏览器访问==http://192.168.8.21:5000/launchpad==,根据提示创建Admin用户。

配置中文写作环境

下载的sharelatex镜像里面默认是没有安装xfont和中文字体的,因此无法渲染中文文档,必须安装所需的中文字体,这里以Windows下常用字体和Adobe Song Std为例。原教程见ArchLinux 部署ShareLaTex并且配置中文支持

  • 将Windows字体库(即目录==C:\windows\fonts==)上传到host机,如果Windows安装了Git可以使用==scp==命令直接上传

  • 在host机下把==fonts==目录打包并传到sharelatex容器中

1
2
3
4
5
6
7
8
9
10
11
12
13
# 进入fonts目录
cd fonts/

# 删除其中的.fon字体文件(该种格式文件在后面建立字体目录时会报错),只保留TrueType和OpenType字体,即.ttf和.otf
# 一般地,如果只需要其中特定的中文字体,只需要上传需要的字体即可
rm -r *.fon

# 返回上层目录并打包
cd ..
tar -zcvf winfonts.tar.gz fonts/

# 把压缩文件传到sharelatex容器的root目录下
docker cp winfonts.tar.gz sharelatex:/root
  • 在容器中安装Windows字体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 进入容器的命令行界面
$ docker exec -it sharelatex bash

# 通过安装wqy字体同时安装xfont工具
$ apt-get install xfonts-wqy

# 进入root目录,解压winfonts.tar.gz,并剪切到系统字体目录下
cd ~
tar -zxvf winfonts.tar.gz
mv winfonts /usr/share/fonts/

# 进入字体目录安装字体
cd /usr/share/fonts/winfonts
mkfontscale
mkfontdir
fc-cache -fv

# 检查确认中文字体安装成功
fc-list :lang=zh-cn
  • 回到ShareLaTeX网站,创建一个新项目,使用CTEX宏集和XeLaTeX编译器,即可生成中文pdf。(详见CTEX宏集手册

  • 因为学校论文的需要,有时需要其他中文字体,例如Adobe宋体,其安装流程与上述基本一致。(PS:在GitHub上可以找到公开的Adobe Song Std字体,涉及版权这里不放链接)

==注意==:到此出配置完成了,但是我们会发现我们直接写中文是有问题的,解决方案如下
(1)包含头 \documentclass[utf8]{ctexart}
(2)点开左上角的Menu,进去将Compiler改成XeLaTex即可
这个时候我们就可以愉快的时使用ShareLatex的中文了

Latex教程和模板

这一块暂时懒得写,就简单的收集整理了一下别人写好的,收集的链接再这里