2023/11/30追記
以下の方法よりも良いやり方を見つけました。latexmkは使わずに、こちらのgitsで紹介されている設定を使うというものです。
https://gist.github.com/Ikuyadeu/204d06fffd912f441b383eb02463e29b
私の環境だとpbibtexでコケたので、step2は削除して使ってます。(bibtexのコンパイルだけ、overleaf上で行っています)
一応以下は参考までに残しておきます。
Latexの編集にはOverleafが便利ですが、ボリュームのある原稿を書くときには、コンパイルが重かったりsynctexが動作しなかったりと微妙なかんじです。
そこで、ローカルのVSCodeでTexを編集したくなりました。
かなり苦労しましたが、一応最低限の設定ができたのでメモ。
できたこと、はまったこと
- VSCodeで快適に編集
- 外部のstyファイルに定義してあるコマンドが、コード補完に認識されない問題にはまった
- ターミナルでコンパイル
- Latex Workshopでコンパイルすると、なぜかエラーを吐く。頑張ったが解消しなかったので、Terminalでコンパイルすることにした。
要件
MacTex
VSCode
設定
基本的にはこの記事のとおりにやる
VSCode で最高の LaTeX 環境を作る #VSCode - Qiita
はまったこと
編集
外部のstyファイルに定義してあるカスタムコマンド(xyz.sty)が、コード補完に出てこなかった。
この問題は、xyz.styをxyz.texに拡張子を変更し、\usepackage{xyz}
のかわりに\input{xyz}
を使うことで解消した。
コンパイル
これがかなり苦戦した。Latex Workshopでコンパイルすると、こんなエラーがでてしまう
[05:18:18.843][Builder] Recipe step 1 The command is latexmk:["-f","-silent","-outdir=out","%WS1%/apssamp"].
[05:18:18.843][Builder] env: undefined
[05:18:18.843][Builder] root: %WS1%/apssamp.tex
[05:18:18.843][Builder] cwd: %WS1%
[05:18:18.844][Builder] LaTeX build process spawned with PID 5912.
[05:18:18.903][Builder] Recipe returns with error code 12/null on PID 5912.
[05:18:18.903][Builder] Does the executable exist? $PATH: <パスの一覧>, $Path: undefined, $SHELL: /bin/zsh
...
これはどうしても修正できなかったので、Terminalでコンパイルすることにした。Terminalでコンパイルすると、VSCodeで開いているPDFは自動で更新されないので、 Ctrl + Shif + Pから "Latex Workshop: Refresh all Latex PDF viewers"を実行する。(あらかじめ、PDFは開いておくこと)
このコマンドをHotkeyに登録しておくと捗る。
Terminalでコンパイルするときの注意点
- latexmkrcを削除してからコンパイルする
- Overleafからpullすると、きっとルートディレクトリに存在しているはず(日本語で書いている場合)
- PDFとsynctex.gzをoutディレクトリにコピーする
このコマンドでコンパイルしている
$ latexmk; cp apssamp.pdf out; cp apssamp.synctex.gz out
Overleafと同期を取るためにはこのコマンドでコンパイル。latexmkrcは最初の1回だけlatexmkrc.bakという名前に変更しておく。
$ latexmk; cp apssamp.pdf out; cp apssamp.synctex.gz out; g pull; g merge origin/master -m "merge"; cp latexmkrc.bak latexmkrc; g add .; g ci -m "update"; g push origin; rm latexmkrc;
やれやれ、一応できました。(コンパイルはひと手間かかるけど)
(ちなみに、画像周りを編集してコンパイルするとPDFが作成されない場合があるので、そのときは生成ファイルをいったん全部削除したうえで、もう一度latexmkを実行する)