📝

GitHub ActionsでLaTeX自動コンパイル

2022/10/26に公開2

目標

GitHub に LaTeX ソースファイルを push すると自動で PDF へとコンパイルされる環境を作ります.

準備

Git リポジトリを用意します.編集作業を行うブランチ名は,main とします.

$ git init -b main
$ git remote add origin (URL)

main ブランチの編集

とりあえず今回は以下の sample.tex を作っておきます.

sample.tex
\documentclass{article}
\begin{document}
Hello, world!
\end{document}

$ latexmk -pdf でコンパイルできることを確認します.

LaTeX はコンパイル毎にたくさんのファイルを生成しますが,多分全部ソースファイルの名前にならって sample.* になると思います.よって sample.tex だけを管理するために以下のようにします.

.gitignore
sample.*
!sample.tex

ここまでの変更を GitHub 上に push します.

$ git add .
$ git commit -m "Initial commit"
$ git push -u origin main

pdf ブランチの作成

出来上がった PDF ファイルの push 先となる pdf ブランチを作ります.

$ git checkout -b pdf

こちらは sample.* を ignore したくないので,.gitignore を書き換えます.ただし,LaTeX が自動的に生成する sample.aux は,前のものが残っているとコンパイルが失敗することがあるので,これだけ ignore します.

.gitignore
sample.aux

この状態で GitHub 上に push します.

$ git add .gitignore
$ git commit -m "Created branch pdf"
$ git push origin pdf

GitHub Actions の利用

main ブランチに戻り,.github/workflows下の yml ファイルにワークフローを記述します.

$ git checkout main
$ mkdir -p .github/workflows
.github/workflows/latex.yml
name: LaTeX compilation
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps: [ ここに記述 ]

Action 内で Git リポジトリの中身に対する操作を行うときは,actions/checkout を利用します.

      - name: Set up Git repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

fetch-depth: 0 は,main ブランチだけでなく pdf ブランチも fetch するよう指定しています.

次に,Git 環境を整え,main ブランチを pdf ブランチに merge します.

      - name: Merge main branch
        run: |
          git config user.name fiveseven-lambda
          git config user.email fiveseven.lambda@gmail.com
          git checkout pdf
          git merge main

そして TeX ファイルをコンパイルします.GitHub Marketplaceで検索すると,xu-cheng/latex-action というものが出てくるので,これを使います.

      - name: Compile LaTeX document
        uses: xu-cheng/latex-action@v2
        with:
          root_file:
            sample.tex

デフォルトで,latexmk-pdf オプションで PDF へコンパイルされます.

最後に,できあがった PDF ファイルを pdf ブランチに push します.

      - name: Push PDF file
        run: |
          git add .
          git commit -m "LaTeX compilation"
          git push origin pdf

全体では以下のようになります.

.github/workflows/latex.yml
name: LaTeX compilation
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Merge main branch
        run: |
          git config user.name fiveseven-lambda
          git config user.email fiveseven.lambda@gmail.com
          git checkout pdf
          git merge main
      - name: Compile LaTeX document
        uses: xu-cheng/latex-action@v2
        with:
          root_file:
            sample.tex
      - name: Push PDF file
        run: |
          git add .
          git commit -m "LaTeX compilation"
          git push origin pdf

これを push すれば終わりです.

$ git add .
$ git commit -m "Added workflow for LaTeX compilation"
$ git push

これ以降は,sample.tex を編集して main に commit,push するだけで OK です!

Discussion

author256author256

素敵な記事をありがとうございます!私が本記事をもとに設定をしてみた際にハマったポイントがありました.
おそらく執筆から1年以上経って,いろいろな仕様が変わっているのが大きいのだろうと思いますが,この記事を読む方の参考になればと思い,共有させていただきます:

  • 現在の latex-actions では,latexmkrc に渡されるオプションがデフォルトで -pdf -file-line-error -halt-on-error -interaction=nonstopmode になるため,エンジンとして自動で pdflatex が選択されることになります.これを回避するには,args に例えば TeX Wiki にあるようなオプションを指定してやる必要がありました(最後のファイル名は不要).
    • ちなみに私の手元では .latexmkrc に上記に相当するオプションを書いても別のエンジンが選択されてしい,うまくいきませんでした.理由は不明ですが,環境によってはこちらでもうまくいくのかもしれないです.
  • デフォルトではGitHub Actionsには書き込み権限がついていないので,リポジトリの "Settings" > "Actions" > "General" > "Workflow permissions" から書き込み権限を与えてあげる必要があるようです.
とがとが

ご指摘ありがとうございます!確かに変わっていますね.
ちなみに 1 個目ですが,.latexmkrc ファイルよりも latexmk 呼び出し時のコマンドライン引数が優先されます.
少し遅れますが修正いたします!ありがとうございます