# [texhax] strange behavior of amsmath

jfbu jfbu at free.fr
Thu Dec 12 20:16:18 CET 2013

Le 12 déc. 2013 à 19:56, jfbu <jfbu at free.fr> a écrit :

>
> Le 12 déc. 2013 à 19:05, jfbu <jfbu at free.fr> a écrit :
>
>>
>> Le 12 déc. 2013 à 00:43, Reinhard Kotucha <reinhard.kotucha at web.de> a écrit :
>>
>>> Hi,
>>> I would expect that the fleqn option of amsmath has only an impact on
>>> horizontal glue.
>>>
>>> Curiously, if the fleqn option is active, there is extra vertical glue
>>> below the first formula of each paragraph and below the first formula
>>> following ordinary text.
>>>
>>> Here is a minimal example:
>>>
>>> <testfleqn.tex.gz>
>>> You get correct vertical spacing if you comment out the line
>>> containing "[fleqn]".  The relevant part of the amsmath source code
>>> looks quite innocent.  I can reproduce the problem with TeX Live 2003
>>> too, the oldest TL release I've currently installed.
>>>
>>> The vertical bar in the test file is an argument of \smash, hence
>>> both, its height and depth is zero.  Its sole purpose is to make the
>>> extra glue more visible.
>>>
>>> Please also note that "some text" in the test file doesn't start a new
>>> paragraph.
>>>
>>> Where does the extra vertical space come from?  I doubt that it's
>>> deliberate.
>>>
>>> Regards,
>>> Reinhard
>>>
>>> --
>>
>
> forgot to post to the list
>
>> With this in the preamble
>>
>> \makeatletter
>> \@tfor\x:=\normalsize\small\footnotesize\do
>> \let\@normalsize\normalsize
>> \makeatother
>
>>
>> the standard classes should, as far as I can evaluate,
>> consistently have \belowdisplayskip=\belowdisplayshortskip
>> which should give more consistent vertical behavior.
>
>>
>> at least it solves it for your test file (with or without fleqn)
>> and also with the same code without amsmath but with or
>> without fleqn as article class option
>
> but as this creates an asymmetry and
> the standard classes always have \belowdisplayskip=\abovedisplayskip
> one then feels compelled to do  something like
>
> \makeatletter
> \@tfor\x:=\normalsize\small\footnotesize\do
>    {\belowdisplayskip\belowdisplayshortskip
>     \abovedisplayskip\belowdisplayskip}}
> \let\@normalsize\normalsize
> \makeatother
>
> The values of \belowdisplayshortskip are
>
> <10pt>: \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
> <11pt>: \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
> <12pt>: \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
>
> The above patches however will reduce the initial vertical
> spacing when \abovedisplayskip is used
>
> On this matter, there is something I don't quite understand
> with LaTeX $= \begin{displaymath} > > Try > > \documentclass{article} > \begin{document} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > \begin{displaymath} > \vartheta=2\pi\smash{\rule{.4pt}{4ex}} > \end{displaymath} > > \end{document} > > and one discovers that LaTeX \[ breaks the > rule explained in TeX by Topic > ... The \predisplaysize is taken to be -\maxdimen if there > was no previous line, that is, the display started the paragraph, or it followed another > display;... > > which commands to always use the short skips in such a case > > The code demonstrates that LaTeX uses the long skips in such > a case and this brings inconsistencies in vertical spacings > > > Regards, > Jean-Francois from source2e.pdf: (comment added by me...) 170 \def\[{% 171 \relax\ifmmode 172 \@badmath 173 \else 174 \ifvmode 175 \nointerlineskip 176 \makebox[.6\linewidth]{}%<---- THIS WILL FORCE USE OF LONG DISPLAY SKIPS!!! 177 \fi 178 %% BRACE MATCH HACK 179 \fi 180 } The problem is that after$ TeX is in Horizontal Mode...

(insert \ifhmode\typeout{HMODE}\fi in-between a \] and a $) so the next \[..$ will not execute the conditional above
hence will (compatibly with Plain) apply the /SHORT/ forms
of the skips...
... but the first $..$ applied the /LONG/ form due
to the code above...

I must have read hundreds of times that I should never ever
use $$in good LaTeX style, but the conclusion for me is that to the contrary I should ALWAYS use$$ !!

Regards

Jean-Francois