7

The amsmath package secures away the original \mathcode of the minus and equal signs, and subsequently uses the saved values in the macros that provide the extensible arrows (e.g., \leftarrowfill@). Indeed, at lines 893–900 of amsmath.sty we read

\mathchardef\std@minus\mathcode`\-\relax
\mathchardef\std@equal\mathcode`\=\relax
\AtBeginDocument{%
  \mathchardef\std@minus\mathcode`\-\relax
  \mathchardef\std@equal\mathcode`\=\relax
}
\ams@def\relbar{\mathrel{\mathpalette\mathsm@sh\std@minus}}
\ams@def\Relbar{\mathrel\std@equal}

Why does it do so? What problem are the package authors trying to avoid here?

GuM
  • 21,558
  • 1
    It's for \operatorname and related things. – egreg Feb 04 '17 at 17:37
  • @egreg: I see; but why \std@equal, then? As far as I can see, \newmcodes@ does not redefine the \mathcode of =. – GuM Feb 04 '17 at 17:47
  • 2
    I guess it's for symmetry. I'm more concerned with the redefinition of \std@minus in \newmcodes@, which I deem wrong and, indeed, it can break in certain circumstances, see http://tex.stackexchange.com/a/299805/4427 – egreg Feb 04 '17 at 17:52
  • @egreg: Well, now I have another question: I thought half an hour, and I cannot see why \std@minus is redefined again inside \newmcodes@! – GuM Feb 04 '17 at 18:24

2 Answers2

7

the comment in the file amsmath.dtx reads thus:

The minus sign used in constructing these arrow fills is smashed so that superscripts above the arrows won't be too high. This primarily affects the \xleftarrow and \xrightarrow arrows.

since this file has been processed into a pdf file and is included in tex live, you can look at the details by asking for texdoc amsmath.pdf.

implicit in this setting is the knowledge that the minus sign in computer modern has the same height as the plus, which would certainly affect the positioning of superscripts unless adjusted.

although not commented explicitly, the equal sign is used as the extender for two-shaft arrows.

  • Of course, I had already read, as carefully as I could, the comments in amsmath.dtx before asking this question, but unfortunately they do not explain, as I said in my question, what problem the authors are trying to avoid. @egreg has answered in his comments, and, by the way, I think that the whole community would benefit if he decided to write a comprehensive answer. – GuM Feb 04 '17 at 17:56
  • Let me clarify that I was not asking the reason of the smashing applied to the minus sign: that has always been clear to me. What I was asking was, why do one need to store away the \mathcode value? – GuM Feb 04 '17 at 18:10
  • @GustavoMezzetti -- that's a question for the creators of amsmath; it wasn't done that way in ams-tex, so it was added when that was "transformed". i'll ask. – barbara beeton Feb 04 '17 at 18:40
  • Thank you for your interest in this question. Actually, if I look at amstex.tex, I cannot find a redefinition of \relbar, so I infere that it uses the definition inherited by plain.tex, which is \def\relbar{\mathrel{\smash-}} and thus makes no mention of \std@minus. – GuM Feb 04 '17 at 19:08
  • 2
    @barbarabeeton fairly sure you need to ask Michael .. and none of us want to do that just yet. This is not from the days when I and Rainer reimplement amstex for LaTeX, it must have come later – Frank Mittelbach Feb 04 '17 at 21:12
  • @FrankMittelbach: So, you are essentially saying that I’ve got no hope of getting a positive answer, aren’t you? – GuM Feb 04 '17 at 23:28
  • @GustavoMezzetti if you mean by positive answer an authorative answer from the person who wrote that code, then probably no as my guess is that was done by Michael. But to give a reasonable explanation is still possible (so I would not yet give up hope :-)) – Frank Mittelbach Feb 05 '17 at 08:48
5

diffs-m.txt contains the remark

---Changed \relbar to use \std@minus---otherwise \underleftrightarrow works poorly in a \DeclareMathOperator definition.

and trying this out one can see the problem:

\documentclass[12pt]{article}%

\usepackage{amsmath}


\DeclareMathOperator{\test}{\underleftrightarrow{test}}

\begin{document}


\[\test\]

\makeatletter
\def\relbar{\mathrel{\mathpalette\mathsm@sh-}}

\[\test\]

\end{document}

enter image description here

Ulrike Fischer
  • 327,261
  • Yes, this is essentialy the same answer that @egreg gave in his comment, but the reference to the change log is undoubtebly more useful, and amounts to a “positive” answer. :-) – GuM Feb 05 '17 at 13:14