マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

きょうの LuaTeX(2) ― \crampeddisplaystyle 等

  • \crampeddisplaystyle [一般命令]: 数式スタイルを「“cramped”な別行立てスタイル」に変更する。
  • \crampedtextstyle\crampedscriptstyle\crampedscriptscriptstyle [一般命令]: 前項と同様。“cramped”なテキスト/添字/二重添字スタイルに変更する。

“cramped”な数式スタイル

TeX の“数式スタイル”というと別行立て素アイル(display style)・テキストスタイル(text style)・添字スタイル(script style)・二重添字スタイル(scriptscript style)の 4 つがあり、またそれぞれのスタイルに明示的に切り替えるための \displaystyle\textstyle\scriptstyle\scriptscriptstyle というプリミティブが存在する、ということは TeX 言語学習者であれば当然知っていることであろう。ちょうど、昨年の某アドベントカレンダーでは、数式スタイルに深く関連する \mathchoice プリミティブに関する絶望的な解説があったのは記憶に新しい。

ところが実は、TeX の数式スタイルの種類は、厳密にいうと 4 つではなく 8 つ存在する。すなわち、4 つの数式スタイルの各々について、普通のものと“cramped(窮屈)”なものの 2 つの亜種が存在するのである。このうち“cramped”の方は、当該の数式の真上に横罫線があって上側に添字を拡げる余裕がない(つまり“窮屈”である)場合に適用され、この時は上添字の高さが“普通の”スタイルと比較してより低くなる。

実際の例を見てみよう。

% plain TeX
$$ A^2 \overline{A^2}$$\bye


2 つの「A^2」はともに別行立てスタイルに属するが、\overline が付いている後者には cramped なスタイルが適用される。上添字 2 の高さが両者で異なっていることが確認できるだろう。別行立てスタイル以外の数式スタイルについても、同様の理屈で、普通と cramped のスタイルが使い分けられる。

% plain TeX
\def\xAA{A^2 \overline{A^2}}
Here: $ (\xAA)^{(\xAA)^{\xAA}}$.\bye


TeX ブック」では“8 つ”の数式スタイルを次のような記号で呼んでいる。

普通cramped
別行立て(display style)DD′
テキスト(text style)TT′
添字(script style)SS′
二重添字(scriptscript style)SSSS′

スタイルを変更する命令

先に述べたように、TeX には数式スタイルを切り替えるための \displaystyle 等のプリミティブがある。スタイルに“普通”と“cramped”の亜種がある、ということが判ると当然、「“cramped”の扱いはどうなるのか」という疑問が湧いてくるだろう。答えは、切り替えプリミティブを実行した場合は、(例えそれまでが cramped であっても)常に“普通”のスタイルに切り替わる。

% plain TeX
$$ A^2 \overline{A^2}
   \overline{\displaystyle A^2}
$$\bye


すると当然「じゃあ cramped の方に明示的に切り替えたい場合はどうするのか」という疑問が続くであろう。この「cramped な数式スタイルに切り替える」ための手段が、冒頭に紹介した LuaTeX の拡張プリミティブである。つまり、例えば \crampedtextstyle を実行すると、以前が“8 つ”のスタイルのどれであったとしても、「cramped なテキストスタイル(T′)」に変更される。

% plain LuaTeX
$$ {\textstyle A^2},           % T
   {\crampedtextstyle A^2},    % T'
   {\scriptstyle A^2},         % S
   {\crampedscriptstyle A^2}.  % S'
$$\bye


LuaTeX でないやつで cramped にしたい

これまでの話から判るように、LuaTeX 以外のエンジンでは「cramped な数式スタイルに切り替える」ための直接的なプリミティブは存在しない。しかし、その処理を模倣することは可能なようである。実際、LaTeXmathtools パッケージでは、cramed に切り替えるための \cramped 命令が提供されている。

% LaTeX
\documentclass[a4paper]{article}
\usepackage{mathtools}
\begin{document}
\[ {\textstyle A^2},
   {\textstyle \cramped{A^2}},
   {\scriptstyle A^2},
   {\scriptstyle \cramped{A^2}}.
\]
\end{document}