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"
]
}
],
// 以下その他の設定
}
エラー内容は以下のようなものです.
2. エラーの意味
まず,ENOENT
は Error 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. まとめ
しっかりとパスを通してあげれば,再びコンパイルできるようになるので,見慣れないエラーにビビらずに対応してくれるといいのかなぁと思います.
自分も同じ現象に見舞われましたが,3.1 だけ有効で,3.2の方だと env: texlua: No such file or directory と別のエラーが出てしまい解決しませんでした.あらゆるコマンドに対するパスが通らなくなっていたようです.
この現象が起きた根本原因は分かりませんが,vscode で ipynb を動かしている最中にクラッシュしてから様子がおかしくなりました…
いずれにせよすぐにエラー解決し助かりました,ありがとうございます!
kiri さん、コメントありがとうございます!
3.2 の方では `/Library/TeX/texbin/texlua` を実行しようとして見つからなかったということなのでしょうが、原因はよくわかりませんね…
別に `texlua` のコマンドを定義している設定があって、そちらでもパスが通らなくなってしまっているのかもしれませんね。
いずれにせよ、3.1 の方法で解決できたようでよかったです!
`.ipynb` でクラッシュした時に様子がおかしくなるという報告もありがとうございます。
再現するのが難しいので、検証はできていませんが、もう少し調べてみたいと思います。
今後ともよろしくお願いいたします。