VSCode で “Recipe terminated with fatal error: spawn ptex2pdf ENOENT.” が出て,TeX のコンパイルができない

公開日:
最終更新日:
ENOENT のアイキャッチ

VSCode で TeX を書いていてこれまで動いていたはずなのに,突然エラーが出てコンパイルできなくなってしまいました.
その時の解決法をメモに残しておきます.

1. 状況

VSCode で LaTeX Workshop を使って,セーブ時に TeX を自動でコンパイルしてくれるようにしています.
コンパイル方法は settings.json に設定しています.

{
    "latex-workshop.latex.recipes": [
        {
        "name": "ptex2pdf*2",
        "tools": [
            "ptex2pdf",
            "ptex2pdf"
        ]
    }
    ],
    "latex-workshop.latex.tools": [
    {
        "name": "ptex2pdf",
        "command": "ptex2pdf",
        "args": [
            "-interaction=nonstopmode",
            "-l",
            "-ot",
            "-u",
            "-kanji=utf8",
            "-synctex=1",
            "%DOC%.tex"
        ]
    }
    ],
    // 以下その他の設定
}

エラー内容は以下のようなものです.

ENOENT エラーの様子
ENOENT エラーの様子

2. エラーの意味

まず,ENOENTError NO ENTry の略でファイルやディレクトリが存在しないというような意味のエラーです.
つまり,ptex2pdf というコマンドが見つからないよ と言ってくれているわけです.
bibtex をコンパイルする時などは Recipe terminated with fatal error: spawn pbibtex ENOENT というようなエラーが出ることもあるでしょう.

3. 解決法

要するにコマンドが見つからないと言われているので,パスの問題です.
settings.json をいじってパスを通してあげれば or フルパスで書いてあげれば動くようになります.
(なぜ突然パスが通らなくなるのかは残念ながらわかっていないので,ご存知の方いればコメントお待ちしております 🙏)
そのためには,まず ptex2pdf コマンドがどこにあるか調べる必要があるので,ターミナルで which コマンドを実行して探しましょう.

$ which ptex2pdf
/Library/TeX/texbin/ptex2pdf

3.1. パスを通す

筆者の場合 ptex2pdf/Library/TeX/texbin/ptex2pdf にあるので,/Library/TeX/texbin をパスに追加してあげます.
tools の中の args の下にでも env を定義してあげましょう.

{
    // recipe の設定
    "latex-workshop.latex.tools": [
    {
        "name": "ptex2pdf",
        "command": "ptex2pdf",
        "args": [
            "-interaction=nonstopmode",
            "-l",
            "-ot",
            "-u",
            "-kanji=utf8",
            "-synctex=1",
            "%DOC%.tex"
        ],
        "env": {
            "PATH": "/Library/TeX/texbin"
        }
    }
    ],
    // 以下その他の設定
}

これで,無事コンパイルできるようになりました 👏

3.2. フルパスで書いてあげる

筆者の場合,/Library/TeX/texbin/ptex2pdf を実行すればいいので,コマンドをこれに書き換えます.

{
    // recipe の設定
    "latex-workshop.latex.tools": [
    {
        "name": "ptex2pdf",
        "command": "/Library/TeX/texbin/ptex2pdf",
        "args": [
            "-interaction=nonstopmode",
            "-l",
            "-ot",
            "-u",
            "-kanji=utf8",
            "-synctex=1",
            "%DOC%.tex"
        ]
    }
    ],
    // 以下その他の設定
}

これで,無事コンパイルできるようになりました 👏

4. まとめ

しっかりとパスを通してあげれば,再びコンパイルできるようになるので,見慣れないエラーにビビらずに対応してくれるといいのかなぁと思います.

コメント一覧

  1. 自分も同じ現象に見舞われましたが,3.1 だけ有効で,3.2の方だと env: texlua: No such file or directory と別のエラーが出てしまい解決しませんでした.あらゆるコマンドに対するパスが通らなくなっていたようです.
    この現象が起きた根本原因は分かりませんが,vscode で ipynb を動かしている最中にクラッシュしてから様子がおかしくなりました…
    いずれにせよすぐにエラー解決し助かりました,ありがとうございます!

    1. kiri さん、コメントありがとうございます!
      3.2 の方では `/Library/TeX/texbin/texlua` を実行しようとして見つからなかったということなのでしょうが、原因はよくわかりませんね…
      別に `texlua` のコマンドを定義している設定があって、そちらでもパスが通らなくなってしまっているのかもしれませんね。
      いずれにせよ、3.1 の方法で解決できたようでよかったです!

      `.ipynb` でクラッシュした時に様子がおかしくなるという報告もありがとうございます。
      再現するのが難しいので、検証はできていませんが、もう少し調べてみたいと思います。

      今後ともよろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA