在包内mathtools
,\cramped
定义如下。
\providecommand*\cramped[1][\@empty]{
\ifx\@empty#1\@empty
\expandafter \mathpalette \expandafter \MT_cramped_internal:Nn
\else
\expandafter \MT_cramped_internal:Nn \expandafter #1
\fi
}
\def\MT_cramped_internal:Nn #1#2{
\sbox\z@{$\m@th#1\nulldelimiterspace=\z@\radical\z@{#2}$}
\ifx#1\displaystyle
\dimen@=\fontdimen8\textfont3
\advance\dimen@ .25\fontdimen5\textfont2
\else
\dimen@=1.25\fontdimen8
\ifx#1\textstyle\textfont
\else
\ifx#1\scriptstyle
\scriptfont
\else
\scriptscriptfont
\fi
\fi
3
\fi
\advance\dimen@-\ht\z@ \ht\z@=-\dimen@
\box\z@
}
问题 1阅读附录 G 后TeXbook(规则 18),为什么包不简单地执行以下操作(在数学环境中本地)?
\fontdimen13\textfont2=\fontdimen15\textfont2
\fontdimen14\textfont2=\fontdimen15\textfont2
\fontdimen13\scriptfont2=\fontdimen15\scriptfont2
\fontdimen14\scriptfont2=\fontdimen15\scriptfont2
\fontdimen13\scriptscriptfont2=\fontdimen15\scriptscriptfont2
\fontdimen14\scriptscriptfont2=\fontdimen15\scriptscriptfont2
第二季度我在这里省略了使其成为本地的代码,因为我不确定如何做到这一点,但它肯定是可行的(?)有人知道如何在本地做到这一点吗?
答案1
摘自 TeXbook 第 277 页:
在下列所有情况下,
\global
作为前缀的存在或不存在均无影响。⟨全局赋值⟩ → ⟨字体赋值⟩
| ⟨断
字赋值⟩ | ⟨盒子大小赋值⟩
| ⟨交互模式赋值⟩
| ⟨私密赋值⟩
⟨字体赋值⟩ → ⟨\fontdimen
数字⟩⟨字体⟩⟨equals⟩⟨dimen⟩
| ⟨字体⟩⟨equals⟩⟨数字⟩ | ⟨\hyphenchar
字体⟩⟨equals⟩⟨数字⟩ ⟨断字赋值⟩ → ⟨一般文本⟩ | ⟨一般文本⟩ ⟨盒子大小赋值⟩ → ⟨盒子维度⟩⟨8 位数⟩⟨等于⟩⟨dimen⟩ ⟨交互模式赋值⟩ → | | | ⟨私密赋值⟩ → ⟨特殊整数⟩⟨等于⟩⟨数字 ⟩ | ⟨特殊维度⟩⟨等于⟩⟨dimen⟩\skewchar
\hyphenation
\patterns
\errorstopmode
\scrollmode
\nonstopmode
\batchmode
您感兴趣的案例是
⟨字体分配⟩ →
\fontdimen
⟨数字⟩⟨字体⟩⟨等于⟩⟨dimen⟩
\global
并且您会看到,这样的分配是全局的,与在前面添加的无关\fontdimen
。
您可能想进行设置并在处理后撤消它,但这是行不通的,因为\fontdimen
只有在数学模式结束并且数学列表转换为水平列表时才会检查参数。唯一的方法是添加一个装箱级别,在其中启动数学模式(不要忘记使用\mathchoice
),设置参数,处理子公式,结束数学模式,撤消设置并完成装箱。