Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

In LaTeX2e, \phantom is defined as

\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@}

It means that, in math mode,

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

has the same size of

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

but differs from

$\sqrt{x^2}$

since x^2 in \sqrt is in cramped mode.

I know that mathtools package provides a \cramped macro to solve the problem, but is there an automatical method?


Test code:

\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}

enter image description here

share|improve this question

2 Answers 2

up vote 9 down vote accepted

I think the answer is "no" even with e-tex primitives you can not detect this. Perhaps luatex can jump to the rescue?

With thanks to the commenters, this should be possible in luatex

\ifnum\mathstyle=\crampedtextstyle 

or for lualatex

\ifnum\luatexmathstyle=\luatexcrampedtextstyle 

Note that as usual \over may cause some complications stopping the math style being detected, see \Ustack (\luatexUstack) in the luatex manual.

share|improve this answer
2  
LuaTeX has \mathstyle, but strangely enough it's undefined in LuaLaTeX. –  egreg Feb 21 '12 at 13:31
1  
@egreg, so it does thanks, the luatex manual suggests \ifnum\mathstyle=\crampedtextstyle ought to work. –  David Carlisle Feb 21 '12 at 13:36
3  
@egreg: all luatex’s new commands are prefixed by \luatex in LuaLaTeX. –  Khaled Hosny Feb 21 '12 at 13:48
    
Thanks. I think it's the solution. Can you copy the comment into the answer? I'll accept it. –  Leo Liu Feb 21 '12 at 15:31

Here is the patch of \phantom for LuaLaTeX, based on David Carlisle's answer:

\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

Then \phantom can detect cramped math styles

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.