我怎样才能让我的普通分隔符来自相同的字体但大 1 pt?

我怎样才能让我的普通分隔符来自相同的字体但大 1 pt?

这个问题很普遍,但出现的原因是我使用的是 Times 字体;在 CM 中,我不会进行这些更改。在 CM 中,分隔符的高度大于大写字母的高度,而在 Times 中,分隔符的高度相同。

我希望普通分隔符(例如()[]|\|\{\}\langle\rangle)来自它们原来的相同字体,仅比正常字体大 1pt。当它是一个宏时,这并不太难,因为我可以重新定义它。|我认为这只剩下 了。

我的限制如下(这正在一本已经写好的 720 页的书中使用,因此有些问题已经修复):它应该是(e)plain tex。我不想让任何这些字符处于活动状态,因为它们可能会导致某些宏出现问题(我有很多这样的宏)。我不介意使用新系列,但不想使用 2 个新系列。我确实有一个临时系列,用于通过宏定义的符号;该系列可以随时更改为 中的任何字体\hbox。我不想用宏替换所有出现的分隔符。此外,我不想更改来自扩展字体(如\big()的分隔符。毫无疑问我可以创建新字体,但我不知道如何做到这一点,也不知道如何安装它们;此外,这会使其他人(例如我的合著者)更难访问TeX书籍文件。

请注意()[]来自 rm 字体,而其他来自 sy 字体。

为了处理前者,我可以使用以下命令,先建立一个新系列,该系列只是现有的 rm 系列,但大 1pt(这似乎很浪费,但有效):

\multiply\buildfam by "100 

\count255=\mathcode`(
\advance\count255 by \buildfam
\mathcode`(=\count255
\count255=\mathcode`)
\advance\count255 by \buildfam
\mathcode`)=\count255
\count255=\mathcode`[
\advance\count255 by \buildfam
\mathcode`[=\count255
\count255=\mathcode`]
\advance\count255 by \buildfam
\mathcode`]=\count255

我可以对其他符号做类似的事情,但这需要一个新的符号系列。

即使如此,这也只在数学模式下有效;这是一个可以接受的限制,但并不完美。

下面显示了罗马字体的样子(前两个没有变化,第三个有变化):

在此处输入图片描述

为了进行比较,CM 看起来没有变化的样子如下:

在此处输入图片描述

作为替代方案,我很乐意提高这些分隔符的轴(事实上,使用更大的字体确实会提高轴),但更改\fontdimen22仅考虑 ex 字体(在数学模式下),并且还会更改其他符号的轴。(CM 的分隔符比 Times 的分隔符具有更大的深度,以弥补其更大的高度,以保持轴不变。)

我也想对分隔符做同样的事情/,但那是第三种字体,mi。

我发现我可以使用\mathcode="8000仅在数学模式下激活字符。这似乎可以避免宏的任何问题,至少到目前为止是这样。此外,我不需要创建任何新的字体系列,即使是从头开始。例如,我可以执行以下操作:

\def\hboxmathit#1#2{\hbox{$#1#2$}}
{\catcode`|=\active
\gdef|{{\mathpalette\hboxmathit{\biggersize\vert}}}}
\mathcode`|="8000

这里,我已经定义了字体环境,例如\tenpoint\ninepoint\elevenpoint(有时我想更改整体字体大小),并且有一个宏\biggersize,它只是将字体环境增加 1。在本例中,我将整个内容放在一个额外的分组层中,因为它可以作为 的参数出现\mathopen。它甚至在 之后也能工作\big,尽管我不知道为什么。

但是,我不知道如何用 做类似的事情,\langle以便它在 之后工作\big。字符的扩展似乎\mathcode"8000与宏的扩展发生的时间不同。例如,\big|使用更简单的定义

\gdef|{{\hbox{$\biggersize\vert$}}}}

展开如下:

\big #1->{\hbox {$\left #1\vbox to8.5pt{}\right .\n@space $}}
#1<-|

\n@space ->\nulldelimiterspace \z@ \m@th 

\m@th ->\mathsurround \z@ 

|->{\hbox {$\biggersize \vert $}}

...

\vert ->\delimiter "26A30C 

另一方面,如果我尝试$\big{{\hbox{$\biggersize\vert$}}} X|$,那么它会扩展为missing delimiter

\big #1->{\hbox {$\left #1\vbox to8.5pt{}\right .\n@space $}}
#1<-{\hbox {$\biggersize \vert $}}

! Missing delimiter (. inserted).
<to be read again> 
                   {
<argument> {
            \hbox {$\biggersize \vert $}}
\big #1->{\hbox {$\left #1
                          \vbox to8.5pt{}\right .\n@space $}}
