有没有考虑拥挤风格的 \phantom?

有没有考虑拥挤风格的 \phantom?

在 LaTeX2e 中,\phantom定义为

\def\vphantom{\v@true\h@false\ph@nt}
\def\hphantom{\v@false\h@true\ph@nt}
\def\phantom{\v@true\h@true\ph@nt}
\def\ph@nt{%
  \ifmmode
    \expandafter\mathpalette\expandafter\mathph@nt
  \else
    \expandafter\makeph@nt
  \fi}
\def\makeph@nt#1{%
  \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finph@nt}
\def\mathph@nt#1#2{%
  \setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
\def\finph@nt{%
  \setbox\tw@\null
  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
  \ifh@ \wd\tw@\wd\z@\fi \box\tw@}

这意味着,在数学模式下,

$\sqrt{\phantom{x^2}}$

大小相同

$\sqrt{\hbox{$x^2$}}$

但不同于

$\sqrt{x^2}$

因为x^2处于\sqrt狭窄模式。

我知道mathtools包提供了一个\cramped宏来解决这个问题,但是有没有自动的方法?


测试代码:

\documentclass{minimal}
\usepackage{mathtools}
\begin{document}
\fontsize{60}{72}\selectfont
$\sqrt{x^A} \sqrt{\hbox{$x^A$}}$

$\sqrt{\phantom{\cramped{x^A}}} \sqrt{\phantom{x^A}}$ 
\end{document}

在此处输入图片描述

答案1

我认为答案是“不”,即使使用 e-tex 原语,您也无法检测到这一点。也许 luatex 可以提供帮助?

感谢评论者,这应该在 luatex 中是可能的

\ifnum\mathstyle=\crampedtextstyle 

或者对于 lualatex

\ifnum\luatexmathstyle=\luatexcrampedtextstyle 

请注意,通常\over可能会导致一些复杂情况阻止检测数学样式,请参阅luatex 手册中的\Ustack( )。\luatexUstack

答案2

\phantom以下是根据 David Carlisle 的回答编写的 LuaLaTeX 补丁:

\usepackage{ifluatex}
\usepackage{mathtools}

\ifluatex
\makeatletter

\def\ph@nt{%
  \ifmmode
    \ifodd\luatexmathstyle % 1,3,5,7 for cramped styles
      \def\reserved@a{\cramped}%
    \else
      \let\reserved@a\relax
    \fi
    \expandafter\mathpalette\expandafter\mathph@nt
  \else
    \expandafter\makeph@nt
  \fi}

\def\mathph@nt#1#2{%
  \setbox\z@\hbox{$\m@th#1\reserved@a{#2}$}\finph@nt}

\makeatother
\fi

然后\phantom可以检测狭窄的数学风格

相关内容