68

What are the differences between \stackrel and \stackbin? In what situations is it better to use one or the other?

5
  • 5
    Effectively, this boils down to the question related to \mathbin and \mathrel which can be found in what is the difference between mathbin vs. mathrel
    – percusse
    Dec 24, 2011 at 3:36
  • Which do I use if I just want to stack text and do not want added spacing to separate math from text?
    – Village
    Dec 24, 2011 at 3:42
  • @Village: If you want to remove any text influence from your \stackrel (or \stackbin) choice, then you can use \usepackage{amsmath,stackrel}$a\stackrel{\text{\makebox[0pt]{abc}}}{=}b$. This typesets abc in text mode in the appropriate font size without any width, and would therefore not influence math spacing. \stackrel and \stackbin typically only have narrow entries on top of/below them. Is this what you might be after?
    – Werner
    Dec 24, 2011 at 4:05
  • Yes, I just want three layers of stacked and centered text, without modifying any of the spacing. Would it be better if I used some other way to position the text in three levels?
    – Village
    Dec 24, 2011 at 4:28
  • @Village: You could use any number of means. For example, typeset things in an array or tabular that is vertically centered, or use \stackrel. Either way, this seems to be a departure from your current question which relates specifically to \stackrel and \stackbin.
    – Werner
    Dec 24, 2011 at 4:45

3 Answers 3

45

Without the stackrel package, \stackrel is defined in ltxmath.dtx as

\def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}}

which typesets a relational operator with a top limit (effectively placing it on top). Heiko Oberdiek's stackrel package is said to provide an

Enhancement to the \stackrel command.

This "enhancement" provides an optional argument to \stackrel for placing something below the relational operator (using a similar process as the original \stackrel). Additionally, it provides a counterpart for binary relations called \stackbin. The difference between the two (or when to use which one) is contained within the post What is the difference between \mathbin vs. \mathrel? Here is a similar take on the use of stackrel.

enter image description here

\documentclass{article}

\usepackage{stackrel}

\begin{document}

\begin{tabular}{clc}
  \multicolumn{3}{c}{Relations} \\[5pt]
  \LaTeX & Typeset & width \\
  \hline
  \verb|$x=x$| & $x=x$ & \setbox0=\hbox{$x=x$} \the\wd0 \\
  \verb|$x\stackbin[c]{a}{=}x$| & $x\stackbin[c]{a}{=}x$ & 
    \setbox0=\hbox{$x\stackbin[c]{a}{=}x$} \the\wd0 \\
  \verb|$x\stackrel[c]{a}{=}x$| & $x\stackrel[c]{a}{=}x$ & 
    \setbox0=\hbox{$x\stackrel[c]{a}{=}x$} \the\wd0 \\[10pt]
  \multicolumn{3}{c}{Binary operators} \\[5pt]
  \LaTeX & Typeset & width \\
  \hline
  \verb|$x+x$| & $x+x$ & \setbox0=\hbox{$x+x$} \the\wd0 \\
  \verb|$x\stackbin[c]{a}{+}x$| & $x\stackbin[c]{a}{+}x$ & 
    \setbox0=\hbox{$x\stackbin[c]{a}{+}x$} \the\wd0 \\
  \verb|$x\stackrel[c]{a}{+}x$| & $x\stackrel[c]{a}{+}x$ & 
    \setbox0=\hbox{$x\stackrel[c]{a}{+}x$} \the\wd0
\end{tabular}

\end{document}

Note the equivalent spacing using \stackrel with =, while similar spacing is returned using \stackbin and +. In essence, use \stackrel for relational operators, and \stackbin for binary operators.

2
  • why do you use $x=x$ & \setbox0=\hbox{$x=x$} \the\wd0 instead of \setbox0=\hbox{$x=x$} \usebox0 & \the\wd0 ? Mar 2, 2017 at 12:54
  • @user2987828: No particular reason. The storing to a box and measuring occurs in the same cell.
    – Werner
    Mar 2, 2017 at 16:18
127

Don't use \stackrel or \stackbin, they are obsolete. Use instead \underset and \overset from amsmath as they automatically space things correctly (whether it's a binary relation or a binary operator):

result of the code below

\documentclass{article}

\usepackage{amsmath}

\begin{document}

$f(x) \overset{\text{def}}{=} x \ln(1+x)$

$f(x) \underset{x \to 0}{=} x^2 + o(x^2)$

$A \underset{\text{below}}{\overset{\text{above}}{+}} C$

\end{document}
2
  • Can you please add a reference which clearly shows that and why \stack* is obsolete? Feb 5, 2021 at 11:51
  • 2
    @ManuelSchneid3r: you're not going to find a better reason than the one I gave in my post (manual spacing vs automatic spacing). I should also have mentioned \overunderset that puts something both above and below the symbol (and would have simplified my third example). Feb 8, 2021 at 9:09
13

I personally prefer using \mathop, because it's simpler. Instead of using nested under/oversets, you could simply write:

$A \mathop{+}_{\text{below}}^{\text{above}} C$
2
  • 4
    That works if you wrap it in \displaystyle{} ; otherwise (inline mode) it behaves like \Sum etc. and puts the text on the right as superscript / subscript.
    – Frentos
    Mar 14, 2018 at 19:09
  • 1
    You can use $A \mathop{+}\limits_{\text{below}}^{\text{above}} C$ in inline mode.
    – VicaYang
    May 26, 2021 at 8:14

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .