@Section
   @Title { Spacing }
   @Tag { equ_spacing }
@Begin
@PP
There is a basic rule governing the use of white space characters (space,
tab, and newline) in the input to Lout:  white space between two objects
affects the result; white space between a symbol and its parameter does
not.  This is explained at length in Section {@NumberOf spaces}.
@PP
Although this rule is just right most of the time, it is not adequate
for equation formatting.  Getting the horizontal spacing right in
equations is a very fiddly business, involving four different sizes of
space (zero, thin, medium, and thick), and different rules for spacing
within superscripts and subscripts to those applying outside, according
to a leading authority @Cite { $knuth1984tex }.  {@Code "@Eq"} therefore
takes the spacing decisions upon itself, and consequently chooses to
ignore all white space in its input, even between two objects.  (The
simplest way to restore the effect of white space to part of an equation
is to enclose that part in a @Code "@Font" symbol.)
@PP
Every symbol provided by {@Code "@Eq"} has a @I {full name}, which
equations. @RawIndex { equations }
equations.fullname @SubIndex { full name of symbol }
full.name @Index { full name of equation symbol }
denotes the symbol without any space attached.  Many symbols also
have a @I {short name}, which denotes the same symbol with what
equations. @RawIndex { equations }
equations.shortname @SubIndex { short name of symbol }
short.name @Index { short name of equation symbol }
{@Code "@Eq"} considers to be an appropriate amount of space for that
symbol attached to it.  For example, @Eq { lessequal } has full name
@Code lessequal and short name {@Code "<="}:
@IL
@LI {
@Code "a lessequal b"
|7ct
@Eq { a lessequal b }
}
@LI {
@Code "a <= b"
|7ct
@Eq { a <= b }
}
@EL
{@Code "@Eq"} puts a thick space around relation symbols like {@Code "<="},
equations. @RawIndex { equations }
equations.relation.symbols @SubIndex { relation symbols }
relation.symbols @Index { relation symbols in equations }
a medium space around binary operator symbols like {@Code "+"}, and a thin
equations. @RawIndex { equations }
equations.binaryoperators @SubIndex { binary operator symbols }
binaryoperators @Index { binary operator symbols in equations }
space after punctuation symbols (@Code ";" and {@Code ","}); except that
equations. @RawIndex { equations }
equations.punctuation @SubIndex { punctuation symbols }
punctuation @Index { punctuation symbols in equations }
in places where the symbols appear in a smaller size (superscripts,
subscripts, etc.), these spaces are omitted.  No other horizontal space
is ever inserted.
@PP
The short names have been carefully designed to produce good-looking
mathematics most of the time.  It is best to rely on them in the first
instance and only think about spacing when the result is not pleasing.  In
that case, {@Code "@Eq"}'s space can be removed by using the full names,
equations. @RawIndex { equations }
equations.spacing @SubIndex { spacing symbols }
spacing.equations @Index { spacing symbols in equations }
and thin, medium and thick space can be added using the following symbols:
@ID @Tab
    vmargin { 0.5vx }
    @Fmta { @Col A ! @Col B }
{
@Rowa
  A { @Code "`" }
  B { {@Code "0.18f"}  ({@Code "0.018f"} in subscripts, etc.) }
@Rowa
  A { @Code "``" }
  B { {@Code "0.24f"}  ({@Code "0.024f"} in subscripts, etc.) }
@Rowa
  A { @Code "```" }
  B { {@Code "0.30f"}  ({@Code "0.030f"} in subscripts, etc.) }
}
where @Code "1f" is the current font size.  These symbols have low
precedence.  The @Code "&" symbol from raw Lout is also available;
the @Code "s" unit has value 0 and so is not very useful, but one can
write @Code "&2m" for example for a two em space.  The full names are
tedious to remember, so {@Code "@Eq"} provides a @Code "non" symbol
equations. @RawIndex { equations }
equations.non @SubIndex { @Code "non" symbol }
non.equations @Index { @Code "non" symbol (equations) }
which removes spaces from its right parameter; thus @Code "non <=" is
equivalent to {@Code "lessequal"}.  There are also {@Code "rel"},
equations. @RawIndex { equations }
equations.rel @SubIndex { @Code "rel" symbol }
rel.equations @Index { @Code "rel" symbol (equations) }
{@Code "bin"}, and {@Code "punct"} symbols for telling {@Code "@Eq"}
equations. @RawIndex { equations }
equations.bin @SubIndex { @Code "bin" symbol }
bin.equations @Index { @Code "bin" symbol (equations) }
equations. @RawIndex { equations }
equations.punct @SubIndex { @Code "punct" symbol }
punct.equations @Index { @Code "punct" symbol (equations) }
to add space to the following symbol as though it was a relation symbol,
binary operator, or punctuation symbol.
@End @Section
