latexmk について
.latexmkrc より latexmkrc の方が後に読まれる(優先される)。
以下、とりまメモ#
latexmk#
latexmk options#
latexmk -help でoption一覧表示。
| option | description | 
|---|---|
| -cd | サブディレクトリ以下のtexファイルをタイプセット するときに使用。 これを付けないと、texファイルで読み込む相対パスで書かれた画像やスタイルファイルを見つけられない。 例: latexmk -cd tex/member01/member01.tex | 
| -latex='platex' | platexでタイプセット (.latexmkrcで$latex = uplatexとしているとき) | 
| -e | perl commandが使える。 例: latexmk -e $latex='platex' test.tex | 
| -pvc | |
latex options#
latexmk にも渡すことができる(多分)。
| options | discription | 
|---|---|
| -synctex=1 | synctex を有効にする( *.synctex.gzを生成) | 
| -interaction=nonstopmode | エラーが出てもタイプセットを途中で止めない | 
| -halt-on-error | |
| -file-line-error | |
| -shell-escape | shell script を有効にする | 
.latexmkrc#
latexmk の設定ファイル。perlで書かれている。
path#
スタイルファイル(.sty)を探索する場所(パス)を追加
$ENV{'TEXINPUTS'} = './sty//;' . '../../sty//;';
フォントを探索する場所(パス)を追加
$ENV{'OPENTYPEFONTS'} = './fonts//;' . '../../fonts//;';
あるいは、まとめて
$ENV{'TEXMFHOME'} = './/;' . '../../sty//;' . '../../fonts//;';
以下のように書いても同じ意味;
ensure_path(TEXMFHOME, './/;' . '../../sty//;' . '../../fonts//;');
設定ファイルのパス#
好きなところにパスを通せる;
read_first_rc_file_in_list( '../../latexmkrc', '../../.latexmkrc' );
latexmk に直接設定ファイルを渡せる -r オプションがある;
latexmk -r '../../.latexmkrc' hoge.tex
ただし、その渡した .latexmkrc ファイルがそこに存在しないとエラーが出る。
perl ボツコード#
vscodeで必要かと思ったけど、冗長だった。
## カレントディレクトリのパスを取得。
use Cwd;
my $current_dir = getcwd;
## ルートディレクトリを探る
## for vscode
$merge_file = 'merge.tex';
if (-e $merge_file) {
  $root_dir = $current_dir;
} elsif (-e '../../' . $merge_file) {
  $root_dir = $current_dir . '/../..';
}
## コマンドラインから実行するならこれで十分
# $root_dir = $current_dir;
## sty や font を探索するパスを追加
$ENV{'TEXMFHOME'} = $root_dir . '//;';
# $ENV{'TEXINPUTS'} = $root_dir . '/sty//;' . $root_dir . '/tex//;';
# $ENV{'OPENTYPEFONTS'} = $root_dir . '/fonts//;';
# print 'set TEXMFHOME: ' . $ENV{'TEXMFHOME'};
typeset#
- エディタ(texshop, vscode, etc)で、サブディレクトリにあるtexファイルをlatexmkを用いてタイプセットするとき、親ディレクトリにある .latexmkrcは読み込まない。- .latexmkrcはホームディレクトリ- ~に置いておくか、texファイルと同じディレクトリに置いておかなければならない。
- latexmkのoptionで設定を与える方が楽?
 
- コマンドラインから latexmkを実行する場合は、カレントディレクトリに.latexmkrcがあればよい。
vscode#
- カレントディレクトリ直下、サブディレクトリに関わらず、タイプセット するtexファイルと同じディレクトリにある .latexmkrcしか読み込まない。- ホームディレクトリにある .latexmkrcは読み込む。
 
- ホームディレクトリにある 
- vscodeを使う場合、 .latexmkrcと同じ内容をsettings.jsonに書いてしまった方が楽。
.vscode/settings.json#
.vscode/settings.json のテンプレート
{
  "latex-workshop.latex.tools": [
    // for kaishi
    {
      "name": "latexmk(uplatex) for kaishi",
      "command": "latexmk",
      "args": [
        "-e", "$latex                = 'uplatex %O -synctex=1 -interaction=nonstopmode %S'",
        "-e", "$bibtex               = 'upbibtex %O %B'",
        "-e", "$biber                = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'",
        "-e", "$makeindex            = 'upmendex %O -o %D %S'",
        "-e", "$dvipdf               = 'dvipdfmx %O -o %D %S';",
        // "-e", "$ENV{'TEXINPUTS'}     = './sty//;' . '../sty//;' . '../../sty//;' . './tex//;' . '../../tex//;'",
        // "-e", "$ENV{'OPENTYPEFONTS'} = './fonts//;' . '../fonts//;' . '../../fonts//;'",
        "-e", "$ENV{'TEXMFHOME'}     = './/;' . '../../sty//;' . '../../fonts//;'",
        "-pdfdvi",
        "%DOC%"
      ]
    },
    // ...
  ],
  "latex-workshop.latex.recipes": [
    // For kaishi (uplatex)
    {
      "name": "kaishi",
      "tools": [
        "latexmk(uplatex) for kaishi"
      ]
    },
    // ...
  ],
  "latex-workshop.latex.recipe.default": "lastUsed",
  "latex-workshop.latex.autoBuild.run": "never",
  "latex-workshop.latex.autoClean.run": "onBuilt",
  "latex-workshop.latex.clean.fileTypes": [
    "*.aux", "*.toc", "*.log", "*.dvi", "*.out.ps",
    "*.fdb_latexmk", "*.fls", // latexmk
    "*.nav", "*.snm", "*.out" // beamer
  ],
  "latex-workshop.message.update.show": false,
  "latex-workshop.message.badbox.show": false,
  "latex-workshop.message.warning.show": false,
  "latex-workshop.view.pdf.viewer": "tab",
  "latex-workshop.intellisense.package.enabled": true,
  // syntax coloring
  "files.associations": {
    "*.sty": "latex",
    ".latexmkrc": "perl"
  },
}
  
    
      最終更新日: July 12, 2021 08:12:48