[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
>> {\expandafter\g at addto@macro\x{\belowdisplayskip\belowdisplayshortskip}}
>> \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
> {\expandafter\g at addto@macro\x
> {\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
More information about the texhax
mailing list