gpt4 book ai didi

latex - 使用 GitLab CI 编译多个 LaTeX 文件

转载 作者:行者123 更新时间:2023-12-04 20:34:03 35 4
gpt4 key购买 nike

问题

我用 LaTeX 写下大学的讲座(这真的很方便),我想要 tex自动编译的文件pdf .

我有几个 .tex我的存储库中的文件如下所示:

.
├── .gitlab-ci.yml
└── lectures
├── math
| ├── differentiation
| | ├── lecture_math_diff.tex
| | ├── chapter_1.tex
| | └── chapter_2.tex
| └── integration
| ├── lecture_math_int.tex
| ├── chapter_1.tex
| └── chapter_2.tex
└── physics
└── mechanics
├── lecture_physics_mech.tex
├── chapter_1.tex
└── chapter_2.tex

所以主文件,例如 lecture_math_diff.tex使用
\include{chapter_1}
\include{chapter_2}

标签,形成整个讲座。

结果,我想在 pdf 中生成我的构建工件,如下所示:
├── math
| ├── lecture_math_diff.pdf
| └── lecture_math_int.pdf
└── physics
└── lecture_physics_mech.pdf

在这里可以做什么?我必须写任何 sh收集所有的脚本 tex文件或使用 gitlab 运行者?

最佳答案

一种方法是使用短脚本(例如 python 或 bash)并运行 latexmk生成 PDF 文件。
latexmk是一个 perl 脚本,它自动编译 Latex 文件。可以找到一个简短的介绍here

使用 python3,脚本可能如下所示:

# filename: make_lectures.py
import os
from subprocess import call

# configuration:
keyword_for_main_tex = "lecture"


if __name__ == "__main__":

tex_root_directory = os.getcwd()

for root, _, files in os.walk("."):
for file_name in files:
# check, if file name ends with `tex` and starts with the keyword
if file_name[-3:] == "tex" and file_name[0:len(keyword_for_main_tex)] == keyword_for_main_tex:
os.chdir(root) # go in the direcotry
os.system("latexmk -lualatex "+ file_name) # run latexmk on the mainfile
os.chdir(tex_root_directory) # go back to root directory in case of relative pathes

此脚本假定只有要编译为 PDF 的文件以关键字 lecture 开头。 (如问题)。但是 if检查要构建的文件的语句也可以扩展为更精细的比较,作为匹配的正则表达式。 latexmk使用命令行标志 -lualatex 调用这里演示如何全局配置构建过程。 .latexmkrc 提供了本地配置可能性(对于每个单个项目) latexmk 读取和处理的文件.

如果我们调用 latexmk作为 shell 命令,我们必须确保它安装在我们的 gitlab 运行器上(以及 texlive )。如果 Docker容器运行器已注册(参见 here 如何完成),然后您只需指定 DockerHub 中的图像名称,这导致示例 gitlab-ci.yml文件如下:
compile_latex_to_pdf:
image: philipptempel/docker-ubuntu-tug-texlive:latest
script: python3 make_lectures.py
artifacts:
paths:
- ./*.pdf
expire_in: 1 week

随意,将图像更改为您喜欢的任何其他图像(例如 blang/latex:latest )。请注意,工件提取假定存储库中没有其他 PDF 文件。

最后一句话:我没试过,但应该也可以安装 texlivelatexmk直接在 gitlab 运行器上(如果您可以访问它)。

关于latex - 使用 GitLab CI 编译多个 LaTeX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318301/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com