l.183 $\big{{\hbox{$\biggersize\vert$}}}
                                         X|$
? r

答案1

这个答案分为3个部分。

第1部分

就我最初的目的而言,这整个努力是没有必要的,因为事实上,我使用的 Times 字体确实有稍大的分隔符;它们只是在与我所知道的不同的位置。因此,只需重新定义它们就足够了。

第2部分

尽管如此,这里是如何实现剩余的分隔符的,我在问题中没有看到如何做到这一点。

它的工作原理是设置一个新字符,例如^^B,与\langle和并行|,然后将定义\langle^^B。因此:

\def\hboxmath#1#2{\hbox{$#1#2$}}
{\catcode`|=\active
\gdef|{{\mathpalette\hboxmath{\biggersize\vert}}}}
\mathcode`|="8000

\let\oldlangle=\langle

{\catcode`^^B=\active
\gdef^^B{{\mathopen{\mathpalette\hboxmath{\biggersize\oldlangle}}}}}
\catcode`^^B=12
\delcode`^^B="26830A
\mathcode`^^B="8000

\def\langle{^^B}

\let\oldrangle=\rangle

{\catcode`^^C=\active
\gdef^^C{{\mathclose{\mathpalette\hboxmath{\biggersize\oldrangle}}}}}
\catcode`^^C=12
\delcode`^^C="26830B
\mathcode`^^C="8000

\def\rangle{^^C}

相同的方法适用于\{\}

所有这些变化都会影响部首(例如\sqrt),因为它们会给内部原子增加高度和深度。TeX 并不总是能很好地设置部首,尤其是在 displaystyle 中,高度可能会增加太多。(出现此问题的原因是扩展字体只能以离散增量扩展。)以下修复并不完美,但可以针对上述变化进行调整。(请参阅 TeXbook 附录 G 中的规则 11,其中仅在样式 D 和 D' 中,(1/4)\fontdimen5\textfont2高度会增加,而不是(1/4)\fontdimen8\textfont3原本会增加的高度。)它似乎效果不错。

\def\smftd{\dimen0=\fontdimen5\textfont2 \advance\dimen0 by
-2\fontdimen8\textfont3 \fontdimen5\textfont2=\dimen0 }
\def\rsftd{\dimen0=\fontdimen5\textfont2 \advance\dimen0 by
2\fontdimen8\textfont3 \fontdimen5\textfont2=\dimen0 }

\let\oldsqrt=\sqrt
\def\sqrt#1{\mathchoice
   {\setbox0=\hbox{$\displaystyle #1$}\smftd
   \hbox{$\displaystyle \oldsqrt{\box0}$}\rsftd }
   {\oldsqrt{#1}}
   {\oldsqrt{#1}}
   {\oldsqrt{#1}}
   }

第 3 部分

无论采用哪种解决方案,甚至在 CM 中,正如我所写,TeX 并不总是能很好地设置部首。这似乎是不可避免的,因为扩展字体是离散的。然而,在高度和深度之间进行权衡可以改善外观。

通过使用下列方法可以更快地进行这种微调,即使在 CM 中也很有用:

\def\updown#1#2#3{\vrule width0pt height #1 pt depth #2 pt \smash{#3}}

例如,\sqrt{\updown{7.5}{3.5}{1 - \Phi_E^2}}

相关内容