\Ustack{<サブ数式>}
: [一般] 汎化分数を含むサブ数式のグループの前に\Ustack
を前置すると、そのサブ数式内での\mathstyle
が“正しくなる”。
前回の「きょうの LuaTeX」では、\mathstyle
という「現在の数式スタイルを判定する」ためのプリミティブを紹介した。既にそこで述べたように、\over
や \abovewithdelims
などの「汎化分数」のサブ数式の中では、“TeX の実装上の制限”のため、\mathstyle
が正しい値を返せない。この制限を緩和する目的で用意された拡張プリミティブが \Ustack
である。汎化分数をなすグループ({...}
で囲われた部分)の直前にこれを配置すると、グループの中で \mathstyle
が正しい数式スタイルの情報を返すようになる。
% plain LuaTeX 文書 \input showms.def \def\X{X\showMS} $\X = {\X \over \X}$ %==>"T T T'"(誤) $\X = \Ustack{\X \over \X}$ %==>"T S S'"(正) \bye
(showms.def は前回の記事で掲載したものと同じ)
ちなみに、\Ustack
の直後にあるサブ数式がは汎化分数でなかった場合の挙動については(マニュアルでは)何も規定されていない。現状の実装ではエラーや警告は出ず、かつ \mathstyle
は汎化分数であることを仮定しているので誤った情報を返すようである。((そもそも \Ustack
の直後にあるものがグループ({...}
)でない場合、それが何であるかによって、エラーが発生の有無は異なるようである。))
% plain LuaTeX 文書 \input showms.def \def\X{X\showMS} $\X = \Ustack{\X}$ %==>"T S"(誤) \bye
前回と今回の話をまとめると、以下のようになる。
- 従来の TeX エンジンでは「現在の数式スタイルがどれか」を得るには(非常に不便な)
\mathchoice
を使うしかなかった。 - LuaTeX では「現在の数式スタイルがどれか」の情報をその場で返す
\mathstyle
というプリミティブが新設された。 - しかしそれを使いたいのであれば、数式の書き方に関して、「汎化分数の前に必ず
\Ustack
を付ける」という規約を設定する必要がある。
LaTeX で分数や汎化分数を書く場合には \frac
命令や(amsmath パッケージの)\genfrac
命令が用いられる。当然ながらこれらの命令の定義には「\Ustack
無しのプリミティブの汎化分数」が使われている。従って、残念ながら現状の LuaLaTeX では \mathstyle
を利用した機能実装はまだ使えないのである。