使用\ensuremath
inside\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
明确使用了它,并且这也会影响到二元运算符周围的自动间距,但可能他们没有。