![确定宏/函数是否在下标、上标或都不是](https://linux22.com/image/306687/%E7%A1%AE%E5%AE%9A%E5%AE%8F%2F%E5%87%BD%E6%95%B0%E6%98%AF%E5%90%A6%E5%9C%A8%E4%B8%8B%E6%A0%87%E3%80%81%E4%B8%8A%E6%A0%87%E6%88%96%E9%83%BD%E4%B8%8D%E6%98%AF.png)
我想为xparse
命令提供不同的格式,取决于命令是在上标、下标还是都不扩展。
也就是说,我想知道命令里面
\NewDocumentCommand{\command}{}{%
% here
}
是否被调用
{}^{\command}
{}_{\command}
或者
\command
类似这样的问题已经有人问过了:我可以检测我的宏是在下标还是上标中使用吗?。我希望找到一个可以直接的解决方案,以便以后可以进行扩展,前提是我正在使用latex3
和xetex
,如果其中任何一个与此相关的话。
如果内核没有提供直接的方法,我相信与\command
扩展的框(?)的大小进行比较可能是一个很好的代理。
感谢评论,一些误解消失了,我想出了其他地方提到的“尺寸测量”的方法。
在评论提供的示例中,我现在已将固定高度\big|
支柱(vphantom
)替换为如下构造的支柱。
\savebox{\testbox}{\ensuremath{#1}}%
% \settodepth{\dimen0}{\testbox}%
\settoheight{\dimen1}{\testbox}%
% \addtolength{\dimen1}{\dimen0}% Not universally appropriate.
\addtolength{\dimen1}{0.375 \dimen1}%
\rule{0pt}{\dimen1}%
where\newsavebox{\testbox}
在宏的外部调用。
但是,这并没有正确设置上标或下标参数的高度,例如,
$\settoheight{\dimen0}{k}$ \the\dimen0 == ${}^{\settoheight{\dimen0}{k}}$ \the\dimen0
是相同的。
此外仍然缺乏所需的自指属性。