使用 ChatGPT o1 修复 GitHub 工作流 LaTeX 构建 | 原创,AI翻译
我最近在使用GitHub flow时遇到了fontawesome5包的问题。4o-mini提供的解决方案(使用TeX Live 2021并通过tlmgr install fontawesome5)没有生效,但4o提出了一个更好的方法(使用TeX Live 2023,仍然通过tlmgr安装fontawesome5),我正在尝试。虽然问题没有完全解决,但从TeX Live 2021切换到2023已经带来了显著的改进。
4o-mini 的回答
你遇到的错误与tlmgr(TeX Live Manager)在用户模式下未正确初始化有关。具体信息tlmgr: user mode not initialized, please read the documentation!表明tlmgr在用户环境中没有正确设置。
以下是修复方法的详细说明:
修复tlmgr用户模式错误
-
正确设置
tlmgr为用户模式: 你需要明确告诉tlmgr以用户模式运行,并确保其正确初始化。在你的脚本中,可以通过以下步骤实现:- 确保通过设置正确的环境变量,让
tlmgr运行在用户模式。 - 你也可以在使用
tlmgr之前初始化用户特定的TeX Live目录。
- 确保通过设置正确的环境变量,让
-
以用户模式初始化
tlmgr: 在运行tlmgr命令之前,请确保使用以下命令初始化tlmgr:tlmgr init-usertree这将在
~/texmf中创建用户特定的TeX Live树。初始化完成后,你就可以运行tlmgr update和install命令了。 -
修改你的GitHub Actions工作流: 更新你的GitHub Actions工作流文件,加入初始化步骤。以下是修改工作流的示例:
- name: Set tlmgr to user mode run: | # 初始化用户模式下的TeX Live目录 tlmgr init-usertree tlmgr update --self tlmgr install fontawesome5
完整示例
如果你将此作为更大GitHub Actions工作流的一部分运行,可以将这些更改整合到相关的job部分:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install TeX Live (xelatex)
run: |
sudo apt-get update
sudo apt-get install -y texlive-xetex
tlmgr init-usertree # 初始化TeX Live用户树
tlmgr update --self # 更新tlmgr本身
tlmgr install fontawesome5 # 安装所需包
命令说明
tlmgr init-usertree:初始化用户特定的TeX Live树(通常位于~/texmf)。tlmgr update --self:将tlmgr包自身更新到最新版本。tlmgr install fontawesome5:安装fontawesome5包。
附加说明
- 权限:确保运行GitHub Actions工作流的用户有权限在TeX Live用户目录中安装和修改文件。
- 环境变量:如果你使用自定义路径,可能需要调整
TEXMFSYSVAR或TEXMFHOME指向你的特定目录。
通过确保tlmgr以用户模式初始化并在GitHub Actions工作流中正确设置,这个错误应该会被解决。告诉我这个方法是否有效,或者你是否遇到其他问题!
o1 回答
我理解你在GitHub Actions工作流中遇到tlmgr(TeX Live Manager)的问题,特别是在尝试安装fontawesome5包时。错误信息:
TLPDB: not a directory, not loading: /home/runner/texmf
tlmgr: user mode not initialized, please read the documentation!
Error: Process completed with exit code 2.
表明tlmgr无法在“用户模式”下运行,因为必要的目录和配置没有正确设置。这个问题通常出现在使用包管理器(如apt-get)提供的TeX Live安装时,与TUG(TeX Users Group)的完整TeX Live安装相比,功能有限。
为了解决这个问题,我建议在GitHub Actions工作流中手动安装TeX Live 2023。这种方法确保tlmgr具有完整功能,并且可以无问题地安装fontawesome5等额外包。
逐步解决方案
- 移除系统TeX Live安装:
- 避免使用
apt-get install texlive-xetex,因为它提供的是部分TeX Live安装,且tlmgr功能受限。
- 避免使用
- 手动安装TeX Live 2023:
- 直接从TUG下载并安装TeX Live。
- 配置PATH环境变量:
- 通过更新PATH确保TeX Live二进制文件可访问。
- 使用
tlmgr安装所需包:- 更新
tlmgr并安装fontawesome5。
- 更新
- 使用缓存优化工作流(可选):
- 缓存TeX Live安装以加快后续工作流运行速度。
更新后的GitHub Actions工作流
以下是你GitHub Actions工作流的更新版本,其中包含了手动安装TeX Live 2023并正确设置tlmgr以安装fontawesome5包的步骤。
name: Deploy Jekyll with GitHub Pages dependencies preinstalled
on:
push:
branches: ["master"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
awesome-cv-copy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Make
run: sudo apt-get update && sudo apt-get install -y make
- name: Cache TeX Live
uses: actions/cache@v3
with:
path: /usr/local/texlive/2023
key: $-texlive-2023
restore-keys: |
$-texlive-
- name: Install TeX Live 2023
if: steps.cache-texlive.outputs.cache-hit != 'true'
run: |
# 安装TeX Live安装器的依赖
sudo apt-get update
sudo apt-get install -y perl wget xz-utils
# 下载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-*/
# 创建自动化安装的texlive.profile文件
cat <<EOF > texlive.profile
selected_scheme scheme-full
TEXDIR /usr/local/texlive/2023
TEXMFCONFIG ~/.texlive2023/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /usr/local/texlive/2023/texmf-local
TEXMFSYSCONFIG /usr/local/texlive/2023/texmf-config
TEXMFSYSVAR /usr/local/texlive/2023/texmf-var
binary_x86_64-linux 1
collection-basic 1
collection-latex 1
collection-fontsrecommended 1
EOF
# 使用profile文件运行安装器
sudo ./install-tl --profile=texlive.profile
- name: Add TeX Live to PATH
run: echo "/usr/local/texlive/2023/bin/x86_64-linux" >> $GITHUB_PATH
- name: Update tlmgr and Install fontawesome5
run: |
tlmgr update --self
tlmgr install fontawesome5
- name: Run make awesome-cv-copy
run: make awesome-cv-copy
build:
runs-on: ubuntu-latest
needs: awesome-cv-copy
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python 3
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install python-frontmatter
- name: Generate notes links
run: |
python scripts/generate_notes_link.py
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./
destination: ./_site
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
deploy:
environment:
name: github-pages
url: $
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
详细说明
- 检出仓库:
- 使用
actions/checkout@v4操作克隆你的仓库。
- 使用
- 设置Make:
- 通过
apt-get安装make,确保可用于构建你的CV。
- 通过
- 缓存TeX Live:
- 使用
actions/cache@v3缓存位于/usr/local/texlive/2023的TeX Live安装。这可以显著减少后续工作流运行的安装时间。
- 使用
- 安装TeX Live 2023:
- 条件执行:
if: steps.cache-texlive.outputs.cache-hit != 'true'条件确保只有在未缓存时才安装TeX Live。 - 安装依赖: 安装必要的依赖,如Perl、
wget和xz-utils。 - 下载并解压安装器: 从CTAN下载最新的TeX Live安装器并解压。
- 创建安装配置文件: 创建一个
texlive.profile文件以自动化安装过程。该配置文件指定:selected_scheme scheme-full: 安装完整的TeX Live发行版。你可以根据需要调整为最小方案。- 目录: 指定TeX Live及其配置的安装位置。
- 集合: 选择基本集合,如
basic、latex和fontsrecommended。
- 运行安装器: 使用指定的配置文件执行安装器,将TeX Live 2023安装到
/usr/local/texlive/2023。
- 条件执行:
- 将TeX Live添加到PATH:
- 通过追加TeX Live二进制目录更新
PATH环境变量。这确保后续步骤中可以访问tlmgr和其他TeX Live命令。
- 通过追加TeX Live二进制目录更新
- 更新tlmgr并安装
fontawesome5:- 更新
tlmgr: 确保tlmgr自身是最新的。 - 安装
fontawesome5: 使用tlmgr安装fontawesome5包,解决最初的问题。
- 更新
- 运行Make命令:
- 执行
make awesome-cv-copy,使用已安装的TeX Live环境构建你的CV。
- 执行
- 构建和部署作业:
- 这些基本保持不变,但由于PATH已更新,确保TeX Live安装在整个工作流中可用。
其他建议
- TeX Live安装时间:
- 缓存: 包含
actions/cache@v3步骤有助于在第一次运行后缓存TeX Live,缓解漫长的安装时间。确保缓存键($-texlive-2023)准确反映TeX Live版本,避免缓存不匹配。
- 缓存: 包含
- 自定义TeX Live安装:
- 如果你不需要完整的TeX Live发行版,可以修改
texlive.profile只安装特定集合,减少安装时间和磁盘使用量。例如,将scheme-full替换为scheme-basic,并只指定必要的集合。
- 如果你不需要完整的TeX Live发行版,可以修改
- 验证安装:
-
为确保TeX Live正确安装,你可以添加验证步骤:
- name: Verify TeX Live Installation run: | tex --version tlmgr --version kpsewhich fontawesome5.sty此步骤可以通过确认TeX Live命令可访问且
fontawesome5.sty已安装来帮助诊断问题。
-
- 正确处理PATH:
- 使用
echo "/usr/local/texlive/2023/bin/x86_64-linux" >> $GITHUB_PATH确保TeX Live二进制文件被添加到所有后续步骤的PATH中。这对tlmgr和LaTeX命令的正常工作至关重要。
- 使用
故障排除提示
- 缓存未命中问题:
- 确保缓存键准确反映TeX Live版本。如果你更新TeX Live或更改安装路径,请相应更新缓存键。
- 安装失败:
- 检查GitHub Actions日志中TeX Live安装期间的任何错误。常见问题包括下载安装器时的网络问题或权限不足。
- 包安装错误:
- 如果
tlmgr安装fontawesome5失败,请验证包名是否正确,以及它是否在TeX Live仓库中可用。
- 如果
- PATH问题:
-
确保PATH正确更新。你可以添加一个步骤打印PATH进行调试:
- name: Print PATH run: echo $PATH
-
- 磁盘空间限制:
- GitHub Actions运行器磁盘空间有限。完整的TeX Live安装可能占用大量空间。如果遇到磁盘空间问题,请考虑安装最小化的TeX Live设置。
带有验证的最终工作流示例
以下是一个更全面的工作流,包含验证步骤以确保一切正确设置:
name: Deploy Jekyll with GitHub Pages dependencies preinstalled
on:
push:
branches: ["master"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
awesome-cv-copy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Make
run: sudo apt-get update && sudo apt-get install -y make
- name: Cache TeX Live
uses: actions/cache@v3
with:
path: /usr/local/texlive/2023
key: $-texlive-2023
restore-keys: |
$-texlive-
- name: Install TeX Live 2023
if: steps.cache-texlive.outputs.cache-hit != 'true'
run: |
# 安装TeX Live安装器的依赖
sudo apt-get update
sudo apt-get install -y perl wget xz-utils
# 下载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-*/
# 创建自动化安装的texlive.profile文件
cat <<EOF > texlive.profile
selected_scheme scheme-full
TEXDIR /usr/local/texlive/2023
TEXMFCONFIG ~/.texlive2023/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL /usr/local/texlive/2023/texmf-local
TEXMFSYSCONFIG /usr/local/texlive/2023/texmf-config
TEXMFSYSVAR /usr/local/texlive/2023/texmf-var
binary_x86_64-linux 1
collection-basic 1
collection-latex 1
collection-fontsrecommended 1
EOF
# 使用profile文件运行安装器
sudo ./install-tl --profile=texlive.profile
- name: Add TeX Live to PATH
run: echo "/usr/local/texlive/2023/bin/x86_64-linux" >> $GITHUB_PATH
- name: Verify TeX Live Installation
run: |
tex --version
tlmgr --version
kpsewhich fontawesome5.sty || echo "fontawesome5.sty not found"
- name: Update tlmgr and Install fontawesome5
run: |
tlmgr update --self
tlmgr install fontawesome5
- name: Verify fontawesome5 Installation
run: kpsewhich fontawesome5.sty
- name: Run make awesome-cv-copy
run: make awesome-cv-copy
build:
runs-on: ubuntu-latest
needs: awesome-cv-copy
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python 3
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install python-frontmatter
- name: Generate notes links
run: |
python scripts/generate_notes_link.py
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./
destination: ./_site
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
deploy:
environment:
name: github-pages
url: $
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
主要增强
- 验证步骤:
- 验证TeX Live安装: 确保
tex、tlmgr和fontawesome5.sty可访问。 - 验证
fontawesome5安装: 确认fontawesome5.sty文件已正确安装。
- 验证TeX Live安装: 确保
- 改进的缓存:
- 缓存键准确性: 缓存键基于操作系统和TeX Live版本,确保对TeX Live的更改需要新建缓存。
- 错误处理:
- 后备消息:
kpsewhich fontawesome5.sty || echo "fontawesome5.sty not found"命令在包未找到时提供后备消息,辅助调试。
- 后备消息:
额外提示
- 最小化TeX Live安装:
- 如果完整的TeX Live安装太耗时或占用太多空间,可以考虑安装最小方案并只添加必要的包。
-
相应地更新
texlive.profile:selected_scheme scheme-basic collection-latexrecommended 1 collection-fontsrecommended 1 collection-fontsextra 1 collection-luatex 1
- 并行化作业:
- 根据工作流的复杂性,你可以考虑并行化作业或跨作业复用步骤以优化运行时间。
- 处理TeX Live更新:
- 定期更新
tlmgr和TeX Live可确保兼容性并访问最新包。
- 定期更新
结论
通过在GitHub Actions工作流中手动安装TeX Live 2023并正确配置环境,你可以克服系统安装的TeX Live包带来的限制和错误。这种设置提供了完整的tlmgr功能,允许你无缝安装额外的LaTeX包(如fontawesome5)。
如果继续遇到问题,请提供更详细的日志或具体的错误信息,我很乐意进一步协助!
更新
name: Test LaTeX
on:
push:
branches: ["main"]
workflow_dispatch:
jobs:
test_latex:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Microsoft core fonts
run: |
sudo apt-get install -y ttf-mscorefonts-installer
fc-cache -fv
- name: List installed fonts
run: fc-list
- name: Setup TeX Live
uses: teatimeguest/setup-texlive-action@v3
with:
packages: |
xeCJK
etoolbox
adjustbox
roboto
sourcesanspro
fontawesome5
tcolorbox
setspace
unicode-math
fancyvrb
olyglossia
polyglossia
- name: Install pandoc
run: sudo apt-get update && sudo apt-get install -y pandoc
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Generate PDF
run: |
pandoc '_posts/en/2025-01-13-gitmessageai-en.md' -o test.pdf -f markdown --pdf-engine xelatex -V CJKmainfont='DejaVu Sans' -V geometry:margin=1in -V classoption=16pt -V CJKoptions=Scale=1.1 -V linestretch=1.5
最后,在尝试了上述方法后,DeepSeek解决了这个问题。