Latexmk

Latexmk は文書を作成するのに必要な回数タイプセットしてくれるツールです.BibTeX や Makeindex などの実行も自動で行われます.



インストール

TeX Live, W32TeX には Latexmk が最初から含まれています.ただし,W32TeX の場合は別途 Perl インタプリタが必要です(Perl の項目参照).

使い方

sample.tex をコンパイルする例です.詳しくは latexmk --help や texdoc latexmk をご覧ください.

「dvi 経由で pdf を生成,platex,dvipdfmx,pbibtex,mendex を使うことを明示する.」では %O や %S などを latexmk に補完させています.dvipdfmx は補完に失敗するため,指定しています.

設定

実際にコンパイル時に何を用いるか(platex か latex か,pbibtex か bibtex か等々)は,.latexmkrc と言うファイルに記述します.*1.latexmkrc はホームディレクトリに作成します.ただし Windows の場合ホームディレクトリとは

  1. 環境変数 HOME が定義されていればそのフォルダ
  2. そうでなければ環境変数 USERPROFILE で指定されたフォルダ

となります.多くの場合は HOME は定義されていないでしょうから,USERPROFILE の指定するフォルダになるでしょう.デフォルトでは USERPROFILE は C:\Users\USERNAME となります.(Wndows が C ドライブにインストールされていて,ユーザ名が USERNAME の場合.)

日本語用の簡単な .latexmkrc です.

$latex = 'platex -synctex=1 %O %S';
$bibtex = 'pbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 10;
$pdf_previewer = '"C:\Program Files\SumatraPDF\SumatraPDF.exe" -reuse-instance %O %S';

%S はソースファイル,%O はオプション,%D は出力ファイル,%B は拡張子無しのソースファイルに置き換えられます.なお,これらを省略しても latexmk は適当に補完をしてくれます.このファイルを .latexmkrc としてホームディレクトリに保存してください.

なお,Windows のエクスプローラーでは ".latexmkrc" というファイル名への変更を行おうとするとエラーになります.".latexmkrc."と最後にピリオドをつけてください.(改名後最後のピリオドはなくなります.)または,メモ帳を起動し上記を貼り付けた後「名前をつけて保存」ダイアログを開き,「ファイルの種類」を「全てのファイル (*.*)」に変更してから保存してください.

.latexmkrc のサンプル

LaTeX コマンドのオプションに -interaction=nonstopmode を使用する場合

TeXstudio, Texmaker, TeXlipse, Emacs の TeX mode, AUCTeX (TeX-interactive-mode が OFF の場合), vimtex, quickrun などの -interaction=nonstopmode を使用するエディタ・パッケージの場合


~/.latexmkrc


#!/usr/bin/env perl
if ($^O eq 'MSWin32') {
  $latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
  $pdflatex = 'pdflatex %O -synctex=1 -interaction=nonstopmode %S';
  $lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode %S';
  $xelatex = 'xelatex %O -synctex=1 -interaction=nonstopmode %S';
  $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
  $bibtex = 'upbibtex %O %B';
  $makeindex = 'upmendex %O -o %D %S';
  $dvipdf = 'dvipdfmx %O -o %D %S';
  $dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
  $ps2pdf = 'ps2pdf.exe %O %S %D';
  $pdf_mode = 3;
  if (-f 'C:/Program Files/SumatraPDF/SumatraPDF.exe') {
    $pdf_previewer = '"C:/Program Files/SumatraPDF/SumatraPDF.exe" -reuse-instance';
  } elsif (-f 'C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe') {
    $pdf_previewer = '"C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe" -reuse-instance';
  } else {
    $pdf_previewer = 'texworks';
  }
} else {
  $latex = 'uplatex %O -synctex=1 -interaction=nonstopmode %S';
  $pdflatex = 'pdflatex %O -synctex=1 -interaction=nonstopmode %S';
  $lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode %S';
  $xelatex = 'xelatex %O -synctex=1 -interaction=nonstopmode %S';
  $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
  $bibtex = 'upbibtex %O %B';
  $makeindex = 'upmendex %O -o %D %S';
  $dvipdf = 'dvipdfmx %O -o %D %S';
  $dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
  $ps2pdf = 'ps2pdf %O %S %D';
  $pdf_mode = 3;
  if ($^O eq 'darwin') {
    $pvc_view_file_via_temporary = 0;
    $pdf_previewer = 'open -ga /Applications/Skim.app';
  } else {
    $pdf_previewer = 'xdg-open';
  }
}

Latexmk-upLaTeX の場合

latexmk -gg -pdfdvi foo.tex

Latexmk-upLaTeX-pdfps の場合

latexmk -gg -pdfps foo.tex

Latexmk-pdfLaTeX の場合

latexmk -gg -pdf foo.tex

Latexmk-LuaLaTeX の場合

latexmk -gg -pdflua foo.tex

Latexmk-XeLaTeX の場合

latexmk -gg -pdfxe foo.tex

LaTeX コマンドのオプションに -interaction=nonstopmode を使用しない場合

TeXworks, TeXShop, AUCTeX (TeX-interactive-mode が ON の場合), YaTeX などの -interaction=nonstopmode を使用しないエディタ・パッケージの場合


~/.latexmkrc


#!/usr/bin/env perl
if ($^O eq 'MSWin32') {
  $latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 %S';
  $pdflatex = 'pdflatex %O -synctex=1 %S';
  $lualatex = 'lualatex %O -synctex=1 %S';
  $xelatex = 'xelatex %O -synctex=1 %S';
  $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
  $bibtex = 'upbibtex %O %B';
  $makeindex = 'upmendex %O -o %D %S';
  $dvipdf = 'dvipdfmx %O -o %D %S';
  $dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
  $ps2pdf = 'ps2pdf.exe %O %S %D';
  $pdf_mode = 3;
  if (-f 'C:/Program Files/SumatraPDF/SumatraPDF.exe') {
    $pdf_previewer = '"C:/Program Files/SumatraPDF/SumatraPDF.exe" -reuse-instance';
  } elsif (-f 'C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe') {
    $pdf_previewer = '"C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe" -reuse-instance';
  } else {
    $pdf_previewer = 'texworks';
  }
} else {
  $latex = 'uplatex %O -synctex=1 %S';
  $pdflatex = 'pdflatex %O -synctex=1 %S';
  $lualatex = 'lualatex %O -synctex=1 %S';
  $xelatex = 'xelatex %O -synctex=1 %S';
  $biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
  $bibtex = 'upbibtex %O %B';
  $makeindex = 'upmendex %O -o %D %S';
  $dvipdf = 'dvipdfmx %O -o %D %S';
  $dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
  $ps2pdf = 'ps2pdf %O %S %D';
  $pdf_mode = 3;
  if ($^O eq 'darwin') {
    $pvc_view_file_via_temporary = 0;
    $pdf_previewer = 'open -ga /Applications/Skim.app';
  } else {
    $pdf_previewer = 'xdg-open';
  }
}

Latexmk-upLaTeX の場合

latexmk -gg -pdfdvi foo.tex

Latexmk-upLaTeX-pdfps の場合

latexmk -gg -pdfps foo.tex

Latexmk-pdfLaTeX の場合

latexmk -gg -pdf foo.tex

Latexmk-LuaLaTeX の場合

latexmk -gg -pdflua foo.tex

Latexmk-XeLaTeX の場合

latexmk -gg -pdfxe foo.tex

リンク


*1 .latexmkrc に記述せずに実行時オプションで指定することもできます(使い方を参照).

Last-modified: 2018-06-26 (火) 15:24:17 (167d)