🤖

latexmkrcの備忘録

2024/11/08に公開

問題

latexmkrcの雑多な記録を参考にlatexmkのファイルを作成したが、なぜか以下のコマンドを入力してもdviとpdfが生成されない。また、2回目のコンパイルの際に、ファイルが見つからないエラーが発生する

cmd
latexmk -pdfdvi -pvc test.tex

作成した.latexmkrc

.latexmkrc
#!/usr/bin/env perl

# カレントディレクトリ変更
$do_cd = 1;

# uplatexの呼び出し(後で変わる)
$pdf_mode = 3;
$latex = 'uplatex -synctex=1 -file-line-error -halt-on-error %O %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$max_repeat = 5;

# bibtex系
$bibtex_use=2;
$bibtex = 'upbibtex %O %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';

# index
$makeindex = 'upmendex %O -o %D %S -s jpbase';

# ヴューワ
$dvi_previewer = "open %S";
$pdf_previewer = "open %S";

# 出力フォルダ指定
$out_dir = ".";
# 中間ファイルを別フォルダに隠しておける
$emulate_aux = 1;
$aux_dir = ".tex_intermediates";

# 中間ファイル登録
$clean_ext="$clean_ext run.xml";

解決

以下のように最小限の設定で書き直した。

.latexmkrc
$pvc_view_file_via_temporary = 0;  # PDFを直接開く
$pdf_mode = 3; # dvipdfmx を使用して PDF を生成
$latex = 'platex -output-directory=build %O %S';
$dvipdf = 'dvipdfmx -o %D %S';
$out_dir = '';
$aux_dir = 'build';
$preview_continuous_mode = 1;

$pvc_view_file_via_temporary = 0;は、pdfのプレビューに一時ファイルを使用せず、生成されたpdfファイルを直接開く(-pvcをつけたとき?)。0に設定すると、一時ファイルを開かない。
$pdf_mode = 3;は、LaTeXからDVI形式にコンパイルし、その後dvipdfmxでpdfに変換する方法を指定する。
$latex = 'platex -output-directory=build %O %S';は、platexを使ってLaTeXソースをコンパイルし、buildフォルダに出力する設定。これによって、生成された中間ファイルがカレントディレクトリを圧迫しない。しかし、dviは現在のディレクトリに出力される。
$dvipdf = 'dvipdfmx -o %D %S';は、dvipdfmxを用いて、dviファイルをpdf形式で出力する。
$out_dir = '';は、出力ディレクトリ、今回はカレントディレクトリにdviとpdfが生成される。
$aux_dir = 'build';は、中間ファイルを格納するディレクトリ。buildに指定している。
preview_continuous_mode = 1;は、生成したpdfファイルを自動で開く。0にすると、開かない設定になる。しかし規定アプリで開くため、どうにかしてvscodeのエディタ内で完結させたい。
他、詳しいコマンドやプレースホルダは、latexmkrcの雑多な記録に詳しく解説されています。
https://www2.yukawa.kyoto-u.ac.jp/~koudai.sugimoto/dokuwiki/doku.php?id=latex:latexmkの設定
この.latexmkrcで、以下のコマンドを打ったところ無事pdfが生成された。

入力

cmd
latexmk -pdfdvi *********.tex

出力

cmd
18837 bytes written
Latexmk: All targets (*********.pdf) are up-to-date
Latexmk: I have not found a previewer that is already running.
   So I will start it for '*********.pdf'
------------
------------
Running 'start start  "*********.pdf"'
------------

=== Watching for updated files. Use ctrl/C to stop ...

課題点

  1. 出力後、コマンドが自動的に終了しない
  2. pdfをエディター内でタブ形式で開けるようにしたい
  3. プロンプトでコマンドを打たずに、キーコマンドで楽に出力できるようにしたい

考察および感想

正直、なぜいけたのかあまりわからない。
変えたところといえば、latexの出力を、uplatexから、platexに変更し、indexbibtex系を削除しただけなのだが、bibtexは、参考文献のデータベースで、indexは、索引を作成するときのコマンドで\usepackage{makeidx}を使用するに用いるらしいのだが、2つとも今回のtexでは使用していない。では、$latexや、$dvipdfが悪かったのかどいえば、公式仕様通りに作られたはずなので動作する気がする...
おま環といわれれば納得できるんだけど、2つのPCで起きているんだよな・・・TexLiveの影響なのかな。
これから、このフォーマットをもとに.latexmkrcの改良を進めたいと思っている。ss

Discussion