\text 内的数学

\text 内的数学

内部的数学\text丢失了它在下标内部的信息$X_{a+b,\text{\ensuremath{a+b}}}$

\documentclass{article}
\usepackage{amsmath}
\begin{document}
  $X_{a+b,\text{\ensuremath{a+b}}}$
\end{document}

在此处输入图片描述

我想找到不同的方法来“解决”这个问题。


背景:这是我的 mhchem 包。目前我想不出有什么突出的用例。它更像是一个“使其一致”的功能。

例如,如果您\ce{H2O}在文本模式下使用,那么我的包将使用当前文本字体正确排版,因此它在标题和目录中看起来也不错。它基本上使用数学模式和一些\texts。我让用户可以自由地在他们希望的任何地方插入数学,他们甚至可以写类似\ce{NO_{2n + $\sum_i x_i + y_i$}或其他内容。我不得不选择这样一个奇怪的例子,因为所有合理的表达式(n、2n、2n+1)都已经得到特殊处理。但是,我仍然希望允许任何数学表达式在那里,无论多么奇怪和嵌套。

答案1

\text确实丢失了它在下标或上标中使用的信息。

这是一个可能的补丁,但使用不同的宏可能更好。如果您打算在您的包中使用它,则应警告用户它与\text定义的标准命令的区别amsmath

\documentclass{article}
\usepackage{amsmath}
\usepackage{xpatch}

\makeatletter
\newcommand{\remove@spaces}{%
  \thickmuskip=0mu
  \medmuskip=0mu
}
\xpatchcmd{\text@}
 {\textdef@\textstyle\sf@size}
 {\textdef@{\textstyle\remove@spaces}\sf@size}
 {}{}
\xpatchcmd{\text@}
 {\textdef@\textstyle\ssf@size}
 {\textdef@{\textstyle\remove@spaces}\ssf@size}
 {}{}
\makeatletter

\begin{document}

$X_{a+b<c\sin x,\text{text $a+b<c\sin x$}}$

$\displaystyle x+\text{text $a+b<c\sin x$}$

$x+\text{text $a+b<c\sin x$}$

\end{document}

在此处输入图片描述

如果你想定义一个新命令,比如说\ttext,你可以这样做(\usepackage{amsmath}当然是用)

\makeatletter
\newcommand{\remove@spaces}{%
  \thickmuskip=0mu
  \medmuskip=0mu
}
\DeclareRobustCommand{\ttext}{%
  \ifmmode\expandafter\ttext@\else\expandafter\mbox\fi}
\def\ttext@#1{{\mathchoice
  {\textdef@\displaystyle\f@size{#1}}%
  {\textdef@\textstyle\f@size{\firstchoice@false #1}}%
  {\textdef@{\textstyle\remove@spaces}\sf@size{\firstchoice@false #1}}%
  {\textdef@{\textstyle\remove@spaces}\ssf@size{\firstchoice@false #1}}%
  \check@mathfonts
  }%
}
\makeatother

\mathchoice仅调用一次。

答案2

与 egreg 的答案方法相同。但形式更适合我的想法。(我创建它是为了看看我对 egreg 解决方案的理解是否正确。)

\documentclass{article}
\usepackage{amsmath}

\newcommand\ttext[1]{\mathchoice%
  {\text{#1}}%
  {\text{#1}}%
  {\thickmuskip=0mu\medmuskip=0mu\text{#1}}%
  {\thickmuskip=0mu\medmuskip=0mu\text{#1}}}

\begin{document}

$X_{a+b<c\sin x,\ttext{text $a+b<c\sin x$}},a+b<c$

$\displaystyle x+\ttext{text $a+b<c\sin x$}$

$x+\ttext{text $a+b<c\sin x$}$

\end{document}

在此处输入图片描述

相关内容