latexmkの導入
latexmkを使う理由
latexmk(ラテフメイク)は例えば以下のような問題を解決してくれるソフトである.
- ラベルをpdfに反映させるためにタイプセットを何回かするのめんどくさい
- 参考文献を引用する際にpLaTeXとbibtexを何回かタイプセットするのがめんどくさい
- texファイルとpdfファイルだけしか必要としないのに, auxファイルとかdviファイルとかいらない.
latexmkを使用すれば, 一度のタイプセットでpLaTeXやbibtex等, 正しい出力がなされるまで自動的に複数回タイプセットしてくれる. また, オプションの設定を行うことで, 不必要な補助ファイルを一気に削除してくれる. ここでは私が使用しているlatexmkの設定と, 簡単な解説を記しておく.
.latexmkrcの設定
まずはテキストエディットを開き, 新規書類を作成する. 中身は一旦何も書かず, ファイル名を.latexmkrcと変更し, 自分のユーザー名のディレクトリに保存する(書類とかムービーとかのフォルダがあるとこ). ただし, 拡張子が非表示になっていて実は.latexmkrc.txtのようなファイル名になっている, なんてことがあれば, .txtの部分を消す. 次にファインダーを開き, ユーザーのディレクトリに移動する. そして[Shift]+[Command]+[.]を押すことで, 隠しフォルダを表示させる. (もう一度押せば非表示になる) 先ほど作成した.latexmkrcファイルがあると思うので, ダブルクリックして開く. そこに, latexmkの設定を自由に記述して保存すれば設定完了. 私は以下のように設定している.
#!/usr/bin/env perl
# file .latexmkrc
# author Keiichiro Nomoto
# created_at 2022.06.11
# modified_at 2023.07.14
$latex = 'uplatex %O -kanji=utf8 -synctex=1 -interaction=nonstopmode -file-line-error %S';
$lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S';
$bibtex = 'upbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;
$max_repeat = 5;
$pvc_view_file_via_temporary = 0;
$latex変数
$latex = 'platex -synctex=1 -interaction=nonstopmode -file-line-error %O %S';
まずは拡張子texのファイルから拡張子dviのファイルを作成するための処理系の設定を行う. 基本的に私はlatexの中ではupLaTeXを使用するので
$latex = 'platex %O %S';
と書き込む. ここで, %Oというのは実行時オプション, %Sというのは入力ファイル名を表す. つまり, 何かpLaTeXで処理を行う際に付けるオプションが%Oに, 実行するファイル名が%Sに代入される. しかし毎回付けるオプションもあるので, それは固定しておく. それが-synctex=1 -interaction=nonstopmode -file-line-errorの部分である.
- synctex: 1に設定するとSyncTeXが有効になり, 適切なpdf viewerを用いることでpdfの文章から該当するソースコードに飛べたりする.
- interaction=nonstopmode: タイプセット中にエラーが起きても、ユーザーにどう処理するかの指示を求めずコンパイルを続行する.
- file-line-error: texファイルの何行目でエラーが発生したかを表示.
$bibtex変数
$bibtex = 'pbibtex -kanji=utf8 %O %S';
bibtexを実行する際の設定. 日本語の参考文献も引用することがあるので, 処理系はpbibtexにする. また, オプションのkanji=utf8を設定しておく.
$dvipdf変数
$dvipdf = 'dvipdfmx %O -o %D %S';
拡張子.dviのファイルから拡張子.pdfのファイルを作成するためのコマンドの設定. 標準なものであるdvipdfmxに設定をすれば十分.
$pdf_mode変数
$pdf_mode = 3;
使用するコマンドによってpdfの出力形式を合わせる設定.
- 0: pdf化しない
- 1: $pdflatex変数で指定されたコマンドを使う
- 2: $ps2pdf変数で指定されたコマンドを使う
- 3: $dvipdf変数で指定されたコマンドを使って, dviファイルからpdfを作成する
- 4: $lualatexでpdfを作成する
- 5: $xelatexでpdfを作成する
先ほどの$dvipdf変数で設定したコマンドを使いたいので, ここでは3に設定する.
$max_repeat変数
$max_repeat = 5;
最大タイプセット回数を指定. 警告が出なくなるまで無限にタイプセットを繰り返される可能性を防ぐ.
$latexmkの使い方
1. 適当にtest.texというファイルを作成する. (適当に中身を書いていてもよい) 2. ターミナルを開き, test.texがあるディレクトリ上で以下を実行する.
latexmk test.tex
そのディレクトリ上でtest.dvi, test.aux, test.pdf等のファイルが作成される. また, オプションを付けて実行することで様々な機能を使用することができる. 例えば
latexmk -c test.tex
と実行すると, test.dviやtest.aux等の中間生成ファイルを削除してくれる. しかし一度のタイプセットで済むのはいいが, ターミナル上で実行するのがめんどくさい. なのでこれらの設定をVisual Studio Codeに反映させて, そちらで執筆環境を構築する方が楽である. VS codeでのlatex実行環境(未執筆)