Windowsで日本語texのコンパイルを爆速にする方法


書いている人はlatexもVSCodeも,文字通りなんもわからん素人です.
もっといい方法を知っている人,ぜひ教えてください!

要約

  • WindowsだとLinuxに比べてLatex(特に日本語)のコンパイルがだいぶ遅い
  • WSLを使えばWindowsでも速い
  • VSCodeからも呼び出して使えるよ

どんだけ速くなるの?

ここではWindowsとLinux(WSL)で速度を比較します.
Windowsではtexlive2019-20190410をインストールしました.WSLではaptでインストールしています.

対象はこんな感じの2ページ論文です.

コンパイル時間をPowershellで測ってみます.

PS > time ptex2pdf -l -ot -kanji=utf8 robomech2019.tex

→ 5654.5197 msec

このtimeは この記事にあるもの を使わせていただきました.

次に,WSLで同じく実行してみます.

WSL $ time ptex2pdf -l -ot -kanji=utf8 robomech2019.tex


real 0m0.725s
user 0m0.453s
sys 0m0.266s

という感じで7~8倍くらい速いことがわかります.Linuxネイティブだともう少し速い気がします.

設定方法

WSLの中だけで生きていくのは大変なので,
WindowsのIDEを使いながら,WSLのtexを呼び出して使うことにします.
WSLのアプリケーションはWindowsのコマンドプロンプトから簡単に

wsl <コマンド>

で呼び出せるそうなので,これでtexコマンドを呼び出していた部分を置き換えればOKです.
この記事ではVSCodeの例を載せていますが,他の開発環境でも同じようにできると思います.

WSLにlatexをインストール

まずWSLのUbuntuコマンドプロンプトを起動して,

sudo apt install texlive-lang-japanese texlive-latex-extra 

でtexliveをインストールします.他のパッケージも必要に応じてインストールしてください.

VSCodeから使う設定

VSCodeにLaTex-Workshopをインストールしておきます.
https://github.com/James-Yu/LaTeX-Workshop

VSCodeの設定画面を開いて(Ctrl+,),jsonに設定を書きます.

    "latex-workshop.latex.tools": [
    {
        "command": "wsl",
        "args": [
            "ptex2pdf",
            "-l",
            "-od",
            "-V 7",
            "-ot",
            "-kanji=utf8 -synctex=1",
            "%DOCFILE%"
        ],
        "name": "ptex2pdf"
    },
    {
        "command": "wsl",
        "args": [
            "pbibtex",
            "%DOCFILE%",
            "-kanji=utf8"
        ],
        "name": "pbibtex"
    },
],
"latex-workshop.latex.recipes": [
    {
        "name": "toolchain",
        "tools": [
            "ptex2pdf",
            "pbibtex",
            "ptex2pdf",
            "ptex2pdf",
        ]
    },
],

この設定はptex2pdfを使う設定
https://gist.github.com/Ikuyadeu/204d06fffd912f441b383eb02463e29b
を元にしています.

本質的に変わっているのは,

  • ptex2pdfを直接呼び出すのではなくて,wslをコマンドに,ptex2pdfを引数に変えています.
  • %DOC%のところがフルパス(C:\Users\... な感じ)になってエラーになったので%DOCFILE%を使うようにしました.

これだけです.

これで,VSCodeから
ptex2pdf -> pbibtex -> ptex2pdf -> ptex2pdf
の4段階が今まで20秒ほどかかっていたのが,3秒かからず終わるようになりました.

とりあえず速くなったことには満足ですが,なぜWindows版がこんなに遅いのかわからずモヤモヤするので,何かご存知の方,教えていただけると嬉しいです.

ちなみに,XelatexがWindowsで遅いよというStackoverflowのエントリは見つけましたが,ここに書いてあることを試しても改善は感じられませんでした.
xelatexをWindowsとWSLで比較すると,3倍くらいWSL版が速いのです.が,ptex2pdfに比べると差は小さいです.