ちょっとだけ理解するLaTeX+VSCode
基本
.tex --コンパイル(platex等)-> .dvi --変換(dvipdfmx等)-> .pdf
まず人間が.texファイルを書く。これをplatexなどのコンパイラがコンパイルして.dviファイルが生成される。dvipdfmxなどがこのコンパイルされた.dviから.pdfを生成する。
まずCLIでPDF生成までやってみる
.texファイルの作成
main.texというファイルを作成し、中に以下のように書く。
\documentclass{jsarticle}
\begin{document}
これはサンプルです。
\end{document}
コンパイル
$ platex path/to/main.tex
これでmain.texからコンパイルされたmain.dviが生成される。main.dviファイルはパソコンがパソコンのために作る中間ファイルである。
PDF生成
$ dvipdfmx path/to/main.dvi
これでmain.dviからお目当てのmain.pdfが生成される。
latexmk
platexとdvipdfmxの2個もコマンドを叩くのは面倒である。この辺りを全て自動化してくれるのがlatexmkである。設定は~/.latexmkrcに書く。最も基本的な設定は以下である。
#!/usr/bin/env perl
# .tex -> .dvi に使うコマンド
$latex = 'platex %O %S';
# .dvi -> pdf に使うコマンド
$dvipdf = 'dvipdfmx %O -o %D %S';
# コンパイル後にPDFを生成するモードにしておく
$pdf_mode = 3;
なお、実行時には
%S: TeXファイルのパス ex. ~/Documents/LaTeX/mydoc.tex
%D: 出力先ファイルの名前 ex. ~/Documents/LaTeX/mydoc.pdf
%O: 実行時オプション ex. -file-line-error
と置き換えられる。
このように設定しておくことで、main.texファイルがあるディレクトリまでcdして
$ latexmk
とすればmain.texに対してplatex→dvipdfmxを呼んでPDFを生成してくれる。
LaTeX Workshop
LaTeX WorkshopはVSCodeの拡張機能で、ボタンをクリックしたらコンパイルをしてくれるようになったり、保存するだけでPDFを生成してくれたりして便利である。
ツールとレシピ
LaTeX Workshopでは「ツール」と「レシピ」をsettings.jsonで設定できる。「ツール」とはCLIコマンドのひとつに名前をつけて保存したものである。「レシピ」はこの「ツール」を名前で順番に呼び出すものである。以下のようなイメージ。
ツール(コマンドを定義)
- 「切る」:
$ cut_vegetables - 「炒める」:
$ fry_vegetables - 「煮る」:
$ boil - 「カレールーを入れる」:
$ insert_roux
レシピ(ツールと実行順序を指定)
- スープ作成
- 「切る」
- 「煮る」
- カレー作成
- 「切る」
- 「炒める」
- 「ルーを入れる」
今回はlatexmkがほとんどやってくれるので、$ latexmkだけを呼ぶツール(Run latexmk)と、このツールだけを呼ぶレシピcompile -> PDF with latexmkを作成する。
ツール
"latex-workshop.latex.tools": [
{
"name": "Run latexmk",
"command": "latexmk"
}
],
これで$ latexmkコマンドがRun latexmkという名前で保存された。
レシピ
"latex-workshop.latex.recipes": [
{
"name": "compile -> PDF with latexmk",
"tools": [
"Run latexmk"
]
}
],
これでRun latexmkツールを呼ぶレシピを保存できた。
おさらい
これで準備は整った。例のmain.texをVSCodeで開き、変更を加えて保存するとPDFが生成されるはずである。
ここまでの流れをおさらいしよう。main.texファイルを保存すると、LaTeX Workshopは登録されている唯一のレシピのcompile -> PDF with latexmkを呼び出す。このレシピはRun latexmkというLaTeX Workshopのツールを呼ぶ。Run latexmkは登録されている$ latexmkを実行する。
呼び出されたlatexmkは~/.latexmkrcを見に行き、$latexとして登録されているコンパイラplatexでmain.texをコンパイルしてmain.dviというコンパイルファイルを生成し、$dvipdfとして登録されているdvipdfmxでmain.dviからmain.pdfを生成する。
Discussion