在 \text 中使用 \ensuremath

在 \text 中使用 \ensuremath

使用\ensuremathinside\text效果很好,并且效果很好。但是,我意识到上标的间距发生了变化。我尝试使用\mathchoice,但它不知道它是上标。

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\newcommand*\somepackagecommand[1]{\text{#1}}
\newcommand*\mytextmathstatement{calculate \ensuremath{1-1}}
\sffamily
\noindent
\mytextmathstatement\\
$\somepackagecommand{\mytextmathstatement}$\\% ok - identical
\somepackagecommand{\mytextmathstatement}% ok - identical

\noindent
$2^{\text{calculate }1-1}$\\
$2^{\somepackagecommand{\mytextmathstatement}}$\\% spacing differs
\end{document}

这是一件很奇怪的事情。我得到了上标字体大小,但(缩小的)正常间距。\scriptstyle手动设置会使字体缩小太多。

你知道怎样从内部“完美逃脱”\text\math

答案1

这不是什么秘密,也\ensuremath与此无关。当然,你从

$a^{\text{calculate \ensuremath{1-1}}}$

$a^{\text{calculate $1-1$}}$

这为何不同于$a^{\text{calculate }1-1$

根据一般 TeX 规则,如果二元运算或关系符号出现在上标或下标中,则不会添加空格。

但是,\text工作方式不同:当您说\text{<material>}您真正排版的是四个框时:

\mbox{\everymath{\displaystyle}\fontsize\f@size{0}\selectfont <material>}
\mbox{\everymath{\textstyle}\fontsize\f@size{0}\selectfont <material>}
\mbox{\everymath{\textstyle}\fontsize\sf@size{0}\selectfont <material>}
\mbox{\everymath{\textstyle}\fontsize\ssf@size{0}\selectfont <material>}

然后 TeX 会选择相关的那个,在你的情况下是第三个。因此数学的排版就像是在更高级别一样,这意味着空格插入二元运算或关系符号周围。

\medmuskip只有通过将和设置为零才能实现删除这些空格\thickmuskip,但这意味着您不能使用它们在您想要的地方添加空间。

答案2

你可以使用

$2^{\somepackagecommand{calculate \ensuremath{1{-}1}}}$

也许可以制作一个\text可以自动执行此操作的变体,但最好还是\text避免\ensuremath

我通常会使用

$2^{\text{calculate }1-1}$

如果你真的需要单词间距和

$2^{\mathrm{something}-2}

如果你不这样做。


在更新的 MWE 中,你可以使用

$2^{\medmuskip=0mu \somepackagecommand{\mytextmathstatement}}$

有人可能\medmuskip明确使用了它,并且这也会影响到二元运算符周围的自动间距,但可能他们没有。

相关内容