Received: from mail.proteosys.com ([62.225.9.49]) by nummer-3.proteosys with Microsoft SMTPSVC(5.0.2195.5329); Fri, 7 Mar 2003 00:19:11 +0100 Received: by mail.proteosys.com (8.12.3/8.12.2) with ESMTP id h26NJ7a9007799 for ; Fri, 7 Mar 2003 00:19:08 +0100 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.27]) by relay.uni-heidelberg.de (8.12.8/8.12.8) with ESMTP id h26NBo0j021764; Fri, 7 Mar 2003 00:11:50 +0100 (MET) MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C2E436.CB4D4180" Received: from listserv (listserv.uni-heidelberg.de [129.206.100.27]) by listserv.uni-heidelberg.de (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h26N0Rwo027908; Fri, 7 Mar 2003 00:10:09 +0100 Received: from LISTSERV.UNI-HEIDELBERG.DE by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 1.8d) with spool id 6415 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Fri, 7 Mar 2003 00:10:08 +0100 X-MimeOLE: Produced By Microsoft Exchange V6.5 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h26NA8wE027944 for ; Fri, 7 Mar 2003 00:10:08 +0100 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.187]) by relay2.uni-heidelberg.de (8.12.8/8.12.8) with ESMTP id h26NAEle008227 for ; Fri, 7 Mar 2003 00:10:14 +0100 (MET) Received: from [212.227.126.206] (helo=mrelayng.kundenserver.de) by moutng.kundenserver.de with esmtp (Exim 3.35 #1) id 18r4VB-0004GX-00 for LATEX-L@listserv.uni-heidelberg.de; Fri, 07 Mar 2003 00:10:13 +0100 Received: from [80.129.4.243] (helo=istrati.mittelbach-online.de) by mrelayng.kundenserver.de with asmtp (TLSv1:EDH-RSA-DES-CBC3-SHA:168) (Exim 3.35 #1) id 18r4VA-0008H1-00 for LATEX-L@listserv.uni-heidelberg.de; Fri, 07 Mar 2003 00:10:13 +0100 Received: (from frank@localhost) by istrati.mittelbach-online.de (8.11.2/8.11.2/SuSE Linux 8.11.1-0.5) id h26N9ri05617; Fri, 7 Mar 2003 00:09:53 +0100 In-Reply-To: References: <630BE70C8320D6118D240002A589ABB204A95102@DERUM201> Return-Path: X-Mailer: VM 6.96 under Emacs 20.7.1 X-OriginalArrivalTime: 06 Mar 2003 23:19:11.0167 (UTC) FILETIME=[CB66BCF0:01C2E436] x-mime-autoconverted: from quoted-printable to 8bit by listserv.uni-heidelberg.de id h26NA8wE027945 X-Authentication-Warning: istrati.mittelbach-online.de: frank set sender to frank@mittelbach-online.de using -f X-Scanned-By: MIMEDefang 2.28 (www . roaringpenguin . com / mimedefang) X-Spam-Score: -2.3 () EMAIL_ATTRIBUTION,IN_REP_TO,REFERENCES,SPAM_PHRASE_00_01,X_AUTH_WARNING Content-class: urn:content-classes:message Subject: Re: algorithm for \addvspace Date: Fri, 7 Mar 2003 00:09:52 +0100 Message-ID: A<15975.54592.932836.969382@istrati.mittelbach-online.de> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Re: algorithm for \addvspace Thread-Index: AcLkNsuRYrUdRR2oRUekyklbhngI/g== From: "Frank Mittelbach" To: Reply-To: "Mailing list for the LaTeX3 project" Status: R X-Status: X-Keywords: X-UID: 4566 This is a multi-part message in MIME format. ------_=_NextPart_001_01C2E436.CB4D4180 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Lars Hellstr=F6m writes: > This needs not be related, but it sometimes leads to similar = problems, and > I haven't seen an explanation anywhere: why is \addvspace = discontinuous? If > SKIP < \lastskip < 0 > then the net effect of \addvspace{SKIP} is to do nothing, but if > SKIP < 0 <=3D \lastskip > then the net effect of \addvspace{SKIP} is that SKIP is added to the > current vertical list (thus moving everything up). i starred at that definition once more (probably done so several times = in the past :-) but i think it has some understandable logic (i'm not saying = that it has the world's best implementation for it) after all. basically it goes like this: the main intention why the command was introduced in the first place to = is the following: if there are two objects A and B that both want to produce some space after/before them then if both objects are = directly after each other one usually does not want to put too much space = between them, so a good approach is to use the maximum now an assumption that i think was made is that the skips that actually = end up being on the galley are positive and in fact i think this is virtually = always the the case. Note that i talk about the skips on the galley not the skip = used the last time in an \addvspace command, e.g. the cited example \addvspace{-\parskip} %% added 4 Sep 85 i actually one in a sequence \addpenalty\@beginparpenalty \addvspace\@topsep \addvspace{-\parskip}% and the net effect of \topsep-\parskip is normally positive. so back to the theme if producing the maximum is sensible then what to = do about SKIP < 0pt ? i think that Leslie thought this to be a good way to extend the command = to allow for corrective actions if necessary why he additionally required \lastskip > 0pt is beyond me though. it means that SKIP < \lastskip < 0pt again uses the maximum principle = but that doesn't make much sense to me. so much for how i read history two minutes before midnight (perhaps all rubbish) well, how could a simpler command look like? >Also, it seems to me as if there could be a need for two commands here: = one >which does what (the simplified) \addvspace does (guarantees that there = is >at least a certain amount of vertical space in the last mix of = penalties >and glue), and one which actually makes the vertical space a certain = amount >larger (without messing it up for any subsequent \addvspace or >\addvpenalty). what precisely is the algorithm for that simplified thingie? i'm not at = all sure what should happen there i can see how to define a user command for corrective actions always = adjusts the space in either direction, the only problem is that its natural name (addvspace) is already taken good night frank ------_=_NextPart_001_01C2E436.CB4D4180 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Re: algorithm for \addvspace

