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

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

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



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

https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.2



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


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

https://docs.microsoft.com/ja-jp/windows/wsl/install

https://docs.microsoft.com/ja-jp/windows/wsl/setup/environment#set-up-your-linux-user-info

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

### お互いのファイルを参照するには
例えばWindowsからWSLもしくはWSLからWindowsでファイルを交換したい場合，Windowsから見て

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

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

```zsh
/mnt/c
```

がcドライブになります（他のドライブも同様）（マウントドライブ）．


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

https://docs.microsoft.com/ja-jp/windows/wsl/use-custom-distro

https://docs.microsoft.com/ja-jp/windows/wsl/basic-command

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

https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-containers:embed

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

https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config

### ディストリビューションの実体
デフォルトでは

```powershell
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 apt`でUbuntuをアップデートしてから`zsh`を入れます．

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

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

```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`を導入し完全なパッケージの管理体制を整えましょう．

https://docs.brew.sh/Homebrew-on-Linux

```zsh
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のインストール
先ほどのファイルを

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

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

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

```

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

```
--profile installation.profile
```

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

### GUIは必要か
wslでguiが使えるwslgなるプラグインこそあるそうですが，windows10の21H2のwsl2ですら現状では使えていません（windows11のデベロッパ向けのinsider previewでのみ使えるようです）．

https://github.com/microsoft/wslg

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の中を扱えます，以下を参考に導入しましょう．

https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

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



# gitとlatexmkを設定

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

https://soluna-eureka.hatenablog.com/entry/2021/07/22/122751

https://soluna-eureka.hatenablog.com/entry/2021/07/22/123019

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



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