后续问题

后续问题

背景
TeX 用以下 8 种样式之一来排版数学表达式的每个部分:

  1. 展示,
  2. 展示',
  3. 文本,
  4. 文本',
  5. 脚本,
  6. 脚本',
  7. scriptscript,或
  8. 腳本腳本'。

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 页)。

数字表示平方根符号,零表示没有错误,也没有符号。
这留下了想要的副作用,即以带撇号的样式(拥挤)排版参数。

相关内容