Lars Hellstr=F6m writes:

 > This needs not be related, but it sometimes = leads to similar problems, and
 > I haven't seen an explanation anywhere: = why is \addvspace discontinuous? If
 >   SKIP < \lastskip < = 0
 > then the net effect of \addvspace{SKIP} is = to do nothing, but if
 >   SKIP < 0 <=3D = \lastskip
 > then the net effect of \addvspace{SKIP} is = that SKIP is added to the
 > current vertical list (thus moving = everything up).

i starred at that definition once more (probably done = so several times in the
past :-) but i think it has some understandable logic = (i'm not saying that it
has the world's best implementation for it) after = all.

basically it goes like this:

the main intention why the command was introduced in = the first place to is the
following:

  if there are two objects A and B that both want = to
  produce some space after/before them  = then if both objects are directly
  after each other one usually does not want to = put too much space between
  them, so a good approach is to use the = maximum

now an assumption that i think was made is that the = skips that actually end up
being on the galley are positive and in fact i think = this is virtually always the
the case. Note that i talk about the skips on the = galley not the skip used the
last time in an \addvspace command, e.g. the cited = example

        = \addvspace{-\parskip}   %% added 4 Sep 85

i actually one in a sequence

        = \addpenalty\@beginparpenalty
        = \addvspace\@topsep
        = \addvspace{-\parskip}%

and the net effect of \topsep-\parskip is normally = positive.

so back to the theme if producing the maximum is = sensible then what to do
about

    SKIP < 0pt ?

i think that Leslie thought this to be a good way to = extend the command to
allow for corrective actions if necessary

why he additionally required  \lastskip > 0pt = is beyond me though.

it means that  SKIP < \lastskip < 0pt again = uses the maximum principle but
that doesn't make much sense to me.

so much for how i read history two minutes before = midnight (perhaps all
rubbish)

well, how could a simpler command look like?

>Also, it seems to me as if there could be a need = for two commands here: one
>which does what (the simplified) \addvspace does = (guarantees that there is
>at least a certain amount of vertical space in = the last mix of penalties
>and glue), and one which actually makes the = vertical space a certain amount
>larger (without messing it up for any subsequent = \addvspace or
>\addvpenalty).

what precisely is the algorithm for that simplified = thingie? i'm not at all
sure what should happen there

i can see how to define a user command for corrective = actions always adjusts
the space in either direction, the only problem is = that its natural name
(addvspace) is already taken

good night
frank

------_=_NextPart_001_01C2E436.CB4D4180--