Strutting around: What's the difference between \strut, \mathstrut and \vphantom?
Each are defined as follows in the default document classes (article
, book
and report
):
\strut
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
with \strutbox
defined as
\setbox\strutbox\hbox{%
\vrule\@height.7\baselineskip
\@depth.3\baselineskip
\@width\z@}%
\mathstrut
\def\mathstrut{\vphantom(}
Using \mathstrut
would be equivalent to using \vphantom(
, with \strut
sets a zero-width rule (\@width\z@
) with depth .3\baselineskip
(\@depth.3\baselineskip
) and height .7\baselineskip
(\@height.7\baselineskip
). Note that the latter is font-dependent, since it uses \baselineskip
. That is, it is modified with font change selections using \fontsize{..}{..}\selectfont
, including the use font switches like \small
, \large
, etc.
I would use \strut
within text or math, and use \vphantom
if there is anything else I want a specific height of without the horizontal displacement. For example, when breaking two lines of math with different heights but still wanting to use extensible delimiters \left
and \right
. \mathstrut
is specific to the size of (
and (quoting barbarabeeton), "\mathstrut
is often better in math than \strut
. Which one is better depends on the local context."
Loading the amsmath
redefines these boxes somewhat, although their interpretation remains the same.
The \strut
and \mathstrut
commands just define a box with a zero width and a convenient fixed height and depth. The last command is for math mode.
The \vphantom
commands lets you create a box with a zero width and the same depth and height as the material that's in the argument of the command. The \vphantom
command is ideal for scaling left and right delimiters, as is explained in the following example, which is from LaTeX and Friends. The example requires amsmath
. The other commands aren't as flexible.
\begin{align*}
f & = g\left( 3^{3^{3}} + \text{\textrm{\ldots}}\right.\\
& \qquad \left.+ 3\vphantom{3^{3^{3}}} \right)\,.
\end{align*}