This Project Has Not Released Any Files
luatexbase パッケージは TeX 開発者用のパッケージで、 LuaTeX の拡張機能の LaTeX/plain TeX での使用を支援する。 luatexbase パッケージが本体で、 その他に以下のサブパッケージから構成される。
本体パッケージを読み込む (\input luatexbase.sty、または \RequirePackage{luatexbase} ) と全てのサブパッケージが読み込まれるが、 サブパッケージを単体で読み込むこともできる。
(注意) 本ページ中では、LuaTeX 拡張のプリミティブは luatex の接頭辞を付した形で記述する。
TeX Live 2009 (0.40.6 版)以降(および同時期の W32TeX) の LuaTeX では以下の条件が満たされる:
このパッケージでは、これらの条件を満たさない LuaTeX (つまり、極めて古いか、「異質な」環境) での互換性確保のための支援を行う。
従って、上記の「普通の」 環境を動作要件とするようなパッケージでは、 このパッケージの機能は直接的には不要である。 (LuaTeX-ja はそれでいいんですね…?)
普通の Lua インタプリタ環境では、 モジュール読み込み(require "foo.bar") でモジュール名をパス名に変換する (package.path の設定値を用いる)際に、 「.」をパス区切り文字に変換する動作を行っていた (例えば package.path に「/usr/lib/lua/?.lua」 とある場合は「/usr/lib/lua/foo/bar.lua」)。
LuaTeX では、このファイル検索が Kpathsea を用いたものに置き換えられているが、 少し古い LuaTeX だとこのドットの変換が行われなかった。 (つまり、$LUAINPUTS 以下の foo.bar.lua を検索する。) 現在の LuaTeX ではドットの変換が行われる ($LUAINPUTS 以下の foo/bar.lua を検索する)ように変更されている。
このパッケージは、古い LuaTeX で同じ機能を提供し、 またさらに古い版のための互換性支援を行っている。 LuaTeX での Lua ファイル検索の方法が解っていれば、 それ以上気にする必要はない。
plain/LaTeX のレジスタ割当(\newcount 等)において、 LuaTeX のもつ 65536 個のレジスタを利用できるようにする。
LaTeX において 32768 個のレジスタを利用するためのパッケージが etex であるが、luatexbase-regs はまず etex を読んでから、 それへのパッチという形で 65536 個への拡張を行っている。 LaTeX のパッケージは重複読込が防止されるので、 予め etex を読んでいる場合もいない場合も正常に 65536 個への拡張が実施され、 またその後に etex が読まれることがあっても、 32768 個に戻ることはない。
plain の場合は、etex パッケージ相当の機能はフォーマットに組み込まれている (その部分のソースは etex.src)。 従って、luatexbase-regs.sty の読込時に、 etex の機能は必ず存在するし、 また後から etex が読み込まれることもない。
e-TeX では拡張部分(256 番以上) のレジスタは元のものに比して効率が劣るという性質があったが、 LuaTeX ではそうではない。 従って、luatexbase-regs が読まれた時点で、 そこからの新規の割当は全て 256 番以上から行うようにすることで、 255 番以下の残っているレジスタを insert のために確保するという処理が行われている。
なお、luatexbase-regs は etex を内部で読み込むので、 その独自機能(ローカル割当など)は全て利用できる。 ただ、それらを使う必要は全く生じないと思われる。
LuaTeX ではカテゴリコードのテーブルが複数存在して、 「現在有効なテーブル」を切り替えることにより、 全部の文字のカテゴリコードの値を一斉に切り替えることができる。 このパッケージはカテゴリコードテーブルの利用を支援する。
割り当てたカテゴリコードテーブルに実際に切り替える (アクティブにする)には \luatexcatcodetable プリミティブを用いる (つまり、\luatexcatcodetable\制御綴)。 luatexbase-cctb を使っている限り、 \luatexsavecatcodetable プリミティブを使う必要はなくなる。
いくつかのプリセットが用意されている。 これらは \newluatexcatcodetable で割り当てられたものなので、luatexbase.catcodetables 中に対応するキーをもつが、 〈 〉内に示した短い文字列の別名も与えられている。 つまり、例えば \directlua 中で 「\makeatletter で TeX に書き出したい」という場合は
local cctb_pkg = luatexbase.catcodetables["latex-package"] tex.sprint(cctb_pkg, "\\ltj@hoge")
のようにすればよい。 (「どこで使われるか解らないマクロ」は、大概の場合、 「現在のカテゴリコードの値」には依存して欲しくないはずである。)
属性(attribute)は、TeX の表層のレベルで管理されている情報を内部処理のレベルに受け渡すための仕組みである。 従って、仕組の理解には内部処理に関する知識が必要となるが、 雰囲気を掴むために、ここでは粗い概説をしておく。
普通、TeX で「\hbox{AB} 」が実行されると、 そのボックスの「内部表現」として、 「〈A〉 の『文字ノード』と〈B〉の『文字ノード』 が順に並んだリスト」 が生成される。 ここで、次のように属性の値を設定したとする。
\hbox{A\luatexattribute10=1 B}この場合、〈B〉の『文字ノード』 には「属性 10 = 1」という「情報」が付加される (〈A〉には付加されない)。 LuaTeX では、TeX の内部処理に Lua の関数 (これが「コールバック」である) を用いて割り込むことができるが、 そのような Lua の関数内で、 先ほどのボックス中のノードの属性値を読みだして、 それに応じて何か処理を行う (例えば「属性 10 が 1 なら下線を付加する」) ことが可能になる。 なお、ここでは明示的なボックスを用いたが、 普通に(段落として)書くテキストも、 実際には暗黙のボックスを作る処理が行われているので話は同じである。
このパッケージは属性の利用を支援する。
LuaTeX のコールバックの仕様では、 一つの種別のコールバックには同時に一つの関数しか登録できない。 このパッケージは複数の関数の登録を可能にし、 さらにコールバックの種類によっては擬似的に複数の関数が同時に機能するようにする (例えば、フィルタ系のコールバックでは、 登録されたフィルタ関数を順番に適用するという処理を行う)。
以下の説明は、元来のコールバック(callback ライブラリ) に関する知識を前提にする。
この他、ユーザ定義のコールバックを新設する等の機能もある。
Lua のモジュールの取扱を拡張し、 LaTeX のパッケージ(\RequirePackage) と同等の名前一致検査やバージョン検査を提供する。 Lua 5.1 で導入された「モジュール」の概念を前提にしていることに注意。
\RequireLuaModule (または luatexbase.require_module()) は次のような動作を行う。 基本的に require() の拡張であることに注意。 多重読み込みの回避などは require() が行っている。
luatexbase.provides_module() の引数には次のようなテーブルを渡す。
luatexbase.provides_module({ name = 'useful.util', -- モジュール名(必須) date = '2011/01/01', -- 日付 version = '0.1a', -- バージョン description = 'some useful utilities', -- 要約 author = 'A. U. Thor', -- 残りは無視される license = 'NYSL', })
\RequireLuaModule で読まれるモジュールについては、 luatexbase.provides_module() が必要なことを除き、 Lua の require() で読まれるモジュールと全く同じ方法で構成できる。 すなわち、module() 命令を用いてもよいし、 全く別の方法を用いてもよい。 基本的に、luatexbase.provides_module() はそのモジュールの他の部分のコードに影響を与えない。