[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