TeX + vscode + git on WSL2(Windows Subsystem for Linux 2) 設定メモ

なぜWSL2?

Windows10にTeXを直乗せして動かしたくせない理由として,vscode拡張機能であるlatex workshopからtexに備わる一括コンパイル機能であるlatexmkを最優先に使用したいのに,その手法がwindowsと致命的に相性が悪いことが挙げられます.
ご存知の通りにwindowsのパスの区切りはバックスラッシュ(円記号)ですが,macOSLinuxと同じ設定のままlatex workshopからlatexmkを起爆すると,なぜかtex関係ファイルの絶対パスがスラッシュ/とバックスラッシュ\が入り混ざったものとして生成されてしまい,ただちにundefined control sequenceI can't find fileコでンパイルエラーを吐かれてしまいます.
どこに原因があるか詳しくはわかりませんが,vscodeで開いているルートフォルダの直前にだけ\が入っているならまだしも,それ以外の場所にも\が入っていたりするために,個人的にはこの問題の解決のためだけに労力を割くのは面倒だと思いました.

現状ではUNIXLinuxのパス表記が圧倒的に正義である(とても強い主張)以上は,OSも拡張機能もデフォルトでパス表記に/を使う認識が共有されているmacOSもしくはLinuxを常に使用することこそ非常に正しい選択肢であり,マシンリソースが十分にあるならばWSL2の採用を検討すべきでしょう.マルチプラットフォームな作業を目指すなら,尚更にPowerShellを含めたWindowsのデフォルト環境を直ちに捨てることこそが,余計な労力を減らすことに繋がります.ここではそのやり方についてメモをしていきたいと思います.

PowerShellの導入

これがないと話になりません,絶対に必要なので速やかに導入しましょう.

docs.microsoft.com

WSL2の導入

頻繁に更新されているらしいので,バージョン違いは気をつけましょう.これは2021年12月における最新の情報のはずです.

OSアップグレードと導入

現行最新版のWindows10 21H2ならWSL2が簡単に利用できます.WSLと比べて処理性能が格段に向上しているため,直ちにアップグレードして簡単なWSL2の導入環境を整えましょう.幾らか古い版でも導入こそできますが,マニュアルを見つつ行う手動でのインストールは非常にダルい上に下らないミスを誘発しかねませんので,やめた方がお得です.
Window11ならデフォルトでOKです,その後は以下の手順に従います.

docs.microsoft.com

docs.microsoft.com

種類は主にUbuntuDebian・KaliLinuxですが,特に需要がなければ素直にUbuntuで良いでしょう.

お互いのファイルを参照するには

例えばWindowsからWSLもしくはWSLからWindowsでファイルを交換したい場合,Windowsから見て

\\wsl$\<環境の名前>

がWSLのルートディレクトリであり(ネットワークドライブ),その逆にLinuxから見て

/mnt/c

がcドライブになります(他のドライブも同様)(マウントドライブ).

環境(ディストリビューション)の複製

WSL2では動作環境をtarしながらexportもしくはimportすることができます.基本的にパッケージ扱いであるため,C:\Users\<ユーザーの名前>\AppData\Local\Packagesの中に紛れ込んでいるのですが,これを行えばバージョン管理や環境保全ができます.そのためには以下を参考にします.

docs.microsoft.com

docs.microsoft.com

前者ではDockerのimageからLinuxを叩き起こしそれを吸い取るやり方が載ってますが,Windowsから供給されるバージョンでよければ無視して良いです.Dockerの導入は以下を参照してください(必ずwsl2を設定し終わってからやりましょう,すると\\wsl$\にDocker系が入ってきてくれます).

docs.microsoft.com

この記事においては本質ではないのでパスします.より難しいことは以下を読みましょう.

docs.microsoft.com

ディストリビューションの実体

デフォルトでは

C:\Users\<ユーザーの名前>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuWindows_<謎のハッシュ値>\LocalState\ext4.vhdx
C:\Users\<ユーザーの名前>\AppData\Local\Packages\KaliLinux.<謎のハッシュ値>\LocalState\ext4.vhdx
C:\Users\<ユーザーの名前>\AppData\Local\Packages\TheDebianProject.DebianGNULinux_<謎のハッシュ値>\LocalState\ext4.vhdx

