方程中的负幻像

方程中的负幻像

下面的代码产生了一个负面幻像(来自这个答案):

\newcommand{\negphantom}[1]{\settowidth{\dimen0}{#1}\hspace*{-\dimen0}}

然而,当在方程中使用时,

$$a\negphantom{\inf_{t>0}t^2}b$$

我收到错误。解决方法是

$$a\negphantom{$\inf_{t>0}t^2$}b$$

是否可以negphantom以这样一种方式进行定义,使其尊重在方程式内或不在方程式内?(后一种解决方案并不完美,因为不在\inf显示样式中)。

答案1

检查数学模式然后使用\mathpalette

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newlength{\negph@wd}
\DeclareRobustCommand{\negphantom}[1]{%
  \ifmmode
    \mathpalette\negph@math{#1}%
  \else
    \negph@do{#1}%
  \fi
}
\newcommand{\negph@math}[2]{\negph@do{$\m@th#1#2$}}
\newcommand{\negph@do}[1]{%
  \settowidth{\negph@wd}{#1}%
%  \hspace*{-\negph@wd}% % for TESTING
  \hspace*{\negph@wd}% % for TESTING
}
\makeatother

\begin{document}

\begin{gather}
a\negphantom{\inf_{t>0}t^2}b \\
a{\inf_{t>0}t^2}b \\
\textstyle a\negphantom{\inf_{t>0}t^2}b \\
\textstyle a{\inf_{t>0}t^2}b \\
\scriptstyle a\negphantom{\inf_{t>0}t^2}b \\
\scriptstyle a{\inf_{t>0}t^2}b \\
\scriptscriptstyle a\negphantom{\inf_{t>0}t^2}b \\
\scriptscriptstyle a{\inf_{t>0}t^2}b
\end{gather}

\end{document}

在此处输入图片描述

现在我们确定所有情况下空间都是正确的,我们可以删除调试位并写下最终的定义:

\makeatletter
\newlength{\negph@wd}
\DeclareRobustCommand{\negphantom}[1]{%
  \ifmmode
    \mathpalette\negph@math{#1}%
  \else
    \negph@do{#1}%
  \fi
}
\newcommand{\negph@math}[2]{\negph@do{$\m@th#1#2$}}
\newcommand{\negph@do}[1]{%
  \settowidth{\negph@wd}{#1}%
  \hspace*{-\negph@wd}%
}
\makeatother

相关内容