前回の続き。今回が最終回で、LuaTeXについて。
※\U~
の系列についてはXeTeXの記事を参照。
LuaTeX関連の注意事項
※一般の注意事項については初回の記事を参照。
- だめだ LuaTeXなにもわからない😭
LuaTeXのやつ
\begincsname‹トークン列›\endcsname
★:「‹トークン列›
を完全展開して得られる文字トークン列を脱トークン化した文字列を名前とする制御綴」について、その制御綴が定義済ならそのトークン、未定義なら空に展開される。\csname
と同様に、完全展開の結果に制御綴が含まれる場合はエラーになる。\csname
と異なり“\relax
化”の副作用を決して起こさない。
\csstring‹トークン›
:トークンが文字トークンの場合は、その文字。制御綴の場合はその名前。\string
と異なり制御綴名の前に\escapechar
の文字は前置されない。
\directlua
[‹整数:名前番号›
]{‹文字列›}
☆:引数の文字列をLuaコードとして実行する。\dvifeedback
:何これ?- 多分
\pdffeedback
と同じ使用法だろうが、マニュアルに未記載。
- 多分
\dvivariable
:何これ?- 多分
\pdfvariable
と同じ使用法だろうが、マニュアルに未記載。。
- 多分
\fontid‹フォント›
:そのフォントを一意に指定する番号(整数)。- 実装上は
\pdffontname
(LuaTeXでは\pdffeedback fontname
)と同等なのかもしれない。
- 実装上は
\formatname
:使用中のフォーマットについて、フォーマット作成時(ダンプ実行時)の\jobname
の値。- INIモードにおいては空になる。
\ifcondition
:展開しても何も起こらず、また「条件判断に関する内部状態」も変化させないが、「条件不成立による読み飛ばし」の際にはこのプリミティブは「if-トークンの一種である」と見なされる。- 要するに「if-均衡を回復させるための
\@gobble\if
」と同じ役割のはず。
- 要するに「if-均衡を回復させるための
\immediateassigned{‹トークン列›}
☆:引数のトークン列に書かれた「TeXの代入文」(複数可)を実行する。\immediateassignment‹代入文›
☆:直後に続く単一の「TeXの代入文」を実行する。- 実行される代入文が1つであることを除いて
\immediateassigned
と同じ。
- 実行される代入文が1つであることを除いて
\lastnamedcs
★:最後の\csname
、\ifcsname
、\begincsname
の実行で生成された制御綴のトークン。\ifcsname
、\begincsname
を用いて当該制御綴が未定義だった場合は「無効な制御綴を表す特殊なトークン」になる。- 従って厳密にいうとLuaTeXでは
\ifcsname
と\begincsname
は副作用をもつ。
\luaescapestring{‹文字列›}
:その文字列に対して「Luaの文字列リテラル」用のエスケープを適用した結果の文字列。- 外側のクオート
""
は付かない。
- 外側のクオート
\luatexbanner
:エンジンのバナー文字列。\luatexrevision
:エンジンのリビジョン番号。- なお
\luatexversion
は読取専用整数パラメタである。 - 例えばバージョン番号が「1.9.2」の場合、
\luatexrevision
は2
に展開される(ドットは付かない)。\luatexversion
は109になる。
- なお
\mathstyle
:現在の数式スタイルを表す整数。\pdffeedback‹名前›
:指定の名前の「PDFフィードバック」の値を返す。- 「PDFフィードバック」は何らかの「PDF機能に関する読取専用のパラメタ」を表し、名前によって互いに区別される。
- これらはpdfTeXにおいては「読取専用のパラメタである」または「値に展開される」ような個別のプリミティブとして提供されていた。例えば、「
\pdffeedback creationdate
」はpdfTeXの\pdfcreationdate
に相当する。 \pdffeedback
はその引数を含めて一回の展開で「値を表す文字列」に展開される。例えば、\pdffeedback pageref‹整数›
は(pdfTeXの\pdfpageref‹整数›
と同じく)一回展開すると整数値の文字列になる。- 引数の
‹名前›
の読取が独特である。
\pdfvariable‹名前›
★:指定の名前の「PDF変数」を意味とする単一トークン。- 「PDF変数」は何らかの「PDF機能に関する読書可のパラメタ」を表し、名前によって互いに区別される。
- これらはpdfTeXにおいては「読書可のパラメタ」である個別のプリミティブとして提供されていた。例えば、「
\pdfvariable compresslevel
」はpdfTeXの\pdfcompresslevel
(整数パラメタ)に相当する。 \pdfvariable
を一回展開すると「当該のパラメタ(データ型はPDF変数の種類により異なる)を意味とする単一のトークン*6」になる。例えば「\pdfvariable compresslevel
」の一回展開は整数パラメタとなる。- 引数の
‹名前›
の読取の挙動は\pdffeedback
と同じ。
\scantextokens{‹トークン列›}
☆:「引数のトークン列を(展開せずに)脱トークン化した結果の文字列」を内容とする仮想的な入力ファイルを作って、以降はこの仮想的なファイルから読み込むようにする。\scantokens
の変種で、より「マクロの展開」に近い動作になるようにしたもので、以下の点が異なる:- 末尾に
\endlinchar
の文字が付かない。 - 「入力ファイル境界検査」が抑止される。
- 末尾に
*1:Luaチャンク名は、Luaインタプリタからの情報表示の際に用いられる。
*2:つまり厳密にいうと「Luaから吐かれたもの」は展開結果ではない。展開結果は空であることになるので☆印を付けた。
*3:厳密にいうと:普通にトークン列を実行していった際に、展開不能であるトークンは「代入文を開始するもの」でなければならない。
*4:従って通常の(非INIの)使用においては、Luaバイトコードレジスタは「フォーマット作成時(INIモード)に登録された関数」を読み出すのに専ら利用され、それ以外の用途ではLua関数テーブルが利用される。
*5:後者の場合、警告を出した上で、\pdffeedbackを無かったことにして引数として読んだトークン列をバッファに返す。
*6:ここでいう「パラメタを意味とするトークン」というのは\dayや\parindentの類(TeXbookでは“parameter”と呼ばれている)のことであり「パラメタトークン」(TeXbookでは“parameter token”)のことではない。