2018年6月21日木曜日

latexmk の設定ファイルとうまく付き合う

 latexmk にオプションとして -pdf などを与えるのではなく、主となる .texファイルが存在する作業ディレクトリに latexmkrc ファイルを置いたらどうだろう? という話。

 latexmk では、LaTeX文章のpdf化の手順を選択する方法として、latexmkrc 設定ファイルに変数 $pdf_mode を設定するか、 latexmk にオプションを与える方法があり、オプションのほうが優先されます。
 このオプションが一部のエディタや拡張機能で当然のごとく設定されていると、自分の望むpdf化手順と合わないとき、トラブルの原因となります。
†VisualStudio Code + LaTeX Workshop など。

 主となる .texファイルが存在する作業ディレクトリで、
% latexmk main.tex
とだけ入力すれば .pdf まで出来上がる、というのが理想的な動作ですし、エディタから呼び出すときもトラブルが減るのではないかな? と思うわけです。

 latexmk を呼び出す側には極力オプションを与えず、latexmkrc だけで動作を切り替えることは出来ないでしょうか? 実は、latexmkrc には、以下のように読み込み順が存在します。
       1) The system RC file, if it exists.
       2) The user's RC file, if it exists.
       3) The  RC  file  in  the current working directory.  This file can be named either "latexmkrc" or ".latexmkrc", and the first of these to  be found is used, if any.
       4) Any RC file(s) specified on the command line with the -r option.

 で、latexmkrc の $pdf_mode の数値、 pdf化の手順、 latexmk に与えるオプションとの関係は、以下の通りになります。
  • $pdf_mode = 0 と書くと、pdf を作りません。 (-pdf-)
    • $latex の確認が必要です。
    • $xelatex で .xdvだけを作る方法を確かめていません。-xelatex -pdf- とオプションをつけても、$latex が使われるような…? 
  • $pdf_mode = 1 と書くと、pdflatex を使うことを表します。 (-pdf)
    • $pdflatex の確認が必要です。
  • $pdf_mode = 2 と書くと、tex→ dvi → ps→ pdf とたどります。 (-pdfps)
    • $dvips の確認が必要です。
    • $ps2pdf の確認が必要です。
    • $latex の確認が必要です。
  • $pdf_mode = 3 と書くと、tex→ dvi → pdf となります。 (-pdfdvi)
    • $dvipdf の確認が必要です。
    • $latex の確認が必要です。
  • $pdf_mode=5だと xelatex, xdvipdfmx (-pdfxe ) を使うようです。 上記ドキュメントにはありませんが、 $pdf_mode=4 で lualatex (-pdflua ) を使うようです。
  • $pdf_mode={4,5} (-pdflua, -pdfxe も?)については、古い latexmk には含まれていないようです。 例えば Debian 9.x の latexmk (Ver. 4.41 texlive2016 相当?) には存在しません。texlive2018 の latexmk (Ver. 4.55) なら含まれています。
 というわけで、
  1. ~/.latexmkrc にはツールの設定だけ書いておく。
  2. 作業用ディレクトリ/latexmkrc には $pdf_mode の数値だけ書いておく。
    • ~/.latexmkrc で予め設定しておいてもよい。
    • platex や uplatex を使い分けたいなら、さらに $latex などを書いておく。
  3. latexmk を使うときは -pdf などのオプションを付けない。
という方針は有りなんじゃないかな、と思いました。

 ドキュメントごとにコンパイル方法やツールを変える、というのは、なかなかしんどいと思いますが、様々な LaTeX 環境を体験したい場合や、psfrag など dviware が決め打ちになってしまうパッケージを使う場合は、どうしても避けて通れませんね。(避けたいですけど…)
 そんなときでも、作業用ディレクトリの下に latexmkrc を書いておくという手段は、作業手順をメモする効果もあるので有効かな、と思ったのでした。

0 件のコメント: