VS CodeでLatex(決定版)
最終更新:2020/4/25
目次
1. はじめに
エディタはもともとはAtom使いであったけれど,気分転換がてらVisual Studio Code(以下,Code)に乗り換えてみたら,結構いいんだこれが.特にLatexのコンパイル環境の整理具合が素晴らしい.複数端末での本格導入を決めたので,その備忘録として諸設定を記録しておこうと思う.
有益な情報はweb上にたくさんあるが,「個人的な」最適ソリューションはもちろんないので,ここに記す.少しでも参考になれば.最後に参考にさせていただいたリンクもつけておきます.
パッケージをモリモリに入れてもっさりさせてしまうのはあんまり好きではないので,できるだけシンプルに「すぐ使える」ものを記載したいと思う.
2. できるようになること
① FinderからフォルダごとCodeで開く
② Atomと同水準のシンタックスハイライト,入力補助の実現
③ ターミナルをビルドイン起動して,Codeだけでコンパイル完結(Latexmkを使う)
→これももちろん便利だけど,ビルドインのターミナルを使うまでもなく,latexmkのパスを通せば保存するたびに自動コンパイルされるね.
④ ビルドインされたPDF ViewerとLatexコードとの往来が自由に(SyncTex)
⑤ 上記①-④までを,デバイスの縛りなく自動化できる.
3. 準備
①Codeのダウンロード
まずは,VSCodeを下記のリンクからダウンロードしましょう.Microsoft社製なのでご安心を.
②PDFViewerのダウンロード
基本的に,SyncTexに対応していた方がいい. ただしコンパイルするファイルのパスに日本語が含まれていると無視される(反応しない)ので注意.
Macの場合
skimがいいです.
Windowsの場合
sumatrapdfがおすすめです.
しかしながら
特にこだわりなければCodeビルドインのviewerで十分.というかなぜかSkimだとSyncTex通らない...
③Latexのためのパッケージ整備
Latex Workshop
Latexのコンパイル,シンタックスハイライト,中途ファイルの削除,スニペットの登録など幅広くできます. ただ,記述の通り,コンパイルはLatexmkで行うので,LatexWorkShopからのコンパイル機能は使わない方針. スニペットについても,DashやAlfredで代替もできてエディタ間で横断的に使えるけれど,Windowsで使うときとの横断性を考えるときにはどうしようかな...
日本語化
私はやっていません.なぜなら英語の方がかっこいいから
本当は,Atomの日本語化のもっさり具合のトラウマ.Codeは全然サクサクらしいけど.
→ 読めないからやっぱり導入しました.軽いからOK.
設定の同期
Setting Syncです.gistIDが必要です.
④Latexmkの設定と記述コードの説明
LatexWorkshopだけでもコンパイルは可能なのですが,パスに日本語があるとうまく通らないです.SyncTexについても同じみたい. 「文書ごとにlatexmkファイルを作成しビルドインされたターミナルを起動してコンパイルする」にすることで得られる恩恵は多いです.
→ それもそうなのですが,せっかく常時監視が起動しているなら,カレントディレクトリのlatexmkrcへのパスを通せばいいよね.
恩恵その1.一つのエディタに依存しない環境構築が実現.
第1に,(気分転換に)他のエディタを使っても,他のデバイスを開いても,カレントディレクトリにlatexmkファイルさえあれば,ターミナルへの
latexmk ファイル.tex
の入力だけで完結するということがあります.文書を保存するたびに自動更新するようにするためには,
latexmk -pvc ファイル.tex
がよいです.texファイルがこれしかなければ,ファイル名は端折ってもいいとです.
ホームディレクトリには「.latexmkrc」をとりあえずおいといて,カレントディレクトリごとに「latexmkrc」(ドットなし)を置き,設定を上書きしております.
恩恵その2.ビルド方法に戸惑わない.
第2に,文書ごとにコンパイル方法が異なっている場合でも,カレントディレクトリにlatexmkファイルさえあれば,コンパイル方法について迷子にならない. 特に共同作業をするときや,人にファイルを渡すときにビルド方法を同封しているのは結構いいです.
段取り
latexmkファイルの内容
私はとりあえず,次のコードを記載したlatexmkrcファイルをコンパイルするフォルダにおいております.本文最後のリンクのサイト様などを参照し,自分がとりあえず使うものだけに限定してカスタマイズしております.そのうち追加するかもですが.
#!/usr/bin/env perl # 下記で,latexのビルドコマンド,uplatexです. $latex = 'uplatex -synctex=1 -halt-on-error'; $latex_silent = 'uplatex -synctex=1 -halt-on-error -interaction=batchmode'; $bibtex = 'upbibtex'; $dvipdf = 'dvipdfmx %O -o %D %S'; $makeindex = 'mendex %O -o %D %S'; $max_repeat = 5; $pdf_mode = 3; $pvc_view_file_via_temporary = 0; # macのときはskimで,windowsのときは開きたいビューワーのパスを指定. if ($^O eq 'darwin') { $pvc_view_file_via_temporary = 0; $pdf_previewer = 'open -ga /Applications/Skim.app'; } else { $pdf_previewer = '"○○○○○○○○○" -reuse-instance'; # ○○○○○○○○○には開きたいビューワーのパスを入れます. }
で,VScodeのsetting(json)に次の記述を加えております.加えたコマンドが使えるようになる感じね.
{ "latex-workshop.latex.tools": [ { "name": "latexmk", "command": "latexmk", "args": [ "%DOCFILE%" ], "env": {} }, ], "latex-workshop.latex.recipes": [ { "name": "latexmk 🔃", "tools": [ "latexmk" ] } ], "latex-workshop.view.pdf.viewer": "tab" // https://qiita.com/t_asa/items/97ec9dc336dc827908da }
ビルドインターミナルに強いこだわりがあれば,自動コンパイルを切っておくのも手.私はこだわりないけども.
{ "latex-workshop.latex.autoBuild.onSave.enabled": false }
中間ファイルを消したいならこれ.
{ "latex-workshop.latex.clean.enabled": true }
⑤文書フォルダの雛形作成
1つのファイルに丸々設定と本文を書いてもいいのですが,私は文書ごとにフォルダを用意して区分をしております.この辺もそのうち拘りたいですが,今はこのままで十分.ファイル名を日本語にしないように注意.ときにバグるからね. フォルダ構造は次のような感じ.aggregate.texに「latexmk -pvc」をかければcontents内のファイルを更新するたびに文書が更新される仕組み. 論文の場合には,zoteroからbibtex形式でファイルをエクスポートできるので,これを利用し参考文献リストを作成する.
docment(ここをフォルダごとVSコードに突っ込んで作業フォルダ(cd)に設定)
aggregate.tex ←統合版.これをコンパイルする
reference.bib ←参考文献.Zoteroからエクスポート.
contents ←各章の格納
00_preemble.tex ←プリアンブル
0_title_and_abstract.tex ←タイトルとアブストラクト
1_chapter1.tex ←書き始め
2_chapter2.tex
...
images ←図表を格納
figure1.png
graph1.pdf
...
⑤ 文書の作成と実行 「フォルダを開く」で作業フォルダを開くことができるが,Codeを開いて(Control+R)で直近に開いたプロジェクトファイルにはアクセスできるので高速. macの場合には,ドラッグ&ドロップでfinderから直接開けるようにするのもスピーディーで良い.やり方は次の通り. Finderを開き,「アプリケーション」フォルダを選択. Commandを押しながら,Finder中の表示させたい場所に移動させたいアプリをドラッグ&ドロップ. 開きたいフォルダをそこにドラッグ&ドロップ.
4. おわりに
初心者並みにまとめましたが,とても快適になりました.しかしまだまだ改善できると思いますので,逐次更新て行きたいです.
5. 参考ページ(大変勉強になりました,ありがとうございます)
https://qiita.com/popunbom/items/7d02fc75ad23b735d28c https://meshikui.com/2018/03/09/164/ https://qiita.com/Rumisbern/items/d9de41823aa46d5f05a8 https://texwiki.texjp.org/?Latexmk https://qiita.com/skikkh/items/707e8a5def368a69e9a6 https://qiita.com/geek_shanshan/items/d2b6218bbd66e3f62497