Skip to content

Instantly share code, notes, and snippets.

@tamuratak
Created December 17, 2020 13:18
Show Gist options
  • Save tamuratak/9a5b4c655ae793ee9753c29fa4fdc6db to your computer and use it in GitHub Desktop.
Save tamuratak/9a5b4c655ae793ee9753c29fa4fdc6db to your computer and use it in GitHub Desktop.
Github Actions 上の Windows に TeX Live をインストールする

これは「TeX & LaTeX Advent Calendar 2020」の18日目の記事です.

LaTeX Workshop では GitHub Actions 上で integration test を実行しています。Windows、Linux、および macOS の各プラットフォームに TeX Live と VS Code をインストールし、テストを実行しています。特に /\ などパスの扱いに気をつけないといけない Windows 上でテストできるのは非常に良いです。この記事では Github Actions 上の Windows に TeX Live をインストールして、インストールされたファイルをキャッシュする方法を説明します。

.github/workflows/ ディレクトリと test/ ディレクトリにそれぞれ以下のような YAML ファイルを置けばできます。

.github/workflows/texlive_on_win.ymlの内容:

name: TeX Live on Windows
env:
  cache-version: v1
on: [push]

jobs:
  windows:
    runs-on: windows-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v2
    - name: Set up PATH
      run: |
        echo "C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin" >> $GITHUB_PATH
        echo "D:\texlive\bin\win32" >> $GITHUB_PATH
      shell: bash
    - name: Cache TeX Live
      id: cache-texlive
      uses: actions/cache@v1
      with:
        path: D:\texlive
        key: ${{ env.cache-version }}-${{ runner.os }}-texlive-essential
        restore-keys: |
          ${{ env.cache-version }}-${{ runner.os }}-texlive-essential
    - name: Download install-tl.zip
      run: |
        curl -s -O -L http://mirror.ctan.org/systems/texlive/tlnet/install-tl.zip
        unzip -q install-tl.zip
        mv install-tl-2* install-tl-dir
      if: steps.cache-texlive.outputs.cache-hit != 'true'
    - name: Run install-tl-windows.bat
      run: |
        install-tl-dir\install-tl-windows.bat --profile test\texlive_windows.profile
      if: steps.cache-texlive.outputs.cache-hit != 'true'
      shell: cmd
    - name: Run tlmgr install
      run: |
        tlmgr install latex-bin platex uplatex tex xetex
        tlmgr install amsmath graphics tools import subfiles latexmk
      if: steps.cache-texlive.outputs.cache-hit != 'true'

test/texlive_windows.profile の内容:

selected_scheme scheme-infraonly
TEXDIR D:/texlive
TEXMFCONFIG ~/.texlive/texmf-config
TEXMFHOME ~/texmf
TEXMFLOCAL D:/texlive/texmf-local
TEXMFSYSCONFIG D:/texlive/texmf-config
TEXMFSYSVAR D:/texlive/texmf-var
TEXMFVAR ~/.texlive/texmf-var
option_doc 0
option_src 0

解説

何をしているかはだいたい分かるかと思います。

  1. install-tl コマンドにはプロファイルを指定して TeX Live をインストールするというオプションがあるので、それを利用して tlmgr だけを D:/texlive 以下に最初にインストールする。
  2. その後で tlmgr で必要なパッケージだけを D:/texlive 以下にインストールする。
  3. インストールが成功したら D:/texlive 以下をキャッシュする。次回からはこのキャッシュを使用する。
  4. キャッシュをクリアしたい場合は cache-version のバージョンを上げる。

という流れになっています。インストールするパッケージは必要に応じて書き換えればよいかと思います。上の設定では D:/texlive 以下のサイズは100MB程度になります。D:/texlive を使っているのは趣味の問題です。mv install-tl-2* install-tl-dirunzip したときに生成されるディレクトリの名前を install-tl-dir に変えています。

記憶が曖昧ですが、TinyTeXの記事install-tlのリポジトリをたしか参考にしました。

Windows にあらかじめインストールされているソフトはドキュメントを参照してください。Perl や curl がインストールされていてとても便利です。

注意すべき点

GitHub Actions は変化が激しいです。どれくらい激しいかというと公式のドキュメントのURLが頻繁に変わって手元のメモが役に立たなくなるくらいです。やめてほしい。

コマンドは管理者権限で実行されます。ユーザーフォーラムで議論されていたりもしますが、回避策はないようです。

キャッシュのサイズは最大5GBまで、1週間アクセスがないと削除されます。参照

Dドライブの空き容量は14GBらしいです。

役に立った事例

LaTeX Workshop では実行するコマンドに渡すファイル名として / 区切りのパス(%DOC%など)しか利用できなかったのですが、GitHub Actions で色々テストした結果、どうにもならないケースがあることがわかり、\区切りのパスの変数(%DOC_W32%など)を別に用意することにしました。

今後の課題

MiKTeX でも同じようなことがしたいのですが、どうもうまくいかないです。今後の課題としたいと思います。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment