Mathtools 软件包拥挤的命令

Mathtools 软件包拥挤的命令

在包内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),设置参数,处理子公式,结束数学模式,撤消设置并完成装箱。

相关内容