我正在尝试定义一组用于上标和下标的命令,但无法使用字符^
和_
。我能够使用来定义正确的字体大小\check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont
,但无法计算出文本框升高和降低的默认值。
TeX/LaTeX 如何定义这些值?
答案1
放置下标和上标的算法在 TeX 引擎中是“硬连线”的,并不像您想象的那么简单。首先,对于“简单字符”的下标和上标,如a
、\alpha
或,有一种特殊处理\mathcal{A}
。在这种情况下,您还需要一些水平的由字符的斜体校正决定的下标位移:例如,对于 ,下标应该向左移动 F
,但对于 ,则不应移动 A
。
对于“简单字符”,升高和降低的默认值如下。上标(depth of superscript) + (1/4 of the x-height)
(暂时!)由和 的最大值增加,其中 x 高度是参数编号 5,是参数编号 k(除非整个公式本身位于下标或上标中)。现在它取决于当前样式(不幸的是,TeX 用户只能通过或 访问):在 k=13 中使用,在“狭窄样式”中使用 k=15,否则使用 k=14。σk
\fontdimen
σk
\fontdimen
\textfont2
\mathpalette
\mathchoice
\displaystyle
多少下标降低取决于上标的存在。如果有上标,则下标(暂时!)降低 ,否则降低最大值和 。在下标和上标组合的情况下,需要进行额外的调整(会产生一些不良副作用),例如σ17
(height of subscript) - (80% of the x-height)
σ16
我的这个答案。
如果下标或上标是不是附加到“简单字符”但附加到其他核心时,将使用额外的最小移位值:上标至少提高,下标至少降低,其中和 将从中取值,除非整个公式本身位于下标或上标中(在这种情况下应使用)。(height of nucleus) - σ18
(depth of nucleus) + σ19
σ18
σ19
\scriptfont2
\scriptscriptfont2
我不确定您是否真的想实现这一点...如果想,请查看 TeXbook 附录 G 中的规则 18 了解详情。
答案2
答案3
TeX 并不关心使用哪些特定字符来输入上标或下标;它只查看 catcode。因此,如果您出于某种原因无法使用^
,_
请为它们的 catcode 分配另一个字符...
\begingroup
\catcode`\.=7 % superscript
\gdef\superscript#1#2{{#1}.{#2}}
\catcode`\.=8 % subscript
\gdef\subscript#1#2{{#1}.{#2}}
\endgroup
$\superscript{x}{2}$ $\subscript{x}{2}$
\bye
也许不幸的是,没有原始控制序列可以复制 catcode 3、4、7 和 8(&
、、和在纯 TeX 中)的字符的效果,但那是 1982 年的做法,现在我们只能用它了。$
^
_