背景
TeX 用以下 8 种样式之一来排版数学表达式的每个部分:
- 展示,
- 展示',
- 文本,
- 文本',
- 脚本,
- 脚本',
- scriptscript,或
- 腳本腳本'。
Knuth 分别将它们称为 D、D'、T、T'、S、S'、SS 和 SS'。
TeX在下标、上标以及分数(、\above
及其变体)的分子和分母的样式之间进行转换。\atop
\over
\...withdelims
其中四种样式通过\displaystyle
、\textstyle
、\scriptstyle
和\scriptscriptstyle
广为人知。其他四种则鲜为人知(事实上,我认为在 TeXbook 之外我没有看到任何关于它们的参考资料)。它们几乎与相应的非撇号样式相同,只是上标排版位置稍靠下。
观察差异的一个简单方法是查看(纯 TeX 文档)的输出
$${\atop x^y}{\atop\textstyle x^y}$$
\bye
两者不同的原因是 TeX 以样式 D 开始数学显示。它以样式 T 排版分子,以样式 T' 排版分母。这\textstyle
导致 TeX 改为以样式 T 排版分母。
问题
如何强制 TeX 进入其中一种主要样式?如上例所示,即使 TeX 处于其中一种主要样式,它也会移动到非主要变体\textstyle
(其他三种类似)。
动机
在数学模式下构建垂直框时,这一点很重要。例如,请参阅我的回答在需要的情况下改变分数的形状。
后续问题
有没有办法检查当前样式是否拥挤?我考虑过放入X^X
一个\vcenter
并将其高度与由确定的当前样式进行比较\mathchoice
,但这行不通,因为\vcenter
没有给出一个框。
答案1
这数学工具包给出了\cramped
命令。
答案2
一个完全不同的答案:经过一番尝试,我设法制作了这个简单的 TeX 宏:
\newdimen\savedrulethickness
\def\docramped#1#2%
{\savedrulethickness = \fontdimen8\textfont3
\hbox{$\mathsurround0pt
\fontdimen8\textfont3=0pt
#1\overline{#2}$}%
\fontdimen8\textfont3 \savedrulethickness}
\def\cramped{\mathpalette\docramped}
$f^b \overline{f^b} \cramped{f^b}$
\bye
如果数学家族 3 有三种不同的字体而不是仅仅 3 个 cmex10 副本,则需要稍微扩展一下,并且存在一般的缺陷\mathchoice
,但它似乎可以起作用。
\cramped
相比之下,在 Luatex 中的定义如下:
\def\cramped#1%
{{\ifcase\mathstyle
\crampeddisplaystyle \or \or % 0 -> 1
\crampedtextstyle \or \or % 2 -> 3
\crampedscriptstyle \or \or % 4 -> 5
\crampedscriptscriptstyle \fi % 6 -> 7
#1}}
编辑:使用 \mathpalette,并添加 Luatex 版本
答案3
\mathaccent
的重音符号排版风格比较局促。因此,如果数学字体中有一个可用的字符,但实际上不打印任何内容,则可以使用它来强制使用这种风格。
(luatex 为此定义了 4 个新原语)
答案4
\radical0{...}
\radical
是一个 TeX 原语,用于定义\sqrt
为\def\sqrt{\radical"270370 }
(The TeXbook,第 157 页)。
数字表示平方根符号,零表示没有错误,也没有符号。
这留下了想要的副作用,即以带撇号的样式(拥挤)排版参数。