我有一份包含如下内容的文档:
\starttext
\math{
\overset{
\text{Text A}
}{
\text{Text B}
}
}
\stoptext
“文本 A”打印出来比“文本 B”小。我希望其他文本也以与“文本 A”相同的大小显示。如何设置其他文本以匹配相同的大小?我尝试将其设置为“小”和“微小”。将其他文本设置为“小”会产生比“文本 A”高几个像素的文本。将其设置为“微小”不会导致字体大小发生任何变化。
答案1
让我们分析一下这里发生了什么。首先,我们想了解更多关于 的信息\overset
,它的定义在math-ali.mkiv
\unexpanded\def\overset#1#2%
{\math_binrel_apply{#2}{\mathop{\kern\zeropoint#2}\limits\normalsuperscript{#1}}}
啊哈!显然,第一个参数放在里面\mathop
,第二个参数放在上标里面。上标和下标总是排版在里面\scriptstyle
(除非\scriptstyle
之前处于活动状态,然后它变成\scriptscriptstyle
)。因此,我们得出结论,我们可以通过使用
\math{\scriptstyle\text{Foo}}
但我们可以更进一步。我们还可以找出命令中实际使用的字体大小。\text
因此,我们查找了\text
math-ini.mkiv
:
\appendtoks \let\text\mathtext \to \everymathematics
\unexpanded\def\mathtext{\mathortext{\math_text_choice_font\relax}\hbox}
\def\math_text_choice_font#1#2#%
{\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
\hbox#2\bgroup
\bgroup
\aftergroup\hss
\aftergroup\egroup
\hss
\font_basics_switchtobodyfont\m_math_text_choice_face
#1%
\let\next}
大奖!这就是我们要找的。这里感兴趣的是
\font_basics_switchtobodyfont\m_math_text_choice_face
从宏名可以看出,此命令将字体大小切换为当前的大小\m_math_text_choice_face
。前面几行中,此大小是使用
\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}
这意味着我们可以自己查询脚本字体的大小并使用它
\starttext
\normalizebodyfontsize\scriptsize{\mathstyleface\scriptstyle}
Text A \switchtobodyfont[\scriptsize] Text B
\stoptext
或者,如果我们不想使用附加\scriptsize
宏
\starttext
Text A \switchtobodyfont[\thenormalizedbodyfontsize{\mathstyleface\scriptstyle}] Text B
\stoptext