sf@size 未定义,但 \textsuperscript 有效?

sf@size 未定义,但 \textsuperscript 有效?

梅威瑟:

\documentclass{scrbook}

\begin{document}

\makeatletter
\show\@textsuperscript
\show\sf@size
\makeatother

A\textsuperscript {B}C

A{\selectfont{${^{\mbox{\fontsize\sf@size\z@ B}}}$}}C

\end{document}

日志显示:

#1->{\m@th \ensuremath {^{\mbox {\fontsize \sf@size \z@ #1}}}}.
l.6 \show\@textsuperscript

> \sf@size=undefined.
l.7 \show\sf@size

如何\textsuperscript在不调用宏的情况下执行原始宏?尝试学习一些 TeX!


更新:感谢克鲁格的回答,一切都按预期进行。

现在,问题是为什么原始调用显示的上标字体大小比 更大\textsuperscript

更新:感谢Kruger的回答,一切完成!

这是一个令人着迷的兔子洞!

最终答案:\ensuremath设置sf@size。详细信息请参阅接受的答案。

A\textsuperscript {B}C

\makeatletter
A$\ensuremath{^{\mbox{\fontsize\sf@size\z@ {\selectfont B}}}}$C
\makeatother

答案1

\sf@size是脚本数学字体的字体大小。它取决于当前的常规文本字体大小,因此必须为每个数学块重新计算。这是通过 完成的\everymath:如果您添加\show\frozen@everymath到文档中,您会看到\frozen@everymath设置为\check@mathfonts \the \everymath。这意味着每次输入内联数学时,TeX 都会\check@mathfonts先执行。此宏设置\sf@size并执行一些其他操作。进入数学模式时也会发生这种情况\ensuremath,这就是您的示例的情况\textsuperscript

因此\show \sf@size,要进行设置,必须先在$ $之前的某处写入进入(和离开)数学模式\show\sf@size

顺便说一句,如果你想了解 LaTeX 命令是如何实现的,请查看source2e。除了不必单独处理 \show所有宏之外,您还可以看到许多描述其功能的评论。

要在不调用宏的情况下执行此操作,您需要进行两项更改:首先\makeatletter需要允许在文档中使用\sf@size(和)。然后您仍然会得到错误的字体大小。这是因为仅设置下一个字体大小,但实际上并没有更改字体。因此必须在之后调用以选择正确大小的字体。在宏中,对的调用在内部(没有)。在的文档中甚至包含一条注释,指出参数应始终以字体选择命令开头,\z@\fontsize\selectfont\fontsize\sf@size\z@\selectfont\textsuperscript@source2e\@textsuperscript

相关内容