siar

Snowy Institute

latexmk で directlua が使えない問題

latexmk によるタイプセットで directlua が未定義となってしまう問題の解決方法です. この記事は,rogy Advent Calendar 2019 8日目の記事となります.

LuaTex とは

LuaTex とは,文書内でプログラミング言語 Lua を使うことのできる TeX です. TeX Wiki によれば,

LuaTeX は パワフル・高速・軽量で組み込み可能なスクリプト言語 Lua が使える TeX です.pdfTeX の後継として期待されています。

と説明されています. また日本語文書のために,luatexja というパッケージが用意されています.

環境変更で生じる謎のエラー

表題の通り,Luaを直接叩くためのコマンド directlua が未定義だというものでした. Windows 10でのエラーですがUbuntu 18.04 では動いていたものだったため,OSによるものかと疑いました. しかしこの問題がOSによるものなのか,バージョンによるものかは現在も不明です

環境

  • Windows 10 最新版 (2019/12/08)
  • TeX Live 2019
    • TeX Wiki の手順に従って iso によるインストール

エラーの詳細

  • エラーが起きた箇所
\usepackage{luatexja}
  • エラーメッセージ(切り抜き)
c:/texlive/2019/texmf-dist/tex/luatex/luatexja/luatexja.sty:46: Undefined control sequence.
l.46 \directlua
               {require('ltj-unicode-ccfix.lua')}% catcode of ideographs
No pages of output.
  • latexmkrc
$latex          = 'platex -synctex=1 -halt-on-error %O %S';
$latex_silent   = 'platex -synctex=1 -halt-on-error -interaction=batchmode %O %S';
$pdflatex       = 'lualatex --synctex=1 --halt-on-error --interaction=batchmode %O %S';

解決方法

latexmkrc のタイプセットを次のように指定します.

$latex          = 'lualatex -synctex=1 -halt-on-error %O %S';
$latex_silent   = 'lualatex -synctex=1 -halt-on-error -interaction=batchmode %O %S';
$pdflatex       = 'lualatex --synctex=1 --halt-on-error --interaction=batchmode %O %S';

(u)platex が LuaTeX のコマンドを読んでくれないことがあるらしいです. (よく考えれば当然なのかもしれません)

原因について何か情報があれば教えていただけると幸いです.