如何使用 Travis CI 自动构建我的 LaTeX?

如何使用 Travis CI 自动构建我的 LaTeX?

如何使用我通过 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 服务器的功能。

  1. 为 Travis 启用您的 repo:前往 Marketplace,将 Travis GitHub App 安装到您的 GitHub 帐户,向下滚动,选择开源(当您想要使用私有 repos 时也可以),然后选择“免费安装”,然后选择“完成订单并开始安装”。
  2. 现在您应该进入个人设置 | 应用程序 | Travis CI | 配置,您可以允许访问存储库,选择存储库或所有存储库。
  3. $TRAVIS_BUILD_DIR将下面的配置文件复制到你的 repo,指定你想要编译的 tex 文件,如果不是,则可能需要更改你的 tex 文件所在的目录src/
  4. 提交并推送,查看你的构建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 仓库并伴随这是快速入门:

按照以下设置后,您的存储库将具有以下功能

  1. 你推送到分支
  2. 特拉维斯-西pdflatex自动安装配置文件中指定的包,并通过latexmk配置文件中指定的 TeX 文件 运行测试。
    • 如果包含该文件的目录.tex有一个名为的文件wants-fail,那么仅当.tex-file 构建失败时 travis 才会成功。

笔记:如果你希望 Travis 推送包含已构建 PDF 的分支,请查看主分支

设置:

在你的仓库中,你需要来自这个分支的两个文件:.travis.yml-file 和.travis/tex-config.ini

注意::您还必须添加travis-ci.org到你的仓库,然后你的仓库到travis-ci.org

  1. 复制.travis.yml将文件从此存储库复制到你的 git 存储库的根目录
  2. 复制.travis/tex-config.ini将文件从此 repo.travis/tex-config.ini复制到你的repo。确保在此文件中添加软件包(行后packages=:逗号分隔)
  3. 利润

根据您的需要进行配置.travis/tex-config.ini。有关更多高级选项(例如,测试后将 PDF 推送回 git repo),请参阅主分支。 这主分支还有深入的配置参考。

注意:如果你想使用更高级的功能(推回到 git 或其他 TeX 方案),你必须使用.travis.yml 来自主分支

相关内容