我希望一些涉及的命令\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
不能很好地协同工作\textsubscript
(rlap
很脏并且经常产生不好的结果),否则会给出不错的结果(即使我更喜欢文本的\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 年了。