Spacing (was IMG in PRE?)

Stavros Macrakis (macrakis@osf.org)
Tue, 14 May 1996 14:02:10 -0400


Message-Id: <199605141802.OAA01741@postman.osf.org>
To: Abigail <abigail@tungsten.gn.iaf.nl>
Cc: www-html@w3.org
Subject: Spacing (was IMG in PRE?)
In-Reply-To: Your message of "Mon, 13 May 1996 23:58:23 EDT."
             <199605132158.XAA01589@tungsten.gn.iaf.nl> 
Date: Tue, 14 May 1996 14:02:10 -0400
From: Stavros Macrakis <macrakis@osf.org>

Abigail <abigail@tungsten.gn.iaf.nl> said:
 
    I've always problems in imagining how wide a space is in a
    propotional font. For instance, in aligned text (both right and
    left) interword space clearly differs from line to line.

As your example shows, there is NO standard interword space.  In fact,
even interletter space (letter spacing) is somewhat flexible in good
typography.  In good typesetting programs, there will be several kinds
of fixed space defined: an en space (the width of the letter "n"); an
em space (the width of the letter "m", and guaranteed to be at least
as wide as the widest letter); a numeric space (the width of a number,
used to align numbers in tables -- note that all numbers must be the
same width).

Scott E. Preece <preece@predator.urbana.mcd.mot.com> wrote:

    ...Another mode that would be extremely useful is
            1. proportional type
            2. no autofilling
            3. preserve whitespace as provided (either by keeping
            as individual space characters or by tabbing to the
            indicated depth)
    In addition to the obvious use for poetry, this would be good for
    code, for those of us who believe code should be pretty-printed,
    rather than monospaced....

This is not good enough.  For one thing, "preserve whitespace" is not
well defined unless you calculate it assuming that all letters are of
maximal width (1 em).

For indentation only, assuming initial spaces are 1 em wide will work
fairly well.  However, this will not work for indenting past the
whitespace.  For instance, consider indenting argument lists and comments:

 do_my_function ( long_identifier / scale_factor,      /* Must scale */
                  mainstruct.subfield -> stuff,
                  "The end of the world is nigh.")     /* Error message */

What is really needed is a way of saying that certain places must align.  In
general, this will require two passes (like table layout).  The markup might
look something like:

 do_my_function ( <tab 1>long_identifier / scale_factor, <tab 2>/* Must scale */
  <tab 1>mainstruct.subfield -> stuff,
  <tab 1>"The end of the world is nigh.") <tab 2>/* Error message */

If a certain amount of whitespace was required in certain places, you could
presumably use (say) a hard space (Latin-1 character hex a0 =" ").

Note that global tabs are _not_ appropriate in many cases.  Consider the setting
of verse plays:

   Ant.  Thou art perfect then, our ship hath touch'd upon    (345)
         The deserts of Bohemia?                              (346)
   Mar.                           Ay, my lord; and fear       (347)
         We have landed in ill time....                       (348)

presumably to be represented as something like:

   Ant.  <tab n=sp>Thou art perfect then, our ship hath touch'd upon<tab n=lineref>(345)
         <tab n=sp>The deserts of Bohemia?<tab new n=split><tab n=lineref>(346)
   Mar.  <tab n=split>Ay, my lord; and fear<tab n=lineref>(347)
         <tab n=sp>We have landed in ill time....<tab n=lineref>(348)

In some cases, you may want to set hemistiches aligned right and left:

    Andra moi ennepe, mousa,      polytropon, hos mala polla
    planchthe, epei Troies hieron        ptoliethron epersen

	-s