[Latex] Travis-CI与Latex构建开源中文PDF
博主有一本开源书籍,用 latex 排版,托管在Github上。但用 latex 不像是 Markdown,当tex文本更新时,用于最终浏览的PDF文件很难得到及时的更新, 所以博主一直想找到一套工具,实现以下两点愿望:
- 自动构建以测试是否可以成功编译生成PDF文件。
- 始终都能有一个最新版的PDF版本可供下载。
博主之前曾使用过Travis-CI进行单元测试的自动运行,所以猜测它能够实现博主的小心愿。最后一探索,果然可以,但网上相关的中文资料较少,遂自己摸索写下这一篇博客。主要的资料来源于Travis-CI官方文档。
自动构建第一步,安装latex环境
由于Travis-CI
不再对 public repository 提供 Caching Dependencies , 所以我们针对 latex 的每次自动构建都需要下载texlive-full
包。不过博主发现,在配置好后,自动构建的时间一般在 8 分钟左右,时间还是相当可以的。
首先创建一个.travis.yml
文件,在文件中填入以下两行
sudo: required
dist: trusty
其中 dist: trusty
是指定ubuntu版本为14.04
。
为了能够成功编译中文PDF,我们可以使用xelatex
。在这里博主直接下载了texlive-full
包环境用于编译。所以我们在.travis.yml
文件中加入环境配置的代码:
before_install:
- sudo apt-get update
- sudo apt-get -y install texlive-full
由于在服务器端一个中文字体都没有,博主建议开源书籍可以有一个fonts
目录用于存放编译所用字体。如果在 ubuntu 下使用 xelatex ,默认字体是 Adobe的四款开源字体。接下来我们将仓库里的字体安装在服务器的环境下。Linux系统中安装字体很简单,将字体文件只需要放在usr/share/fonts
文件目录下即可。这里有个小坑在于,服务器上没有usr/share/fonts
目录,需要自己新建一个。博主安装字体的代码如下,opentype目录表示.otf格式字体。:
- sudo mkdir -p /usr/share/fonts/opentype/
- sudo mv ./guide-book/fonts/AdobeFangsongStd-Regular.otf /usr/share/fonts/opentype/
- sudo mv ./guide-book/fonts/AdobeHeitiStd-Regular\ \(v5.010\).otf /usr/share/fonts/opentype/
- sudo mv ./guide-book/fonts/AdobeKaitiStd-Regular\ \(v5.010\).otf /usr/share/fonts/opentype/
- sudo mv ./guide-book/fonts/AdobeSongStd-Light\ \(v5.010\).otf /usr/share/fonts/opentype/
- sudo mkfontscale
- sudo mkfontdir
- sudo fc-cache -fv
括号需要进行转义,并且需要使用sudo fc-cache -fv
对字体列表进行更新。
如果在编译latex时出现The font "Adobe Song Std" cannot be found.
,可以在 .travis.yml 中加入fc-list :lang=zh
打印字体信息以进行 debug 。
自动构建第二步,编译生成PDF
在安装完 latex 环境后,我们接下来就可以使用xelatex
进行编译了。
一般对于 latex 稍微熟悉一些的朋友应该都没有问题。将编译的指令写在scripts:
下即可自动运行。
现在博主的.travis.yml
长这样:
sudo: required
dist: trusty
before_install:
- sudo apt-get update
...
- sudo fc-cache -fv
script:
- cd guide-book
- make
在这里博主有两个小建议:
- latex 使用
nonstopmode
模式。在编译时,如果不加任何选项,出错时latex
会等待用户输入一个新的tex
文件名进行重新编译。但是自动构建并没有人帮我们输入,所以在前期摸索试错时,如果加上这个编译选项,可以更快地看到自动构建的结果,否则就需要等待较长时间(这时候是超时错误)。使用的方法如下:
xelatex SAMPLE.tex -interaction=nonstopmode
- 可以写个 Makefile 文件,只需要 make 即可一步编译。博主就将 xelatex 执行的脚本写在了 Makefile 文件中。
自动构建第三步,PDF自动上传到Github
我们已经生成了PDF文件,下面我们来一步一步把它上传到Github上。
首先,执行sudo gem install travis
安装travis.
如果没有gem
的话,首先需要安装gem
,安装方法请自行寻找。
如果在安装
travis
时失败了,可能是因为网络原因。博主推荐使用ruby淘宝源,淘宝源已经不再支持http
,之前配置成http
的朋友记得更换。如果是第一次配置,使用gem sources -a https://ruby.taobao.org/ --remove http://rubygems.org/
即可替换源。
安装信息如下:
Fetching: ethon-0.8.1.gem (100%)
Successfully installed ethon-0.8.1
Fetching: typhoeus-0.8.0.gem (100%)
Successfully installed typhoeus-0.8.0
Fetching: travis-1.8.2.gem (100%)
Successfully installed travis-1.8.2
Parsing documentation for ethon-0.8.1
Installing ri documentation for ethon-0.8.1
Parsing documentation for typhoeus-0.8.0
Installing ri documentation for typhoeus-0.8.0
Parsing documentation for travis-1.8.2
Installing ri documentation for travis-1.8.2
Done installing documentation for ethon, typhoeus, travis after 10 seconds
3 gems installed
在成功下载了travis
后,我们首先要登录,进入你要自动构建的git 仓库目录下,使用sudo travis login --auto
进行登录。
qian@thinkpad:~/BUAAOS-guide-book# sudo travis login --auto
We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.
Try running with --github-token or --auto if you don't want to enter your password anyway.
Username: SivilTaram
Password for SivilTaram: ****************
Successfully logged in as SivilTaram!
博主在这里一开始遇到了坑。在windows下使用cmd
,在输入密码时都显示明文密码,并且回车后无响应,如果有朋友知道解决方法或者原因,烦请赐教。最后博主用ubuntu,在shell里成功登录。
登录后,我们来使用travis setup releases
来指定要上传的文件
sudo travis setup releases
[sudo] password for qian:
Detected repository as SivilTaram/BUAAOS-guide-book, is this correct? |yes| yes
Username: SivilTaram
Password for SivilTaram: ***************
File to Upload: guide-book/guide-book.pdf
Deploy only from SivilTaram/BUAAOS-guide-book? |yes| yes
Encrypt API key? |yes| yes
其中Encrypt API key
是用于加密的,建议选择 yes。
在完成这一步后,我们可以发现我们的.travis.yml
文件中多了几行,博主的文件增加内容如下:
deploy:
provider: releases
api_key:
secure: xxxxxxxx
file: guide-book/guide-book.pdf
on:
repo: SivilTaram/BUAAOS-guide-book
但是注意,deploy 设置还没有结束!根据官方文档,Travis-CI会在script
执行结束后,默认清除所有生成的文件,所以一定要加上一句skip_cleanup: true
。现在我们完整的.travis.yml
文件应该类似于下面的结构:
sudo: required
dist: trusty
before_install:
- sudo apt-get update
- sudo apt-get -y install texlive-full
- sudo tex -v
script:
- cd guide-book
- make
deploy:
provider: releases
api_key:
secure: xxxxx
file: guide-book/guide-book.pdf
skip_cleanup: true
on:
repo: SivilTaram/BUAAOS-guide-book
如果想添加多个上传文件,将 file:
的选项更改成:
file:
- "FILE 1"
- "FILE 2"
当我们在某次 commit 时已经预先知道本次 commit 无法通过编译,不想自动构建时,可以使用git commit -m "[ci skip] xxxx"
跳过自动构建。
如果想触发自动构建并上传的话,需要打tag,如果不打tag,在realese里的名字会很难看。打的tag
将成为最新版本的名字。可以按照如下步骤进行push。注意commit中不要使用[ci skip]
。
git tag -a v1.1.1 -m "tags content"
git push --tags
git push
其中 v1.1.1即版本号
如果自动构建成功的话,你将在仓库的releases
中看到刚刚自动构建的成果,比如博主的仓库。
如果有遗漏与错误之处还望各位指出~
[Latex] Travis-CI与Latex构建开源中文PDF的更多相关文章
- Travis-CI与Latex构建开源中文PDF
博主有一本开源书籍,用 latex 排版,托管在Github上.但用 latex 不像是 Markdown,当tex文本更新时,用于最终浏览的PDF文件很难得到及时的更新, 所以博主一直想找到一套工具 ...
- GitHub搭配使用Travis CI 进行自动构建服务
Travis CI (Continuous Integration)持续集成服务 用处:自动监控软件仓库,可以在代码提交后立刻执行自动测试或构建 1.在Github自己的仓库根目录里添加.travis ...
- 使用Travis CI自动部署Hexo博客
自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...
- 使用Travis CI自动部署Hexo到GitHub
原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...
- Travis CI Build Continuous Integration
什么是持续集成 持续集成(Continuous Integration)是经常合并小的代码更改的实践,而不是在开发周期结束时合并大的更改.目的是通过以较小的增量开发和测试来构建更健康的软件.这就是Tr ...
- 【Hexo】使用Hexo+github pages+travis ci 实现自动化部署
目录 一.说明 二.成品展示 三.前期准备 本地安装 node.js 本地安装 git github 账号 创建仓库 travis ci 账号 四.安装 Hexo 五.使用 hexo 搭建博客 六.部 ...
- [转]Travis Ci的最接底气的中文使用教程
相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它. Travis Ci是一个基于晕的持续集成项目,目前已经支持大部分主流语言了,如:C.PHP.Ruby.Pyt ...
- 利用Travis CI 让你的github项目持续构建
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
随机推荐
- [AHOI2014/JSOI2014]支线剧情
题目 有源汇上下界最小费用可行流 首先注意到要求是每一条边都经过至少一次,所以对于每一条边我们设成\([1,\infty]\)就好了 另外所有点都能结束剧情,所有点都要向汇点\(t\)连一条\([0, ...
- windows下mysql和linux下mysql主从配置
1. linux下mysql安装版本5.6 windows下mysql版本5.7 不要问我为什么版本不一致 就是想这么搞 2. linux为主服务器 windows为从服务器 3.找到li ...
- linux 的常用命令---------第十阶段
虚拟机三种网络模式 相同模式下的各个虚拟机之间都可以通信----两台虚拟机若都是 nat模式 或 桥接模式 或 仅主机模式,则这两台虚拟机之间是可以通信的. 桥接模式: (配置桥接模式的虚拟机可作为独 ...
- C#中的委托(二)
一.Action<T>和Func<T>委托 除了上篇描述的为每个参数和返回类型定义一个新委托类型之外,还可以使用Action<T>和Func<T>委托. ...
- day67
昨日回顾 1 orm 创建表,新增字段,修改,删除字段,不能创建数据库 -字段属性phone=models.CharField(max_length=64,null=True) -null=Tru ...
- [HEOI2012]采花 BZOJ2743
分析: 听说主席树和莫队可以做,前者不想写,后者我不会... 我们考虑将询问离线,按照左端点排序,之后先处理好从1开始选的答案,之后枚举从1到n,之后依次删除nxt[i],添加nxt[nxt[i]], ...
- R语言入门 :基本数据结构
1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1) 创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或 向量名 = 向量 向量的创建方 ...
- go语言之行--数组、切片、map
一.内置函数 append :追加元素到slice里,返回修改后的slice close :关闭channel delete :从map中删除key对应的value panic : 用于异常处理,停 ...
- STM32一键下载电路设计原理
先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计: STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表: BOOT0=1,BOOT1= ...
- python 带参数的多重继承
1. 不带参数的多重继承 # 作者:hhh5460 # 时间:2017.07.18 class A(object): def show_x(self): print('A') class B(obje ...