我定义了这个宏:
\newcommand{\foldeq}[1]{\sim_{#1}}
后来,我注意到当它在下标中使用时,看起来有点难以分辨它是 还是$\sim f$
。$\sim_f$
($\sim f$
没有意义,但这不是重点。)所以我添加了一个额外的宏,用于下标(原则上也用于上标,尽管这也没有意义):
\newcommand{\scriptfoldeq}[1]{\foldeq{\raisebox{-0.25mm}{$\scriptscriptstyle #1$}}}
但后来我突然想到,如果有一种方法可以检测宏是在下标还是上标中调用,并做出相应的反应,那将会非常方便。有吗?
更新:
使用 David 的回答,这是我的原始宏现在的样子:
\newcommand{\foldeq}[1]{
\sim_{\mathchoice{}{}{#1}{\raisebox{-0.25mm}{$\scriptscriptstyle #1$}}}
% {\sim_f} looks similar to {\sim f} in subscript/superscript.
}
答案1
您可以使用\mathchoice
或其包装器\mathpalette
。它们实际上并没有检测宏的使用位置,它们只是以四种不同的样式设置了四次内容,并且 TeX 在布局数学时使用了适当的框。
\def\test{{\mathchoice{D}{T}{1}{2}}}
$$\test {\test \over \test} \test^{\test^\test} $$
\centerline{$\test {\test \over \test} \test^{\test^\test} $}
\bye