にありますが,前述したexportおよびimportを行い丸ごとdドライブに移行することも可能です.

zshの導入

Ubuntuを適切に導入した場合のシェルはおそらくbashですが,より新しく多機能なzshをお勧めします.そのためにはまずsudo aptUbuntuをアップデートしてからzshを入れます.

sudo apt update
sudo apt upgrade
sudo apt install zsh
sudo chsh -s $(which zsh)

必要な依存パッケージがインストールされるかと思いますが,上手くいけば

echo $SHELL #->zsh?

が得られます.この後で~/.zprofile~/.zshrcを作成しても構いません.

それぞれの役割

前者はログインシェルの起動時に読み込まれ,後者はそれに加えてインタラクティブシェルの起動時に読み込まれます.これは後述しますが,パス設定は後者に行う方が良いでしょう.

texをダウンロード

まずはmacOSに倣って~/Downloadsを作成しましょう.そこに移動したら次に

curl -O http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/install-tl-unx.tar.gz

で一式を落とします.

余力があればで良いですが,こういたデフォルトのツールも古めだと思われるので,macOSに倣ってhomebrewを導入し完全なパッケージの管理体制を整えましょう.

docs.brew.sh

sudo apt-get install build-essential procps curl file git
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

texのインストール

先ほどのファイルを

tar -xvf install-tl-unx.tar.gz

で解凍し,install-tlがある位置に移動します.次に

sudo ./install-tl --repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet

でインストールを実行します.
この際にインストールオプションを聞かれますが,とりあえずはフルセットで導入しても構いません.またインストールには時間がそこそこかかります,もし失敗した際は設定したオプションを使い回す

--profile installation.profile

をコマンドに追加して繰り返し挑戦してみましょう.

GUIは必要か

wslでguiが使えるwslgなるプラグインこそあるそうですが,windows10の21H2のwsl2ですら現状では使えていません(windows11のデベロッパ向けのinsider previewでのみ使えるようです).

github.com

tex組版においてguiを使う場面があるとすれば生成したpdfを見る時くらいですが,それは前述した方法でファイルにアクセスすれば良いので,ぶっちゃけコマンドさえあればOKです.

パスを通す

現状ではzshにパスが通っていない上にmacOSのように便利なシンボリックリンクも作られていませんので,vscode拡張機能は実行ファイルを見つけられません.そのためmacOSに倣って以下の手順でパスを通します.デフォルトでは\usr\local\texlive\2021\bin\x86_64-linuxにあります.

シンボリックリンクの作成

まず/Library/TeX/binを作成し(sudoが必要です),そこに/usr/local/texlive/[]/bin/x86_64-linuxをリンクします.これはわかりやすいようにディレクトリ名を揃えていますが,お好みで構いません.

sudo ln -s /usr/local/texlive/<バージョン年度>/bin/x86_64-linux /Library/TeX/bin/x86_64-linux

もしバージョンが変わった場合は適宜に年度を変更してリンクし直しましょう,ちなみにmac texではデフォルトでこの作業をやってくれます(なのでhomebrewとの食い合わせがよろしくないですね).

パスを作成する

~/.zshrcの最後にこの場所を書き加えます,これよりも上位の設定ファイルは弄らない方が吉です,手動でやらない場合でも以下を行えば結構です.

echo 'export PATH="/Library/TeX/bin/x86_64-linux":$PATH' >> ~/.zshrc

念の為にwhich latexmkで見つかるかどうかを確認しておきましょう.

vscodeを導入そして設定

microsoft謹製のvscodeならデフォルトでwsl2の中を扱えます,以下を参考に導入しましょう.

docs.microsoft.com

この時点でubuntuが立ち上がり次第で自由にファイルの編集が行えるだろうと思われます.

gitとlatexmkを設定

ここから先はwsl2に限らない汎用な設定になりますので,以下を参照してください.

soluna-eureka.hatenablog.com

soluna-eureka.hatenablog.com

私の環境ではmacOSに倣った設定を流用して特に問題はありませんでした,すなわちvscodeの設定ファイルを同期させても問題が起きないため,wsl2を使用する恩恵が受けられるというものです.

感想

まさか私がwin・maclinux・wslの四刀流をするとは思いませんでした…