Ensuremath、TextSF 和回忆录:不可能的三重奏

Ensuremath、TextSF 和回忆录:不可能的三重奏

我希望一些涉及的命令\textsf可以在文档类中的数学模式和文本模式下使用memoir

Hello \abcd{}, $\abcd{}$.

生产:

在此处输入图片描述

我找到了一个\sf适用于文章的解决方案,但不幸的是,\sf它只适用于article\textsf而不适用于\ensuremath。有什么想法可以解决这个问题吗?

\documentclass[]{memoir}

% Fails in both memoir and article
\newcommand*\abcd{\ensuremath{\textsf{ab^{cd}}}}
% Fails in memoir
%\newcommand*\abcd{\ensuremath{{\sf{ab^{cd}}}}}

\begin{document}
Hello \abcd{}, $\abcd{}$
\end{document}

编辑

我试图比较 egreg 的不同主张:\textsuperscript不能很好地协同工作\textsubscriptrlap很脏并且经常产生不好的结果),否则会给出不错的结果(即使我更喜欢文本的\mathfs外观) 。\textsuperscript

\documentclass[]{article}
\usepackage[margin=1cm]{geometry}
\newcommand{\versionA}{\mbox{\sffamily ABC\textsuperscript{can}\textsubscript{sup}}}
\newcommand{\versionB}{\mbox{\sffamily ABC\rlap{\textsuperscript{can}}\textsubscript{sup}}}
\newcommand{\versionC}{\ensuremath{\textsf{ABC}^{\textsf{can}}_{\textsf{sup}}}}
\newcommand{\versionD}{\ensuremath{\mathsf{ABC}^{\mathsf{can}}_{\mathsf{sup}}}}
\newcommand{\versionE}{\ensuremath{\mathsf{ABC^{can}_{sup}}}}
\newcommand{\versionF}{\ensuremath{{\sf ABC^{can}_{sup}}}}
\newcommand{\versionAns}{\mbox{\sffamily ABC\textsuperscript{can}}}
\newcommand{\versionBns}{\mbox{\sffamily ABC\rlap{\textsuperscript{can}}}}
\newcommand{\versionCns}{\ensuremath{\textsf{ABC}^{\textsf{can}}}}
\newcommand{\versionDns}{\ensuremath{\mathsf{ABC}^{\mathsf{can}}}}
\newcommand{\versionEns}{\ensuremath{\mathsf{ABC^{can}}}}
\newcommand{\versionFns}{\ensuremath{{\sf ABC^{can}}}}
\begin{document}

\noindent With subscript:\\
\versionA, $\versionA$, \versionAns, $\versionAns$, $\versionAns_\delta$: textsuperscript $\Rightarrow $ not aligned properly\\
\versionB, $\versionB$, \versionBns, $\versionBns$, $\versionBns_\delta$: textsuperscript+rlap $\Rightarrow$ good looking, but rlap removes width so bad result if the lower script has a smaller width\\
\versionC, $\versionC$, \versionCns, $\versionCns$, $\versionCns_\delta$: textsf $\Rightarrow$ too big\\
\versionD, $\versionD$, \versionDns, $\versionDns$, $\versionDns_\delta$: mathsf 3 times $\Rightarrow$ best result, I just find the subscript text to be a bit too low compared to textsuperscript\\
\versionE, $\versionE$, \versionEns, $\versionEns$, $\versionEns_\delta$: mathsf 1 time $\Rightarrow$ okish, just not working with unknown subscript.\\
\versionF, $\versionF$, \versionFns, $\versionFns$, $\versionFns_\delta$: sf (fail with memoir), otherwise like mathsf\\

\end{document}

在此处输入图片描述

放大:

在此处输入图片描述

答案1

我认为没有必要有一个在文本和数学中都有效的命令。请参阅何时不应使用 \ensuremath 作为数学宏?和其他线程。

如果你真的想要它,但我怀疑

\newcommand{\abcd}{\ensuremath{\mathsf{ab}^{\mathsf{cd}}}}

如果您需要字母遵守周围的条件(例如斜体),则拆分\textsf

\newcommand{\abcd}{\ensuremath{\textsf{ab}^{\textsf{cd}}}}

当然,在这种情况下更合适的解决方案是

\newcommand{\abcd}{\mbox{\sffamily ab\textsuperscript{cd}}}

顺便说一句,\sf这个命令已经被弃用大约 30 年了。

相关内容