如何使用我通过 git 推送的持续集成服务器 Travis CI 来用 TeX Live 构建我的 LaTeX 文件,尤其是考虑到我不想每次都下载 TeX Live 的所有内容?
我尝试将它放入我的.travis.yml
before_install:
- sudo apt-get update
- sudo apt-get install texlive-latex-extra
# Initialize some directories before installing packages
- sudo mkdir /home/travis/texmf
- sudo tlmgr init-usertree
- sudo tlmgr install stmaryrd # Test installing a package not included by default
script:
- mkdir _build
# Work with a timout of 3 minutes
- travis_wait 3 pdflatex -output-directory _build ./src/nameofmytexfile.tex
但它给了我
Unknown directive ...containerchecksum (...) , please fix it! at /usr/share/texlive/tlpkg/TeXLive/TLPOBJ.pm line 210, <$retfh> line 5761.
我更喜欢使用 pdflatex,因为我也在本地机器上使用它。
有关的
我的剧本受到了如何在 Linux 系统上安装单独的软件包?
我找到了如何安装软件包的方法,正如Travis 文档以及来自tlmgr 无法设置 TLPDB
无需安装额外软件包的更简单的脚本是与 travis 持续集成——未找到 package.sty答案包含指向 latex3 脚本的链接,但它们适用于 LuaTeX,而不适用于 pdflatex。通过这个答案可以找到类似的东西:https://tex.stackexchange.com/a/197587/98850
有关其他持续集成服务的问题
对于类似的问题GitLab 持续集成(感谢@JBantje 创建它),请参阅使用 GitLab CI 自动编译 (La)TeX 文件
答案1
这个答案包含两个答案的摘要:一个使用 Tectonic 和 Docker,另一个使用 TeX Live 和 pdflatex。但还有更多选择,有关完整指南(包括优点/缺点)(以及包括 GitHub Actions 的脚本),请参阅此存储库:github.com/PHPirates/travis-ci-latex-pdf。
1. 使用 Docker 和 Tectonic 构建 LaTeX 的步骤
Tectonic 是一个 LaTeX 引擎(编译器),它会自动下载所需的软件包,并根据需要多次编译(考虑到 BibTeX)。也可以与 biber 一起使用。
Docker 提供了快速下载预安装的 Tectonic 到 Travis 服务器的功能。
- 为 Travis 启用您的 repo:前往 Marketplace,将 Travis GitHub App 安装到您的 GitHub 帐户,向下滚动,选择开源(当您想要使用私有 repos 时也可以),然后选择“免费安装”,然后选择“完成订单并开始安装”。
- 现在您应该进入个人设置 | 应用程序 | Travis CI | 配置,您可以允许访问存储库,选择存储库或所有存储库。
$TRAVIS_BUILD_DIR
将下面的配置文件复制到你的 repo,指定你想要编译的 tex 文件,如果不是,则可能需要更改你的 tex 文件所在的目录src/
。- 提交并推送,查看你的构建travis-ci.com。
文件.travis.yml
:
sudo: required
language: generic
services: docker
script:
# We use the docker image from https://hub.docker.com/r/dxjoke/tectonic-docker/
- docker pull dxjoke/tectonic-docker
# Compiling only main.tex:
- docker run --mount src=$TRAVIS_BUILD_DIR/src,target=/usr/src/tex,type=bind dxjoke/tectonic-docker /bin/sh -c "tectonic main.tex"
# Compiling multiple files as well as using biber:
# - docker run --mount src=$TRAVIS_BUILD_DIR/src,target=/usr/src/tex,type=bind dxjoke/tectonic-docker /bin/sh -c "tectonic --keep-intermediates --reruns 0 biber-mwe.tex; biber biber-mwe; tectonic biber-mwe.tex; tectonic main.tex"
提示:Malcolm Ramsay 已经写了一篇相当完整的博客文章对于类似的用例。
请注意,当你标记 git commit 时,也可以自动将 pdf 部署到你的 GitHub 发布页面,具体说明请参阅概览存储库github.com/PHPirates/travis-ci-latex-pdf。
2. 使用 pdflatex 和 TeX Live 构建 LaTeX 的步骤
我改编了LaTeX3 构建文件与 pdflatex 一起使用。pdflatex 的一个缺点是需要安装更大的 TeX Live 方案(基本方案而不是 infraonly),因为其中包含 pdflatex。另一方面,Travis 允许缓存,因此您不必每次都下载它。请注意,您也可以从 Docker 映像中使用 TeX Live 和 pdflatex,请参阅来自的答案斯特劳曼。
如果您使用更多包,只需将它们添加到下面的文件中即可。.cls
文件也适用。
texlive_install.sh
:
#!/usr/bin/env sh
# Originally from https://github.com/latex3/latex3
# This script is used for testing using Travis
# It is intended to work on their VM set up: Ubuntu 12.04 LTS
# A minimal current TL is installed adding only the packages that are
# required
# See if there is a cached version of TL available
export PATH=/tmp/texlive/bin/x86_64-linux:$PATH
if ! command -v texlua > /dev/null; then
# Obtain TeX Live
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xzf install-tl-unx.tar.gz
cd install-tl-20*
# Install a minimal system
./install-tl --profile=../texlive/texlive.profile
cd ..
fi
# Just including texlua so the cache check above works
# Needed for any use of texlua even if not testing LuaTeX
tlmgr install luatex
# Other contrib packages: done as a block to avoid multiple calls to tlmgr
# texlive-latex-base is needed to run pdflatex
tlmgr install \
exam \
amsfonts \
stmaryrd \
amsmath
# Keep no backups (not required, simply makes cache bigger)
tlmgr option -- autobackup 0
# Update the TL install but add nothing new
tlmgr update --self --all --no-auto-install
texlive/texlive.profile
:
selected_scheme scheme-basic
TEXDIR /tmp/texlive
TEXMFCONFIG ~/.texlive/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /tmp/texlive/texmf-local
TEXMFSYSCONFIG /tmp/texlive/texmf-config
TEXMFSYSVAR /tmp/texlive/texmf-var
TEXMFVAR ~/.texlive/texmf-var
option_doc 0
option_src 0
.travis.yml
:
install:
- source ./texlive_install.sh
cache:
directories:
- /tmp/texlive
- $HOME/.texlive
script:
- mkdir _build
# Prefix command with travis_wait x so it times out after 3 mins
- travis_wait 3 pdflatex -output-directory _build ./src/nameofmytexfile.tex
请注意,当你标记 git commit 时,也可以自动将 pdf 部署到你的 GitHub 发布页面,具体说明请参阅概览存储库github.com/PHPirates/travis-ci-latex-pdf。
更新日志
2018 年 10 月更新 @WtfJoke修改了@rekka 的 Docker 镜像以与 biber 配合使用,并更新了说明
2018 年 7 月更新 @rekka提供了一个带有 Tectonic 的 Docker 镜像,它使构建速度更快,构建文件更短,并添加了说明。
2018 年 5 月更新Travis 正在将开源从 travis-ci.org 迁移到 travis-ci.com,并且他们推出了 GitHub App。说明已更新。
2018 年 1 月更新我发现构造引擎,添加了说明。
答案2
Travis-CI 不支持 LaTeX,但 R 是社区维护的。由于 R 使用 LaTeX 来运行一些插图和构建手册,因此您可以通过 R 访问 LaTeX 并以此方式构建它。使用 Yihui Xie 的tinytex
软件包,构建 LaTeX 文档只需要一个非常简单的脚本。
例如,以下是.travis.yml
来自虚拟存储库.tex
它使用构建第一个文件pdflatex
,然后复制 PDF 作为版本:
language: r
sudo: true
latex: false
pandoc: false
warnings_are_errors: false
install: echo "Nothing occurs at installation, only script"
script:
- Rscript install_texlive.R
- Rscript -e 'tinytex::pdflatex(list.files(pattern = "\\.tex$")[1], bib_engine = "biber")'
branches:
- master
- travising
deploy:
provider: releases
skip_cleanup: true
api_key:
secure: <generated by `travis setup releases`>
file: Report.pdf
on:
repo: HughParsonage/latex-travis
安装_texlive.R
if (!requireNamespace("tinytex", quietly = TRUE)) {
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("jsonlite", repos = "https://cran.rstudio.com/", quiet = TRUE)
install.packages("httr", repos = "https://cran.rstudio.com/", quiet = TRUE)
install.packages("memoise", repos = "https://cran.rstudio.com/", quiet = TRUE)
install.packages("devtools", repos = "https://cran.rstudio.com/", quiet = TRUE)
cat('devtools installed\n')
}
devtools::install_github(c('yihui/tinytex'), quiet = TRUE)
tinytex::install_tinytex()
}
答案3
2018年11月:
使用 TeX Live 从 Docker 镜像构建 LaTeX
最小示例
使用以下命令.travis.yml
:
sudo: required
language: generic
services: docker
tex-config:
- build-pattern=src/main.tex,src/mwe.tex
- packages=cancel, exam
script:
- docker run --mount src=$TRAVIS_BUILD_DIR/,target=/repo,type=bind strauman/travis-latexbuild:small
完整答案
我制作了一个版本,可以通过这个 git 仓库并伴随这这是快速入门:
按照以下设置后,您的存储库将具有以下功能
- 你推送到分支
- 特拉维斯-西
pdflatex
自动安装配置文件中指定的包,并通过latexmk
配置文件中指定的 TeX 文件 运行测试。- 如果包含该文件的目录
.tex
有一个名为的文件wants-fail
,那么仅当.tex
-file 构建失败时 travis 才会成功。
- 如果包含该文件的目录
笔记:如果你希望 Travis 推送包含已构建 PDF 的分支,请查看主分支
设置:
在你的仓库中,你需要来自这个分支的两个文件:.travis.yml
-file 和.travis/tex-config.ini
。
注意::您还必须添加travis-ci.org到你的仓库,然后你的仓库到travis-ci.org。
- 复制
.travis.yml
将文件从此存储库复制到你的 git 存储库的根目录 - 复制
.travis/tex-config.ini
将文件从此 repo.travis/tex-config.ini
复制到你的repo。确保在此文件中添加软件包(行后packages=
:逗号分隔) - 利润
根据您的需要进行配置.travis/tex-config.ini
。有关更多高级选项(例如,测试后将 PDF 推送回 git repo),请参阅主分支。 这主分支还有深入的配置参考。
注意:如果你想使用更高级的功能(推回到 git 或其他 TeX 方案),你必须使用.travis.yml
来自主分支!