aboutsummaryrefslogtreecommitdiffstats
path: root/doc/design
diff options
context:
space:
mode:
authorJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 19:21:41 +0000
committerJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 19:21:41 +0000
commit71bdb35d52747e6d7d9f55df4524d57c2966be94 (patch)
tree480ee5eefccc40d5f3331cc52d66f722fd19bfb9 /doc/design
parentb41263ea7578fa9742486135c762803b52794105 (diff)
downloadlout-71bdb35d52747e6d7d9f55df4524d57c2966be94.tar.gz
Lout 3.17.
git-svn-id: http://svn.savannah.nongnu.org/svn/lout/trunk@2 9365b830-b601-4143-9ba8-b4a8e2c3339c
Diffstat (limited to 'doc/design')
-rw-r--r--doc/design/README25
-rw-r--r--doc/design/all58
-rw-r--r--doc/design/mydefs591
-rw-r--r--doc/design/outfile.ps11727
-rw-r--r--doc/design/s1_045
-rw-r--r--doc/design/s2_014
-rw-r--r--doc/design/s2_187
-rw-r--r--doc/design/s2_279
-rw-r--r--doc/design/s2_3326
-rw-r--r--doc/design/s2_4345
-rw-r--r--doc/design/s2_590
-rw-r--r--doc/design/s2_92
-rw-r--r--doc/design/s3_010
-rw-r--r--doc/design/s3_176
-rw-r--r--doc/design/s3_2113
-rw-r--r--doc/design/s3_3143
-rw-r--r--doc/design/s3_451
-rw-r--r--doc/design/s3_92
-rw-r--r--doc/design/s4_088
-rw-r--r--doc/design/s5_011
-rw-r--r--doc/design/s5_1123
-rw-r--r--doc/design/s5_2372
-rw-r--r--doc/design/s5_3125
-rw-r--r--doc/design/s5_497
-rw-r--r--doc/design/s5_5109
-rw-r--r--doc/design/s5_92
-rw-r--r--doc/design/s6_018
-rw-r--r--doc/design/s6_185
-rw-r--r--doc/design/s6_279
-rw-r--r--doc/design/s6_92
-rw-r--r--doc/design/s7_084
31 files changed, 14979 insertions, 0 deletions
diff --git a/doc/design/README b/doc/design/README
new file mode 100644
index 0000000..1e7a8af
--- /dev/null
+++ b/doc/design/README
@@ -0,0 +1,25 @@
+Directory lout/doc/design
+
+This directory contains the Lout source files
+for the report entitled `The design and
+implementation of the Lout document formatting
+language' which appeared in Software--Practice
+and Experience, vol 23, pp1001-1041 (September
+1993). To produce the report, type the command
+
+ lout all > outfile.ps
+
+in this directory. This must be done three
+times to completely resolve all cross references,
+although the PostScript file outfile.ps is
+printable after the first run. Auxiliary files
+with .li and .ld suffixes will be created in
+this directory. A copy of the final outfile.ps
+is included.
+
+The second and third runs should produce no error
+messages (although changing the paper size might
+produce one or two benign ones).
+
+Jeffrey H. Kingston
+17 September 1999
diff --git a/doc/design/all b/doc/design/all
new file mode 100644
index 0000000..2755e5b
--- /dev/null
+++ b/doc/design/all
@@ -0,0 +1,58 @@
+@SysInclude { eq }
+@SysInclude { tab }
+@SysInclude { fig }
+@SysInclude { report }
+@SysDatabase @Reference { oldrefs }
+@Report
+ @Title { The Design and Implementation
+of the
+Lout Document Formatting Language }
+ @Author { Jeffrey H. Kingston }
+ @Institution { Basser Department of Computer Science,
+The University of Sydney 2006,
+Australia }
+ @DateLine { 27 January, 1993 }
+ @InitialLanguage { English }
+ @OptimizePages { Yes }
+ @AbstractTitle { SUMMARY }
+ @Abstract
+{
+Lout is a high-level language for document formatting, whose ease of use
+has permitted an unprecedented number of advanced features to be added
+quickly and reliably. This paper charts the evolution of the design and
+implementation of Lout from conception in mid-1984 to public release in
+October 1991. It includes extensive discussions of remaining problems
+and possible solutions.
+@DP
+{@B Keywords} document formatting typesetting
+}
+
+//
+
+@Include { s1_0 }
+@Include { s2_0 }
+@Include { s2_1 }
+@Include { s2_2 }
+@Include { s2_3 }
+@Include { s2_4 }
+@Include { s2_5 }
+@Include { s2_9 }
+@Include { s3_0 }
+@Include { s3_1 }
+@Include { s3_2 }
+@Include { s3_3 }
+@Include { s3_4 }
+@Include { s3_9 }
+@Include { s4_0 }
+@Include { s5_0 }
+@Include { s5_1 }
+@Include { s5_2 }
+@Include { s5_3 }
+@Include { s5_4 }
+@Include { s5_5 }
+@Include { s5_9 }
+@Include { s6_0 }
+@Include { s6_1 }
+@Include { s6_2 }
+@Include { s6_9 }
+@Include { s7_0 }
diff --git a/doc/design/mydefs b/doc/design/mydefs
new file mode 100644
index 0000000..5473fbf
--- /dev/null
+++ b/doc/design/mydefs
@@ -0,0 +1,591 @@
+
+def @TeX { T{ /0.2fo E}X }
+
+def @Code
+ right x
+{ { Helvetica Base -1p } @Font lines @Break x
+}
+
+######################################################
+# #
+# Nodes and trees. #
+# #
+######################################################
+
+import @Fig
+def @FBox
+ named width { 0.6c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Box margin { margin }
+ { width @Wide height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @FEllipse
+ named width { 0.6c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Ellipse margin { margin }
+ { height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @FCircle
+ named width { 0.4c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Circle margin { margin }
+ { width @Wide height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @JoinFigures
+ left A
+ named linestyle { solid }
+ named linewidth { 0.5 pt }
+ named linecap { round }
+ named dashlength { 0.15 cm }
+ named arrow { noarrow }
+ named headstyle { open }
+ named headwidth { 0.05 cm }
+ named headlength { 0.15 cm }
+ right B
+{
+ @Line
+ from { {A"@CTR"} ++ {{A"@CTR"} @Angle {B"@CTR"} A"@CIRCUM"} }
+ to { {B"@CTR"} ++ {{B"@CTR"} @Angle {A"@CTR"} B"@CIRCUM"} }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ {}
+}
+
+import @Fig
+export @LeftSub @RightSub @FirstSub @NextSub @StubSub @Node
+def @Tree
+ named hmargin { 0.2c }
+ named vmargin { 0.3c }
+ named linestyle { solid }
+ named linewidth { 0.5 pt }
+ named linecap { round }
+ named dashlength { 0.15 cm }
+ named arrow { noarrow }
+ named headstyle { open }
+ named headwidth { 0.05 cm }
+ named headlength { 0.15 cm }
+ body x
+@Begin
+
+ def @LeftSub
+ precedence 90
+ associativity left
+ left root
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ { /vmargin {L::x} } |hmargin root |
+ L@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def fixroot
+ precedence 90
+ left root
+ {
+ |0.5rt root
+ }
+
+ def firstsub
+ precedence 90
+ associativity left
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ S::x &
+ S@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ macro @FirstSub { fixroot //vmargin |0.5rt firstsub }
+
+ def @NextSub
+ precedence 90
+ associativity left
+ left others
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ others &hmargin S::x &
+ S@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def @RightSub
+ precedence 90
+ associativity left
+ left root
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ root |hmargin { /vmargin {R::x} } |
+ R@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def @StubSub
+ precedence 90
+ associativity left
+ left root
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ {
+ root |
+ @Figure
+ shape { T@SW
+ T@W -- { 0.1 cm 0.7 cm }
+ T@E -- {-0.1 cm 0.7 cm }
+ T@SE
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ { @Null }
+ }
+
+ def @Node
+ # named mark {}
+ right root
+ {
+ T:: root
+ # & T@W ++ { -0.2 cm 0.1 cm } @BaseOf mark
+ }
+
+ @OneCol @OneRow x
+
+@End @Tree
+
+
+def @ShowMarks
+ named linewidth { 0.015 cm }
+ named linestyle { dashed }
+ named dashlength { 0.15 cm }
+ named paint { lightgrey }
+ named marks { both } # none, horizontal, vertical, or both
+ right x
+{
+ @Fig
+ { @Box margin { 0c } linewidth { linewidth } paint { paint }
+ { @Figure
+ shape {
+ marks @Case {
+ { horizontal both } @Yield
+ { -0.3 cm ymark {xsize ymark} ++ {0.3 cm 0} }
+ else @Yield {}
+ }
+ marks @Case {
+ both @Yield []
+ else @Yield {}
+ }
+ marks @Case {
+ { vertical both } @Yield
+ { xmark -0.3 cm {xmark ysize} ++ {0 0.3 cm} }
+ else @Yield {}
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+ }
+}
+
+ import @Fig
+ def @DagBox
+ named top {}
+ named mid {}
+ named base {}
+ {
+ @OneRow {
+ TOP:: @FBox top
+ // MID:: @FBox mid
+ // BASE:: @FBox base
+ }
+ }
+
+ import @Fig
+ def @BlackDot
+ named diameter { 0.07c }
+ {
+ @Circle
+ margin { 0c }
+ paint { black }
+ { diameter @Wide diameter @High {}
+ }
+ }
+
+ import @Fig
+ def @TVShape # television shape enclosing points ne, nw, se, sw
+ named nw {}
+ named ne {}
+ named sw {}
+ named se {}
+ named delta { 0.5 cm }
+ {
+ @Figure
+ shape {
+ { {nw @Min sw @Min ne @Min se} -- { delta 0 } } @Label BL
+ { {nw @Max sw @Max ne @Max se} ++ { delta 0 } } @Label TR
+ BL ++ { 0 BL @YDistance TR } @Label TL
+ BL ++ { BL @XDistance TR 0 } @Label BR
+ BL
+ BR [ BR ++ {0 delta} ]
+ BR ++ {delta delta}
+ TR ++ {delta -delta} [ TR -- {0 delta} ]
+ TR
+ TL [ TL -- {0 delta} ]
+ TL -- {delta delta}
+ BL ++ {-delta delta} [ BL ++ {0 delta} ]
+ BL
+ }
+ {}
+ }
+
+ import @Fig
+ def @FunnyArrow
+ named from {}
+ named to {}
+ named arrow { forward }
+ {
+ @Figure
+ shape {from from ++ {0 from @YDistance to} to}
+ arrow { arrow }
+ {}
+ }
+
+ def "->" { {Symbol Base} @Font "\256" } #174 decimal
+ def "=>" { {Symbol Base} @Font "\336" } #222 decimal
+ macro @JP { /0.5v }
+
+ ###################################################
+ # #
+ # Lout keywords. #
+ # #
+ ###################################################
+
+ def @@Begin { @Code "@Begin" }
+ def @@Break { @Code "@Break" }
+ def @@Case { @Code "@Case" }
+ def @@Database { @Code "@Database" }
+ def @@End { @Code "@End" }
+ def @@Font { @Code "@Font" }
+ def @@Galley { @Code "@Galley" }
+ def @@Graphic { @Code "@Graphic" }
+ def @@HExpand { @Code "@HExpand" }
+ def @@HScale { @Code "@HScale" }
+ def @@High { @Code "@High" }
+ def @@Include { @Code "@Include" }
+ def @@Key { @Code "@Key" }
+ def @@LClos { @Code "@LClos" }
+ def @@LEnv { @Code "@LEnv" }
+ def @@LInput { @Code "@LInput" }
+ def @@Moment { @Code "@Moment" }
+ def @@Next { @Code "@Next" }
+ def @@Null { @Code "@Null" }
+ def @@OneCol { @Code "@OneCol" }
+ def @@OneRow { @Code "@OneRow" }
+ def @@Open { @Code "@Open" }
+ def @@Prepend { @Code "@Prepend" }
+ def @@Rotate { @Code "@Rotate" }
+ def @@Space { @Code "@Space" }
+ def @@SysDatabase { @Code "@SysDatabase" }
+ def @@SysInclude { @Code "@SysInclude" }
+ def @@SysPrepend { @Code "@SysPrepend" }
+ def @@Tag { @Code "@Tag" }
+ def @@Tagged { @Code "@Tagged" }
+ def @@Use { @Code "@Use" }
+ def @@VExpand { @Code "@VExpand" }
+ def @@VScale { @Code "@VScale" }
+ def @@Yield { @Code "@Yield" }
+ def @@Wide { @Code "@Wide" }
+
+
+ ###################################################
+ # #
+ # Miscellaneous, mostly graphical definitions. #
+ # #
+ ###################################################
+
+ def @Leaders
+ { .. @Leaders
+ }
+
+ def @HLine {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto xsize 0 lineto stroke }
+ @Graphic {}
+ }
+ PDF @Yield {
+ { 0 0 m __xsize 0 l S }
+ @Graphic {}
+ }
+ }
+ }
+
+ def @VDashLine
+ right length
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ length @High
+ { 0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke }
+ @Graphic {}
+ }
+ PDF @Yield {
+ length @High
+ { [ __mul(3, __pt) ] 0 d 0 0 m 0 __ysize l stroke }
+ @Graphic {}
+ }
+ }
+ }
+
+ def @LBox
+ right offset
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @OneCol @OneRow
+ {
+ { //0.2c
+ 0.6c @High 1.2c @Wide
+ { 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto closepath
+ gsave 0.9 setgray fill grestore stroke }
+ @Graphic {}
+ }
+ ||offset @VDashLine 1c
+ }
+ }
+ PDF @Yield {
+ @OneCol @OneRow
+ {
+ { //0.2c
+ 0.6c @High 1.2c @Wide
+ { 0 0 m __xsize 0 l
+ __xsize __ysize l 0 __ysize l h
+ q 0.9 g f Q S }
+ @Graphic {}
+ }
+ ||offset @VDashLine 1c
+ }
+ }
+ }
+ }
+
+ def @Arrow
+ right length
+ { @OneCol @OneRow
+ {
+ 30d @Rotate {0.12c @Wide @HLine}
+ //
+ length @Wide @HLine
+ //
+ "-30d" @Rotate {0.12c @Wide @HLine}
+ }
+ }
+
+ def @DoubleArrow
+ right length
+ { @OneCol @OneRow
+ {
+ & 180d @Rotate @Arrow length
+ |0io @Arrow length
+ }
+ }
+
+ def @Put
+ left coord
+ right x
+ { @OneCol @OneRow
+ { coord / | @OneCol @OneRow x
+ }
+ }
+
+ macro @At { //0io }
+
+
+ ###################################################
+ # #
+ # Interpolated example documents. #
+ # #
+ ###################################################
+
+ def @LittleEndRunPlace { @Galley }
+ def @LittleEndRun
+ force into { @LittleEndRunPlace&&preceding }
+ {}
+
+ def @LittleTextPlace { @Galley }
+ def @LittleText into { @LittleTextPlace&&preceding }
+ right x
+ { x
+ }
+
+ def @LittleFootPlace { @Galley }
+ def @LittleFootNote into { @LittleFootPlace&&following }
+ right x
+ { x
+ }
+
+ def @LittlePageColumn
+ right x
+ {
+ 9px @Break 8p @Font
+ 2.8c @Wide x
+ }
+
+ def @LittlePage
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { 0 0 moveto xsize 0 lineto xsize ysize lineto
+ 0 ysize lineto closepath stroke } @Graphic
+ { //0.3c ||0.3c
+ 9px @Break 8p @Font
+ 2.8c @Wide 3.8c @High x
+ ||0.3c //0.3c
+ }
+ }
+ PDF @Yield {
+ @HContract @VContract
+ { 0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l s } @Graphic
+ { //0.3c ||0.3c
+ 9px @Break 8p @Font
+ 2.8c @Wide 3.8c @High x
+ ||0.3c //0.3c
+ }
+ }
+ }
+ }
+
+ def @LittleFootSect
+ { 1c @Wide @HLine
+ //0.3v @LittleFootPlace ||0.5c
+ }
+
+ def @LittlePageList
+ right @PageNum
+ {
+ @LittlePage { # |0.5rt @PageNum //0.8v
+ //0.3v @LittleTextPlace
+ //1rt @LittleFootSect
+ }
+ //
+ @LittlePageList @Next @PageNum
+ }
+
+ def @LittleDocument
+ { @LittlePage
+ { @LittleTextPlace
+ //1rt @LittleFootSect
+ }
+ // @LittlePageList 2
+ // @LittleEndRunPlace
+ }
+
+ def @Strange
+ named @Format right @Val { [@Val] }
+ right x
+ { @Format x
+ }
diff --git a/doc/design/outfile.ps b/doc/design/outfile.ps
new file mode 100644
index 0000000..3f7525a
--- /dev/null
+++ b/doc/design/outfile.ps
@@ -0,0 +1,11727 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.17 (September 1999)
+%%CreationDate: Fri Sep 17 11:56:58 1999
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%DocumentMedia: Plain 595 842 0 white ()
+%%DocumentSuppliedResources: (atend)
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 842
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset LoutStartUp
+/m { 3 1 roll moveto show } bind def
+/s { exch currentpoint exch pop moveto show } bind def
+/k { exch neg 0 rmoveto show } bind def
+/ul { gsave setlinewidth dup 3 1 roll
+ moveto lineto stroke grestore } bind def
+/in { 1440 mul } def
+/cm { 567 mul } def
+/pt { 20 mul } def
+/em { 120 mul } def
+/sp { louts mul } def
+/vs { loutv mul } def
+/ft { loutf mul } def
+/dg { } def
+
+/LoutGraphic {
+ /louts exch def
+ /loutv exch def
+ /loutf exch def
+ /ymark exch def
+ /xmark exch def
+ /ysize exch def
+ /xsize exch def
+} def
+
+/LoutGr2 { gsave translate LoutGraphic gsave } def
+
+/LoutFont
+{ findfont exch scalefont setfont
+} bind def
+
+/LoutRecode {
+ { findfont dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding exch def
+ currentdict end definefont pop
+ }
+ stopped pop
+} bind def
+
+/BeginEPSF {
+ /LoutEPSFState save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage { } def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash newpath
+ /languagelevel where
+ { pop languagelevel
+ 1 ne
+ { false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+
+/EndEPSF {
+ count op_count sub { pop } repeat
+ countdictstack dict_count sub { end } repeat
+ LoutEPSFState restore
+} bind def
+%%EndResource
+
+%%BeginResource encoding vec2
+/vec2 [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/quoteleft /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/quotesinglbase /quotedblbase /ellipsis /OE /oe /quotedblleft /quotedblright /fi
+/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
+/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
+%%EndResource
+
+%%BeginResource: procset LoutTabPrependGraphic
+% @PrependGraphic file /usr/staff/jeff/lout.lib/include/tabf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tab %
+% %
+% To assist in avoiding name clashes, the names %
+% of all these symbols begin with "ltab". %
+% %
+% Jeffrey H. Kingston %
+% 24 September 1991 %
+% 22 December 1992 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% linewidth ltabhs -
+% horizontal single line
+/ltabhs
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhsp -
+% horizontal single line with projecting ends
+/ltabhsp
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 2 setlinecap stroke
+} def
+
+% linewidth ltabhd -
+% horizontal double line
+/ltabhd
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto xsize exch 3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdb -
+% horizontal double line below mark
+/ltabhdb
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto xsize exch -3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdnw -
+% horizontal double line with northwest corner
+/ltabhdnw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch 3 mul moveto
+ -3 mul exch 3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdne -
+% horizontal double line with northeast corner
+/ltabhdne
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto
+ 3 mul xsize add exch 3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdsw -
+% horizontal double line with southwest corner
+/ltabhdsw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch -3 mul moveto
+ -3 mul exch -3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdse -
+% horizontal double line with southeast corner
+/ltabhdse
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto
+ 3 mul xsize add exch -3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabvs -
+% vertical single line
+/ltabvs
+{ 0 0 moveto 0 ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvd -
+% vertical double line
+/ltabvd
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ -3 mul 0 moveto -3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvdr -
+% vertical double line to right of mark
+/ltabvdr
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ 3 mul 0 moveto 3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /usr/staff/jeff/lout.lib/include/figf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) January 1992 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "lfig". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lfigdict exch known
+ { lfigdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% concat strings: <string> <string> lfigconcat <string>
+% must be defined outside lfigdict since used in lfigpromotelabels
+/lfigconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% <string> lfigdebugprint -
+% must be defined outside lfigdict since used in arbitrary places
+% /lfigdebugprint
+% { print
+% (; operand stack:\n) print
+% count copy
+% count 2 idiv
+% { ==
+% (\n) print
+% } repeat
+% (\n) print
+% } def
+
+/lfigdict 120 dict def
+lfigdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - lfigpi <num>
+/lfigpi 3.14159 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% maximum of two numbers: <num> <num> lfigmax <num>
+/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> lfigmin <num>
+/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> lfigpadd <point>
+/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> lfigpsub <point>
+/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> lfigpmax <point>
+/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+
+% min two points: <point> <point> lfigpmin <point>
+/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+
+% scalar multiplication: <point> <num> lfigpmul <point>
+/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> lfigatangle <point>
+/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+
+% angle from one point to another: <point> <point> lfigangle <angle>
+/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> lfigdistance <length>
+/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+
+% difference in x coords: <point> <point> lfigxdistance <length>
+/lfigxdistance { pop 3 1 roll pop sub } def
+
+%difference in y coords: <point> <point> lfigydistance <length>
+/lfigydistance { 3 1 roll pop sub exch pop } def
+
+% stroke a solid line: <length> <dashlength> lfigsolid -
+/lfigsolid
+{ pop pop [] 0 setdash stroke
+} def
+
+% stroke a lfigdashed line: <length> <dashlength> lfigdashed -
+/lfigdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed -
+/lfigcdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> lfigdotted -
+/lfigdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a noline line: <length> <dashlength> lfignoline -
+/lfignoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - lfigwhite - (etc.)
+/lfignopaint { } def
+/lfignochange { fill } def
+/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def
+/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% line caps (and joins, not currently used)
+/lfigbutt 0 def
+/lfiground 1 def
+/lfigprojecting 2 def
+/lfigmiter 0 def
+/lfigbevel 2 def
+
+% shape and labels of the @Box symbol
+/lfigbox
+{
+ 0 0 /SW lfigpointdef
+ xsize 0 /SE lfigpointdef
+ xsize ysize /NE lfigpointdef
+ 0 ysize /NW lfigpointdef
+ SE 0.5 lfigpmul /S lfigpointdef
+ NW 0.5 lfigpmul /W lfigpointdef
+ W SE lfigpadd /E lfigpointdef
+ S NW lfigpadd /N lfigpointdef
+ NE 0.5 lfigpmul /CTR lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+/lfigcurvebox
+{
+
+ xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef
+ xsize 0.5 mul 0 /S lfigpointdef
+ xsize ysize 0.5 mul /E lfigpointdef
+ xsize 0.5 mul ysize /N lfigpointdef
+ 0 ysize 0.5 mul /W lfigpointdef
+
+ xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef
+ xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef
+ xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef
+ xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef
+
+ [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+
+ xmark 0
+ xsize xmark sub 0
+ [ xsize xmark sub xmark ]
+ xsize xmark
+ xsize ysize xmark sub
+ [ xsize xmark sub ysize xmark sub ]
+ xsize xmark sub ysize
+ xmark ysize
+ [ xmark ysize xmark sub ]
+ 0 ysize xmark sub
+ 0 xmark
+ [ xmark xmark ]
+ xmark 0
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with lfigbox
+/lfigshadow
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto closepath fill
+} def
+
+% shape and labels of the @Square symbol
+/lfigsquare
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+ NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+ SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+ SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/lfigdiamond
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/lfigellipse
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+ 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+ xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+ 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/lfigcircle
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+ CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+ CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+ CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+ CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @HLine and @HArrow symbols
+/lfighline
+{
+ 0 ymark lfigprevious /FROM lfigpointdef
+ xsize ymark lfigprevious /TO lfigpointdef
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/lfigvline
+{
+ xmark ysize lfigprevious /FROM lfigpointdef
+ xmark 0 lfigprevious /TO lfigpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> figpolygon <point> ... <point>
+/lfigpolygon
+{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ 90 sub CTR 2 copy lfigmax 5 3 roll
+ [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch lfigconcat cvn
+ 6 copy pop pop lfigatangle 2 copy 10 2 roll
+ 3 2 roll lfigpointdef
+ dup 3 1 roll add exch
+ } for
+ pop lfigatangle
+} def
+
+% next array element: <array> <index> lfiggetnext <array> <index> <any> true
+% or <array> <index> false
+/lfiggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> lfigisnumbertype <any> <bool>
+/lfigisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> lfigisarraytype <any> <bool>
+/lfigisarraytype { dup type /arraytype eq } def
+
+% get next item: <array> <index> lfiggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/lfiggetnextitem
+{ lfiggetnext
+ { lfigisarraytype
+ { 1
+ }
+ { lfigisnumbertype
+ { 3 1 roll
+ lfiggetnext
+ { lfigisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/lfigsetarc
+{
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll lfigpsub 6 2 roll lfigpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+
+ y1s y2s eq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s eq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ { /LMax da sqrt db sqrt lfigmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul lfigangle
+ 0 0 x2 scalex mul y2 scaley mul lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul LMax mul 180 div
+ }
+ { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 0 0 x1 y1 lfigdistance 0 gt and
+ { 0 0
+ 0 0 x1 y1 lfigdistance
+ 0 0 x1 y1 lfigangle
+ 0 0 x2 y2 lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ }
+ { x2 y2 lineto pop
+ x2 y2 x1 y1 lfigangle
+ x1 y1 x2 y2 lfigangle
+ x1 y1 x2 y2 lfigdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+} def
+
+% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+/lfigsetcurve
+{ 8 copy curveto pop pop
+ lfigangle
+ 5 1 roll
+ 4 2 roll lfigangle
+ exch
+ 0
+} def
+
+% lfigpaintpath: paint a path of the given shape
+% /paint [ shape ] lfigpaintpath -
+/lfigpaintpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { lfiggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ lfigsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop cvx exec
+ end
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>]
+/lfigdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ lfiggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr lfigsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev lfigangle dup 180 sub
+ xprev yprev xcurr ycurr lfigdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+% lfigdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+/lfigdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave lfigpaintpath grestore lfigdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/lfigopen 0.0 def
+/lfighalfopen 0.5 def
+/lfigclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/lfignoarrow { pop pop pop pop pop pop pop pop } def
+/lfigforward { 7 -1 roll lfigdoarrow pop } def
+/lfigback { 8 -2 roll pop lfigdoarrow } def
+/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+
+% lfigprevious: return previous point on path
+/lfigprevious
+{ lfigisnumbertype
+ { 2 copy }
+ { lfigisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% label a point in 2nd top dictionary: <point> /name lfigpointdef -
+/lfigpointdef
+{
+ % (Entering lfigpointdef) lfigdebugprint
+ [ 4 2 roll transform
+ /itransform cvx ] cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigpointdef) lfigdebugprint
+} def
+
+% promote labels from second top to third top dictionary
+% <string> lfigpromotelabels -
+/lfigpromotelabels
+{
+ % (Entering lfigpromotelabels) lfigdebugprint
+ currentdict end exch currentdict end
+ { exch 20 string cvs 2 index
+ (@) lfigconcat exch lfigconcat cvn exch def
+ } forall pop begin
+ % (Leaving lfigpromotelabels) lfigdebugprint
+} def
+
+% show labels (except CIRCUM): - lfigshowlabels -
+/lfigshowlabels
+{
+ % (Entering lfigshowlabels) lfigdebugprint
+ currentdict end
+ currentdict
+ { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ { pop cvx exec 2 copy
+ newpath 1.5 pt 0 360 arc
+ 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+ }
+ ifelse
+ } forall
+ begin
+ % (Leaving lfigshowlabels) lfigdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle>
+/lfigfixangle
+{
+ % (Entering lfigfixangle) lfigdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving lfigfixangle) lfigdebugprint
+} def
+
+% find point on circumference of box: alpha a b lfigboxcircum x y
+/lfigboxcircum
+{
+ % (Entering lfigboxcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ 0 0 a b lfigangle /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigboxcircum) lfigdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+% or x2 1
+% or 0
+/lfigqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> lfigquadrant <0-3>
+/lfigquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+/lfigcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub lfigangle def
+ /theta2 0 0 a xmk sub b lfigangle def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 lfigpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ lfigpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+/lfigcurveboxcircum
+{
+ % (Entering lfigcurveboxcircum) lfigdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha lfigquadrant def
+ quad 0 eq
+ { alpha a b xmk lfigcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk lfigcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk lfigcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk lfigcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcurveboxcircum) lfigdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b lfigdiamondcircum x y
+/lfigdiamondcircum
+{
+ % (Entering lfigdiamondcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigdiamondcircum) lfigdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b lfigellipsecircum x y
+/lfigellipsecircum
+{
+ % (Entering lfigellipsecircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigellipsecircum) lfigdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y
+/lfiglineintersect
+{
+ % (Entering lfiglineintersect) lfigdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving lfiglineintersect) lfigdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta lfigpolycircum x y
+/lfigpolycircum
+{
+ % (Entering lfigpolycircum) lfigdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub lfigfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ lfiglineintersect radius lfigpmul
+
+ end
+ % (Leaving lfigpolycircum) lfigdebugprint
+} def
+
+% find point of intersection of a point and a circle
+% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/lfigcircleintersect
+{
+ % (Entering lfigcircleintersect) lfigdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcircleintersect) lfigdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> lfigcircumdef -
+/lfigcircumdef
+{ % (Entering lfigcircumdef) lfigdebugprint
+ /CIRCUM exch cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigcircumdef) lfigdebugprint
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutBasicSetup
+% @PrependGraphic file /usr/staff/jeff/lout.lib/include/bsf.lpg
+
+% width height linethickness louteuro -
+% draw a Euro symbol of this width and height with this line thickness
+% Author: Jeff Kingston, based on code from Andrew Beardsley
+/louteuro {
+ 20 dict begin
+ /eurothick exch def
+ /euroheight exch def
+ /eurowidth exch def
+ /eurostrokewidth euroheight 0.8 mul def
+ /eurostep eurothick 60 cos mul 60 sin div def
+ /eurotheta 40 def
+
+ % llx lly width thickness louteurobox -
+ % draw angled box starting at (llx, lly) with given width and thickness
+ /louteurobox
+ {
+ /euroboxthick exch def
+ /euroboxwidth exch def
+ newpath moveto euroboxwidth 0 rlineto
+ eurostep euroboxthick rlineto
+ euroboxwidth neg 0 rlineto closepath fill
+ } def
+
+ % lower cross stroke
+ 0 euroheight 2 div eurothick 1.5 mul sub
+ eurostrokewidth eurothick louteurobox
+
+ % upper cross stroke
+ 0 euroheight 2 div eurothick 0.5 mul add
+ eurostrokewidth eurostep 2 mul add eurothick louteurobox
+
+ % circular part
+ /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+ /eurovctr euroheight 2 div def
+ newpath
+ eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+ eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+ closepath fill
+ end
+} def
+
+% path for @FullWidthRule symbol
+/LoutRule
+{ 0 0 moveto xsize 0 lineto
+} def
+
+% path for @Box symbol
+/LoutBox
+{ 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto
+ closepath
+} def
+
+% path for @CurveBox symbol
+/LoutCurveBox
+{ xmark 0 moveto
+ xsize xmark sub xmark xmark 270 360 arc
+ xsize xmark sub ysize xmark sub xmark 0 90 arc
+ xmark ysize xmark sub xmark 90 180 arc
+ xmark xmark xmark 180 270 arc
+ closepath
+} def
+
+% path for @ShadowBox symbol
+/LoutShadowBox
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto
+ closepath
+} def
+
+% set up dictionary containing margin note data: parity LoutMargSet -
+/LoutMargSet
+{ /LoutMargDict 12 dict def
+ LoutMargDict begin
+ /parity exch def
+ /matr matrix currentmatrix def
+ /rightx xsize def
+ /lefty ysize def % highest allowable point for top of next left note
+ /righty ysize def % highest allowable point for top of next right note
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ /min { 2 copy lt { pop } { exch pop } ifelse } def
+ end
+} def
+
+%translate coordinate system for marginal notes: type LoutMargShift -
+% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+/LoutMargShift
+{ LoutMargDict begin
+
+ % y coordinate of top of note, in margin coords, before vertical adjust
+ 0 ysize transform matr itransform exch pop
+
+ % decide whether left or right margin based on type and parity
+ exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+ {
+ % left margin: adjust top of note downwards if overlaps previous note
+ lefty min
+
+ % bottom of note is new lefty position and also translate position
+ ysize sub dup /lefty exch def
+
+ % want right edge of note at coordinate zero
+ xsize neg exch
+ }
+ {
+ % right margin: adjust top of note downwards if overlaps previous note
+ righty min
+
+ % bottom of note is new righty position and also translate position
+ ysize sub dup /righty exch def
+
+ % want left edge of note at coordinate rightx
+ rightx exch
+ } ifelse
+
+ % stack now contains coord of bottom left corner in margin coordinates
+ matr setmatrix translate
+ end
+} def
+
+% create LoutPageDict with left, right, foot, top for @Place symbol users
+/LoutPageSet
+{
+ /LoutPageDict 5 dict def
+ LoutPageDict begin
+ /matr matrix currentmatrix def
+ /left 0 def
+ /right xsize def
+ /foot 0 def
+ /top ysize def
+ end
+
+} def
+
+%%EndResource
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt82 vec2 /Times-Roman LoutRecode
+/fnt82 { /Times-Romanfnt82 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%EndSetup
+
+%%Page: i 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt84 2897 12401(The)m 3352(Design)s 4099(and)s 4540(Implementation)s
+4239 11998(of)m 4511(the)s 2589 11595(Lout)m 3141(Document)s 4250(F)s 6(ormatting)k
+5468(Language)s 240 fnt83 3630 11097(J)m 6(ef)k 4(fr)k 8(e)k 7(y)k
+4310(H.)s 4577(Kingston)s 240 fnt82 2551 10596(Basser)m 3248(Department)s
+4436(of)s 4707(Computer)s 5724(Science,)s 3007 10308(The)m 3435(Uni)s 6(v)k 3(ersity)k
+4489(of)s 4760(Sydne)s 3(y)k 5530(2006,)s 4095 10020(Australia)m
+3739 9568(27)m 4027(January)s 15(,)k 4863(1993)s 240 fnt84
+3901 8775(SUMMAR)m 8(Y)k 240 fnt82 480 8320(Lout)m 992(is)s
+1202(a)s 1367(high-)s 1861(le)s 6(v)k 3(el)k
+2371(language)s 3291(for)s 3628(document)s 4632(formatting,)s 5746(whose)s
+6414(ease)s 6881(of)s 7151(use)s 7526(has)s 7895(permit)s
+8518(-)s 480 8032(ted)m 839(an)s 1131(unprecedented)s 2593(number)s
+3394(of)s 3674(adv)s 6(anced)k 4639(features)s 5454(to)s
+5703(be)s 5994(added)s 6633(quickly)s 7414(and)s 7828(reliably)s 15(.)k
+480 7744(This)m 942(paper)s 1518(charts)s 2125(the)s 2458(e)s 6(v)k 4(olution)k
+3395(of)s 3651(the)s 3985(design)s 4652(and)s 5042(implementation)s
+6584(of)s 6841(Lout)s 7338(from)s 7847(concep)s 8518(-)s
+480 7456(tion)m 913(in)s 1161(mid-)s 1601(1984)s 2139(to)s
+2383(public)s 3038(release)s 3761(in)s 4008(October)s 4843(1991.)s
+5491(It)s 5701(includes)s 6553(e)s 3(xtensi)k 6(v)k 3(e)k
+7505(discussions)s 480 7168(of)m 751(remaining)s 1773(problems)s 2714(and)s
+3118(possible)s 3958(solutions.)s 240 fnt84 480 6664(K)m 6(eyw)k 2(ords)k
+240 fnt82 1623 6665(document)m 2627(formatting)s 3688(typesetting)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 1 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt84 2897 12401(The)m 3352(Design)s 4099(and)s 4540(Implementation)s
+4239 11998(of)m 4511(the)s 2589 11595(Lout)m 3141(Document)s 4250(F)s 6(ormatting)k
+5468(Language)s 240 fnt83 3630 11097(J)m 6(ef)k 4(fr)k 8(e)k 7(y)k
+4310(H.)s 4577(Kingston)s 240 fnt82 2551 10596(Basser)m 3248(Department)s
+4436(of)s 4707(Computer)s 5724(Science,)s 3007 10308(The)m 3435(Uni)s 6(v)k 3(ersity)k
+4489(of)s 4760(Sydne)s 3(y)k 5530(2006,)s 4095 10020(Australia)m
+3739 9568(27)m 4027(January)s 15(,)k 4863(1993)s 240 fnt84
+0 8926(1.)m 291(Intr)s 4(oduction)k 240 fnt82 480 8495(Lout)m
+985([1,)s 1284(2])s 1515(is)s 1718(a)s 1877(high-le)s 6(v)k 3(el)k
+2885(language)s 3798(for)s 4129(document)s 5126(formatting,)s 6234(designed)s
+7136(and)s 7533(implemented)s 8832(by)s 0 8207(the)m 341(author)s 13(.)k
+1096(The)s 1517(implementation,)s 3117(kno)s 6(wn)k 3814(as)s
+4057(Basser)s 4747(Lout,)s 5299(is)s 5502(a)s 5661(fully)s
+6159(operational)s 7282(production)s 8368(v)s 3(ersion)k 0 7919(written)m
+736(in)s 983(C)s 1198(for)s 1540(the)s 1891(Unix)s
+2429(operating)s 3389(system,)s 153 fnt82 4100 8008(1)m 240 fnt82
+4223 7919(which)m 4869(translates)s 5824(Lout)s 6340(source)s 7023(code)s
+7535(into)s 7964(PostScript,)s 153 fnt82 8993 8008(2)m 240 fnt82
+0 7631(a)m 201(de)s 6(vice-independent)k 2164(graphics)s 3061(rendering)s
+4066(language)s 5021(accepted)s 5951(by)s 6281(man)s 3(y)k
+6900(high-resolution)s 8454(output)s 0 7343(de)m 6(vices,)k 833(including)s
+1805(most)s 2346(laser)s 2871(printers.)s 3779(Basser)s 4492(Lout)s
+5019(is)s 5244(a)s 4(v)k 6(ailable)k 6168(free)s
+6609(of)s 6895(char)s 4(ge)k 7600([3].)s 8057(It)s
+8278(includes)s 0 7055(installation)m 1118(instructions,)s 2339(C)s 2550(source,)s
+3281(se)s 6(v)k 3(en)k 3873(standard)s 4740(packages,)s
+5723(and)s 6127(complete)s 7058(documentation)s 8536(in)s 8778(the)s
+0 6767(form)m 524(of)s 795(six)s 1129(technical)s 2046(reports)s
+2760(and)s 3164(a)s 3330(manual)s 4089(page.)s 480 6393(The)m
+900(Lout)s 1404(project)s 2118(arose)s 2670(out)s 3027(of)s
+3290(the)s 3629(author')s 13(s)k 4442(desire)s 5060(to)s
+5290(bring)s 5840(to)s 6070(document)s 7066(formatting)s 8118(languages)s
+0 6105(the)m 343(ele)s 3(g)k 1(ance)k 1225(of)s
+1491(e)s 3(xpression)k 2562(found)s 3174(in)s 3411(programming)s
+4761(languages)s 5763(lik)s 2(e)k 6170(Algol-)s 6783(60)s
+7072(and)s 7471(P)s 3(ascal.)k 8236(This)s 8706(em)s
+8998(-)s 0 5817(phasis)m 638(on)s 924(e)s 3(xpressi)k 6(v)k 3(eness)k
+2373(has)s 2731(produced)s 3669(an)s 3941(order)s 4493(of)s
+4753(magnitude)s 5808(reduction)s 6757(in)s 6988(the)s 7325(cost)s
+7759(of)s 8018(de)s 6(v)k 3(eloping)k 0 5529(document)m
+998(formatting)s 2053(applications.)s 3366(F)s 3(or)k 3748(e)s 3(xample,)k
+4656(an)s 4933(equation)s 5807(formatting)s 6862(application,)s 8025(which)s
+8660(may)s 0 5241(be)m 282(dif\207cult)s 1098(or)s 1357(impossible)s
+2449(to)s 2688(add)s 3092(to)s 3331(other)s 3882(systems,)s
+4746(can)s 5135(be)s 5417(written)s 6150(in)s 6393(Lout)s
+6905(in)s 7148(a)s 7314(fe)s 6(w)k 7720(days.)s
+480 4867(When)m 1099(e)s 3(xpert)k 1742(users)s 2274(can)s
+2652(implement)s 3724(such)s 4209(applications)s 5405(quickly)s 15(,)k
+6204(non-)s 6632(e)s 3(xperts)k 7360(bene\207t.)s 8164(Although)s
+0 4579(Lout)m 509(itself)s 1053(pro)s 3(vides)k 1922(only)s
+2398(a)s 2560(small)s 3129(k)s 2(ernel)k 3775(of)s
+4042(carefully)s 4941(chosen)s 5659(primiti)s 6(v)k 3(es,)k
+6721(packages)s 7646(written)s 8375(in)s 8614(Lout)s 0 4291(and)m
+399(distrib)s 4(uted)k 1470(with)s 1946(Basser)s 2638(Lout)s
+3145(pro)s 3(vide)k 3923(an)s 4201(unprecedented)s 5649(array)s
+6187(of)s 6453(adv)s 6(anced)k 7404(features)s 8204(in)s
+8442(a)s 8602(form)s 0 4003(accessible)m 1035(to)s 1286(non-)s
+1714(e)s 3(xpert)k 2380(users.)s 3047(The)s 3487(features)s
+4305(include)s 5076(rotation)s 5888(and)s 6304(scaling,)s 7100(fonts,)s
+7697(paragraph)s 8722(and)s 0 3715(page)m 500(breaking,)s 1436(displays)s
+2263(and)s 2659(lists,)s 3141(\210oating)s 3917(\207gures)s 4611(and)s
+5007(tables,)s 5662(footnotes,)s 6651(chapters)s 7490(and)s 7886(sections)s
+8698(\(au)s 8998(-)s 0 3427(tomatically)m 1128(numbered\),)s 2272(running)s
+3070(page)s 3579(headers)s 4361(and)s 4765(footers,)s 5536(odd-)s
+5964(e)s 6(v)k 3(en)k 6464(page)s 6973(layouts,)s
+7772(automatically)s 0 3139(generated)m 975(tables)s 1570(of)s 1829(contents,)s
+2720(sorted)s 3350(inde)s 3(x)k 3(es)k 4113(and)s
+4505(reference)s 5435(lists,)s 5914(bibliographic)s 7229(and)s 7621(other)s
+8159(databases)s 0 2851(\(including)m 1038(databases)s 2008(of)s 2281(formats)s
+3064(for)s 3405(printing)s 4217(references\),)s 5386(equations,)s 6412(tables,)s
+7079(diagrams,)s 8065(formatting)s 0 2563(of)m 271(P)s 3(ascal)k
+933(programs,)s 1943(and)s 2347(automatically)s 3701(maintained)s 4821(cross)s
+5363(references.)s 480 2189(This)m 1015(paper)s 1666(charts)s 2347(the)s
+2755(e)s 6(v)k 4(olution)k 3766(of)s 4097(Lout)s
+4669(from)s 5253(conception)s 6420(in)s 6723(mid-1984)s 7768(to)s
+8067(the)s 8475(public)s 0 1901(release)m 722(of)s 997(Basser)s
+1699(Lout)s 2215(in)s 2462(October)s 3297(1991.)s 3945(Lout)s
+4461(is)s 4676(or)s 4(g)k 1(anized)k 5676(around)s
+6403(four)s 6866(k)s 2(e)k 3(y)k 7265(concepts)s
+8157(\211)s 8342(objects,)s 0 1613(de\207nitions,)m 1131(g)s 1(alle)k 3(ys,)k
+1925(and)s 2343(cross)s 2899(references)s 3944(\211)s 4138(and)s
+4556(the)s 3(y)k 5033(were)s 5567(de)s 6(v)k 3(eloped)k
+6614(in)s 6871(the)s 7233(order)s 7811(listed,)s 8449(so)s
+8730(this)s 0 1325(paper)m 593(will)s 1022(treat)s 1508(each)s
+2006(in)s 2252(turn,)s 2747(discussing)s 3800(its)s 4079(design,)s
+4814(implementation,)s 6424(problems,)s 7424(and)s 7831(prospects)s 8788(for)s
+1134 0 0 0 240 288 60 0 574 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+122 fnt82 0 379(1)m 192 fnt82 58 309(Unix)m 485(is)s
+653(a)s 786(trademark)s 1609(of)s 1825(A)s 21(T&T)k
+2370(Bell)s 2733(Laboratories.)s 122 fnt82 0 112(2)m 192 fnt82
+67 42(PostScript)m 900(is)s 1068(a)s 1201(trademark)s 2024(of)s
+2240(Adobe)s 2796(Systems,)s 3519(Incorporated.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13844(-)m 4476(2)s 4650(-)s 0 13256(further)m 709(impro)s 3(v)k 3(ement.)k
+240 fnt84 0 12463(2.)m 291(Objects)s 240 fnt82 480 11987(The)m
+923(essence)s 1725(of)s 2011(an)s 3(y)k 2424(mo)s 3(v)k 3(e)k
+3021(to)s 3276(a)s 3457(higher)s 4144(le)s 6(v)k 3(el)k
+4669(is)s 4895(the)s 5258(introduction)s 6500(of)s 6786(some)s
+7363(abstraction)s 8484(which)s 0 11699(serv)m 3(es)k 639(to)s
+872(or)s 4(g)k 1(anize)k 1740(the)s 2082(lo)s 6(w-)k
+2503(le)s 6(v)k 3(el)k 3006(operations,)s 4103(resulting)s
+4986(in)s 5223(a)s 5383(more)s 5923(succinct)s 6760(e)s 3(xpression)k
+7831(of)s 8096(their)s 8586(com)s 8998(-)s 0 11411(mon)m
+475(combinations)s 1806(at)s 2030(the)s 2369(cost)s 2805(of)s
+3068(some)s 3620(loss)s 4034(of)s 4297(detailed)s 5102(control.)s
+5934(The)s 6354(early)s 6876(part)s 7298(of)s 7561(the)s
+7900(Lout)s 8403(project)s 0 11123(w)m 2(as)k 426(spent)s
+996(in)s 1245(the)s 1598(de)s 6(v)k 3(elopment)k
+2891(of)s 3167(such)s 3668(an)s 3957(abstraction)s 5067(for)s
+5411(the)s 5764(b)s 4(uilding)k 6616(blocks)s 7298(of)s
+7574(documents,)s 8724(one)s 0 10835(which)m 635(could)s 1217(e)s 3(xplain,)k
+2017(not)s 2375(just)s 2772(the)s 3113(simple)s 3798(phenomena)s
+4954(of)s 5217(w)s 2(ords,)k 5899(lines,)s 6450(and)s
+6846(paragraphs,)s 7994(b)s 4(ut)k 8348(also)s 8778(the)s
+0 10547(alignment)m 1016(of)s 1287(columns)s 2149(in)s 2392(tables,)s
+3056(and)s 3460(the)s 3808(comple)s 3(x)k 4684(nested)s
+5353(structures)s 6332(of)s 6603(equations.)s 240 fnt84 0 9898(2.1.)m
+471(The)s 926(genesis)s 1697(of)s 1969(the)s 2343(object)s
+3026(abstraction)s 240 fnt82 480 9421(When)m 1163(one)s 1620(e)s 3(xamines)k
+2626(pre)s 6(vious)k 3549(document)s 4608(formatting)s 5724(systems)s
+6587([4])s 6958(looking)s 7798(for)s 8191(ideas)s 8788(for)s
+0 9133(abstractions,)m 1245(as)s 1492(the)s 1837(author)s 2505(did)s
+2866(in)s 3106(1984,)s 3690(the)s 4035(Eqn)s 4475(formatting)s
+5533(language)s 6450([5])s 6764(stands)s 7410(out)s 7773(lik)s 2(e)k
+8182(a)s 8344(beacon.)s 0 8845(In)m 256(Eqn,)s 749(a)s
+915(mathematical)s 2256(formula)s 3072(such)s 3568(as)s 168 fnt78
+586 8390(2)m 240 fnt83 480 8330(x)m 240 fnt78 738 8322(+)m
+939(1)s gsave
+480 8274 translate
+240 fnt83 553 0 0 0 240 288 12 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+700 8046(4)m 240 fnt82 0 7535(is)m 210(produced)s
+1159(by)s 1453(typing)s 220 fnt35 480 7037({ x sup 2 + 1 } o)m 3(v)k 5(er 4)k
+240 fnt82 0 6541(in)m 261(the)s 627(input)s 1197(\207le;)s
+220 fnt35 1632 6538(sup)m 240 fnt82 2056 6541(and)m 220 fnt35
+2478 6538(o)m 3(v)k 5(er)k 240 fnt82 2975 6541(are)m
+3340(binary)s 4023(operators,)s 5037(and)s 5459(braces)s 6138(are)s
+6503(used)s 7018(for)s 7374(grouping.)s 8421(This)s 8916(is)s
+0 6253(document)m 1017(formatting)s 2091(at)s 2337(a)s 2516(v)s 3(ery)k
+3006(high)s 3502(le)s 6(v)k 3(el,)k 4077(close)s
+4638(to)s 4890(the)s 5252(language)s 6185(of)s 6469(mathematics)s
+7741(itself,)s 8337(with)s 8833(all)s 0 5965(reference)m 943(to)s
+1182(font)s 1627(changes)s 2449(and)s 2853(spacing)s 3637(suppressed.)s
+480 5591(Eqn)m 916(pro)s 3(vides)k 1780(a)s 1938(single)s
+2557(data)s 3008(type)s 3468(\(let)s 3837(us)s 4093(call)s
+4485(it)s 4669(the)s 240 fnt83 5009 5593(e)m 4(xpr)k 8(ession)k
+240 fnt82 6014 5591(\),)m 6192(b)s 4(uilt)k 6679(up)s
+6964(recursi)s 6(v)k 3(ely)k 8062(in)s 8297(conte)s 3(xt-)k
+0 5303(free)m 457(style:)s 1106(where)s 1778(one)s 2212(e)s 3(xpression)k
+3321(may)s 3819(appear)s 9(,)k 4586(an)s 3(y)k
+5015(e)s 3(xpression)k 6124(may)s 6622(appear)s 13(.)k
+7442(This)s 7950(approach)s 8916(is)s 0 5015(common)m 905(in)s
+1158(algebra)s 1931(and)s 2345(programming)s 3710(languages,)s 4785(where)s
+5435(its)s 5721(simplicity)s 6740(and)s 7154(e)s 3(xpressi)k 6(v)k 3(eness)k
+8625(ha)s 4(v)k 3(e)k 0 4727(long)m 478(been)s
+986(appreciated;)s 2198(b)s 4(ut)k 2559(Eqn)s 3001(w)s 2(as)k
+3421(the)s 3768(\207rst)s 4198(language)s 5117(to)s 5355(demonstrate)s
+6578(its)s 6853(utility)s 7476(in)s 7718(document)s 8720(for)s
+8998(-)s 0 4439(matting.)m 480 4065(Each)m 1015(e)s 3(xpression)k
+2092(is)s 2302(treated)s 3009(by)s 3304(Eqn)s 3747(as)s
+3997(a)s 4163(rectangle)s 5094(with)s 5577(a)s 240 fnt83
+5743 4067(horizontal)m 6787(axis)s 240 fnt82 7167 4065(,)m 7274(used)s
+7771(for)s 8110(alignment)s 0 3777(with)m 482(adjacent)s 1338(e)s 3(xpressions:)k
+553 519 0 288 240 288 60 480 2918 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+553 519 0 288 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+553 519 0 288 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+
+ ] lfigdopath
+pop pop
+grestore
+168 fnt78 106 404(2)m 240 fnt83 0 344(x)m 240 fnt78
+258 336(+)m 459(1)s gsave
+0 288 translate
+240 fnt83 553 0 0 0 240 288 12 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+220 60(4)m
+grestore
+
+grestore
+end end restore
+grestore
+0 2467(The)m 425(size)s
+848(and)s 1248(rendering)s 2213(of)s 2481(the)s 2825(e)s 3(xpression)k
+3898(on)s 4191(the)s 4536(printed)s 5267(page)s 5771(are)s
+6114(kno)s 6(wn)k 6815(only)s 7291(to)s 7526(the)s
+7870(implementa)s 8998(-)s 0 2179(tion,)m 481(ne)s 6(v)k 3(er)k
+1066(e)s 3(xplicitly)k 2022(calculated)s 3051(or)s 3313(accessed)s
+4209(by)s 4506(the)s 4857(user)s 13(.)k 5409(This)s
+5888(prohibition)s 7010(is)s 7223(crucial)s 7930(to)s 8172(the)s
+8523(main)s 8998(-)s 0 1891(tenance)m 785(of)s 1055(the)s
+1402(conte)s 3(xt-)k 2171(free)s 2596(property)s 3459(in)s
+3701(practice.)s 4619(In)s 4874(Lout,)s 5432(for)s 5769(e)s 3(xample,)k
+6682(equations,)s 7705(\207gures,)s 8462(tables,)s 0 1603(and)m 393(arbitrary)s
+1256(objects)s 1972(may)s 2427(be)s 2697(mix)s 3(ed)k
+3338(together)s 4169(freely)s 15(.)k 4863(This)s 5327(w)s 2(ould)k
+5970(be)s 6241(impossible)s 7321(if)s 7526(size)s 7941(information)s
+0 1315(w)m 2(as)k 421(hidden)s 1130(from)s 1654(the)s
+2002(implementation)s 3559(in)s 3802(user)s 4260(calculations.)s 480 941(The)m
+927(object)s 1591(abstraction)s 2715(of)s 3006(Lout)s 3537(is)s
+3767(a)s 3952(direct)s 4575(descendant)s 5717(of)s 6008(the)s
+6375(Eqn)s 6838(e)s 3(xpression.)k 8041(It)s 8266(emplo)s 2(ys)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4353 13844(-)m 4481(3)s 4645(-)s 0 13253(the)m 385(same)s
+969(conte)s 3(xt-free)k 2212(recursi)s 6(v)k 3(e)k
+3171(style)s 3715(of)s 4023(construction,)s 5350(and)s 5791(each)s
+6323(object)s 7004(is)s 7251(treated)s 7995(by)s 8326(Lout)s
+8876(as)s 0 12965(a)m 166(rectangle:)s 1701 453 567 198 240 288 60 480 12172 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+end end restore
+grestore
+0 11719(The)m 442(horizontal)s
+1481(axis,)s 1987(called)s 2630(a)s 240 fnt83 2810 11721(r)m 10(ow)k
+3244(mark)s 240 fnt82 3814 11719(in)m 4072(Lout,)s 4645(has)s
+5030(a)s 5210(v)s 3(ertical)k 5992(analogue)s 6926(called)s
+7569(a)s 240 fnt83 7749 11721(column)m 8523(mark)s 240 fnt82
+9019 11719(,)m 0 11431(creating)m 822(a)s 988(v)s 6(aluable)k
+1848(symmetry)s 2857(between)s 3711(horizontal)s 4735(and)s 5139(v)s 3(ertical.)k
+6014(Multiple)s 6893(column)s 7668(and)s 8072(ro)s 6(w)k
+8491(marks)s 0 11143(are)m 347(permitted:)s 1984 1189 0 1189 240 288 60 480 9614 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+680 453 0 453 240 288 60 0 736 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+680 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(A) lfigpromotelabels
+grestore
+737 453 0 453 240 288 60 1247 736 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+567 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(B) lfigpromotelabels
+grestore
+680 453 0 453 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+396 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(C) lfigpromotelabels
+grestore
+737 453 0 453 240 288 60 1247 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+737 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ 0.3 cm 0 A@W lfigpsub lfigprevious /FROM lfigpointdef
+B@W 1.6 cm 0 lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ 0.3 cm 0 C@W lfigpsub lfigprevious /FROM lfigpointdef
+D@W 1.6 cm 0 lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ A@NW 0 0.3 cm lfigpadd lfigprevious /FROM lfigpointdef
+0 0.3 cm C@SW lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ B@NW 0.3 cm 0.3 cm lfigpadd lfigprevious /FROM lfigpointdef
+D@SW 0.3 cm -0.3 cm lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 9163(so)m 266(that)s
+684(objects)s 1412(are)s 1759(able)s 2213(to)s 2452(represent)s
+3387(tables.)s 480 8789(This)m 946(abstraction)s 2041(has)s 2401(some)s
+2952(limitations,)s 4069(the)s 4407(most)s 4922(ob)s 3(vious)k
+5719(being)s 6293(the)s 6631(restriction)s 7645(of)s 7906(size)s
+8322(calcula)s 8998(-)s 0 8501(tions)m 507(to)s 736(rectangular)s
+1860(bounding)s 2809(box)s 3(es.)k 3519(Non-)s 4000(rectangular)s
+5124(and)s 5518(disconnected)s 6815(shapes)s 7494(arise)s 7990(naturally)s
+8883(in)s 0 8213(\207gures)m 704(and)s 1111(in)s 1356(the)s
+1707(characters)s 2727(of)s 3001(fonts;)s 3594(the)s 3944(e)s 3(xtension)k
+4918(to)s 5159(them)s 5700(is)s 5912(conceptually)s 7191(straightforw)s 2(ard)k
+8722(and)s 0 7925(might)m 615(help)s 1076(to)s 1311(e)s 3(xplain)k
+2066(some)s 2623(\207ne)s 3034(points)s 3667(of)s 3934(layout)s
+4588(such)s 5081(as)s 5327(k)s 2(erning.)k 6216(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7173(there)s 7702(are)s 8045(implemen)s 8998(-)s 0 7637(tation)m
+599(and)s 1001(language)s 1918(design)s 2598(problems,)s 3592(particularly)s
+4744(when)s 5317(\207lling)s 5939(non-)s 6367(rectangular)s 7498(shapes)s
+8185(with)s 8664(te)s 3(xt,)k 0 7349(and)m 404(so)s
+670(the)s 1018(author)s 1689(chose)s 2290(to)s 2529(k)s 2(eep)k
+3032(to)s 3271(Eqn')s 13(s)k 3867(rectangles.)s 480 6975(A)m
+766(more)s 1370(fundamental)s 2676(limitation)s 3718(of)s 4045(the)s
+4450(object)s 5151(abstraction)s 6312(arises)s 6963(from)s 7543(the)s
+7948(inability)s 8855(of)s 0 6687(recursi)m 6(v)k 3(e)k
+936(data)s 1408(types)s 1978(to)s 2231(describe)s 3097(cross-link)s 2(ed)k
+4335(structures,)s 5384(which)s 6040(seem)s 6605(to)s 6858(require)s
+7604(some)s 8179(means)s 8855(of)s 0 6399(naming)m 756(the)s
+1089(multiply)s 1938(referenced)s 2988(parts.)s 3601(Lout)s 4098(is)s
+4293(obliged)s 5054(to)s 5278(introduce)s 6222(additional)s 7218(abstractions)s
+8395(to)s 8618(cope)s 0 6111(with)m 490(cross)s 1040(linking:)s
+1892(g)s 1(alle)k 3(ys)k 2624(for)s 2970(inserting)s
+3867(te)s 3(xt)k 4291(into)s 4724(pages)s 5328(\(Section)s
+6189(5.1\),)s 6683(cross)s 7233(references)s 8273(\(Section)s 0 5823(6.1\),)m
+490(and)s 898(labelled)s 1716(points)s 2356(in)s 2603(\207gure)s
+3221(dra)s 3(wing)k 4059([6].)s 4506(An)s 4860(abstraction)s
+5969(closer)s 6603(to)s 6846(h)s 1(yperte)k 3(xt)k
+7809(might)s 8431(form)s 8960(a)s 0 5535(more)m 547(uni\207ed)s
+1270(basis)s 1799(for)s 2137(these)s 2684(features.)s 240 fnt84
+0 4936(2.2.)m 471(Grammatical)s 1893(and)s 2334(lexical)s 3039(structur)s 4(e)k
+240 fnt82 480 4504(If)m 700(objects)s 1418(are)s 1755(to)s
+1984(be)s 2256(constructed)s 3406(lik)s 2(e)k 3807(mathematical)s
+5138(e)s 3(xpressions,)k 6348(the)s 6686(natural)s 7394(notation)s
+8225(is)s 8425(a)s 8580(func)s 8998(-)s 0 4216(tional)m
+599(language)s 1519(based)s 2122(on)s 2419(operators,)s 3415(as)s
+3665(in)s 3908(Eqn.)s 4458(The)s 4886(grammar)s 5808(of)s
+6079(Lout)s 6591(objects)s 7319(is)s 7529(accordingly)s 240 fnt78
+1332 3657(\256)m 1332 3324(\256)m 1332 2991(\256)m 1332 2707(\256)m 1332 2374(\256)m
+1332 2080(\256)m 1332 1747(\256)m 1332 1463(\256)m 240 fnt83 480 3665(object)m
+1826(object)s 2498(in\207xop)s 3227(object)s 1826 3332(pr)m 8(e\207xop)k
+2680(object)s 1826 2999(object)m 2498(post\207xop)s 1826 2715(nopar)m 2(sop)k
+1826 2382(liter)m 3(alwor)k 8(d)k 220 fnt35 1826 2083({)m
+240 fnt83 1974 2088(object)m 220 fnt35 2646 2083(})m 240 fnt83
+1826 1755(object)m 2498(object)s 240 fnt82 0 960(where)m 240 fnt83
+640 962(in\207xop)m 240 fnt82 1285 960(,)m 240 fnt83 1391 962(pr)m 8(e\207xop)k
+240 fnt82 2161 960(,)m 240 fnt83 2267 962(post\207xop)m 240 fnt82
+3125 960(,)m 3232(and)s 240 fnt83 3635 962(nopar)m 2(sop)k
+240 fnt82 4591 960(are)m 4938(identi\207ers)s 5943(naming)s 6713(operators)s
+7653(which)s 8294(tak)s 2(e)k 8745(0,)s 8971(1)s
+0 672(or)m 255(2)s 424(parameters,)s 1573(as)s 1819(sho)s 6(wn,)k
+2541(and)s 240 fnt83 2940 674(liter)m 3(alwor)k 8(d)k
+240 fnt82 4067 672(is)m 4272(a)s 4433(sequence)s 5362(of)s
+5628(non-space)s 6649(characters,)s 7719(or)s 7973(an)s 8251(arbitrary)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13844(-)m 4476(4)s 4650(-)s 0 13256(sequence)m 969(of)s
+1276(characters)s 2330(enclosed)s 3262(in)s 3541(double)s 4285(quotes.)s
+5110(Ambiguities)s 6380(are)s 6763(resolv)s 3(ed)k 7664(by)s
+7995(precedence)s 0 12968(and)m 404(associati)s 6(vity)k 15(.)k
+480 12594(The)m 941(last)s 1366(production)s 2494(allo)s 6(ws)k
+3197(a)s 3397(meaning)s 4307(for)s 4679(e)s 3(xpressions)k
+5877(such)s 6407(as)s 220 fnt35 6691 12591({})m 240 fnt82
+6828 12594(,)m 6968(in)s 7245(which)s 7921(an)s 8238(object)s
+8916(is)s 0 12306(missing.)m 907(The)s 1333(v)s 6(alue)k
+1899(of)s 2168(this)s 240 fnt83 2562 12308(empty)m 3187(object)s
+240 fnt82 3833 12306(is)m 4041(a)s 4205(rectangle)s 5135(of)s
+5404(size)s 5829(0)s 6002(by)s 6294(0,)s 6519(with)s
+6999(one)s 7399(column)s 8172(mark)s 8722(and)s 0 12018(one)m
+402(ro)s 6(w)k 822(mark,)s 1420(that)s 1838(prints)s
+2433(as)s 2683(nothing.)s 480 11644(The)m 938(second-last)s 2103(production)s
+3227(generates)s 4210(sequences)s 5261(of)s 5562(arbitrary)s 6467(objects)s
+7225(separated)s 8215(by)s 8539(white)s 0 11356(space,)m 671(called)s
+240 fnt83 1333 11358(par)m 3(a)k 2(gr)k 3(aphs)k
+240 fnt82 2439 11356(.)m 2636(Ignoring)s 3547(paragraph)s 4593(breaking)s
+5517(for)s 5888(no)s 6(w)k 15(,)k 6421(the)s
+6802(natural)s 7554(meaning)s 8464(is)s 8708(that)s 0 11068(the)m
+361(tw)s 2(o)k 784(objects)s 1525(should)s 2235(appear)s
+2946(side)s 3400(by)s 3707(side,)s 4212(and)s 4629(Lout')s 13(s)k
+5305(parser)s 5961(accordingly)s 7157(interpolates)s 8335(an)s 8632(in\207x)s
+0 10780(horizontal)m 1017(concatenation)s 2395(operator)s 3244(\(see)s 3677(belo)s 6(w\))k
+4377(between)s 5224(them.)s 5859(This)s 6328(operator)s 7177(is)s
+7380(associati)s 6(v)k 3(e,)k 8519(so)s 8778(the)s
+0 10492(grammatical)m 1262(ambiguity)s 2301(does)s 2806(no)s 3113(harm.)s
+3783(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+4758(the)s 5120(Algol-60)s 6054(rule)s 6496(that)s 6928(white)s
+7530(space)s 8132(should)s 8844(be)s 0 10204(signi\207cant)m 1056(only)s
+1536(as)s 1786(a)s 1952(separator)s 2887(is)s 3097(necessarily)s
+4212(brok)s 2(en)k 4932(by)s 5226(Lout)s 5738(in)s
+5981(just)s 6386(this)s 6782(one)s 7184(place.)s 480 9830(Algol-lik)m 2(e)k
+1506(languages)s 2504(distinguish)s 3601(literal)s 4201(strings)s 4879(from)s
+5393(identi\207ers)s 6389(by)s 6673(enclosing)s 7633(them)s 8161(in)s
+8394(quotes,)s 0 9542(b)m 4(ut)k 372(literals)s 1082(are)s
+1440(f)s 2(ar)k 1773(too)s 2143(frequent)s 3010(in)s
+3264(document)s 4278(formatting)s 5350(for)s 5699(this)s 6106(to)s
+6356(be)s 6649(viable.)s 7408(The)s 7847(con)s 9(v)k 3(entional)k
+0 9254(solution)m 829(is)s 1041(to)s 1282(be)s 3(gin)k
+1870(identi\207ers)s 2878(with)s 3362(a)s 3530(special)s 4250(character)s 9(,)k
+5224(and)s 5630(Lout)s 6144(follo)s 6(ws)k 6908(Scribe)s
+7576([7])s 7895(in)s 8140(using)s 8714(`@')s 0 8966(rather)m
+616(than)s 1085(the)s 1433(`\\')s 1690(of)s 1961(trof)s 6(f)k
+2450([8])s 2767(and)s 3171(T)s 3313 8918(E)m 3456 8966(X)m
+3685([9].)s 480 8592(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k
+1447(Lout)s 1966(tak)s 2(es)k 2513(the)s 2868(unusual)s
+3675(step)s 4120(of)s 4398(making)s 5176(an)s 5466(initial)s
+6084(`@')s 6503(optional.)s 7458(The)s 7893(designers)s 8855(of)s
+0 8304(Eqn)m 449(apparently)s 1519(considered)s 2620(such)s 3122(characters)s
+4147(dis\207guring)s 5244(in)s 5494(\207ne-grained)s 6713(input)s 7272(lik)s 2(e)k
+7691(equations,)s 8722(and)s 0 8016(this)m 401(author)s 1077(agrees.)s
+1856(The)s 2289(implementation)s 3851(is)s 4066(straightforw)s 2(ard:)k
+5707(`@')s 6124(is)s 6339(classed)s 7092(as)s 7347(just)s
+7757(another)s 8539(letter)s 9(,)k 0 7728(and)m 407(e)s 6(v)k 3(ery)k
+986(w)s 2(ord)k 1537(is)s 1750(searched)s 2647(for)s
+2988(in)s 3234(the)s 3585(symbol)s 4348(table.)s 4979(If)s
+5212(it)s 5407(is)s 5620(found,)s 6289(it)s 6484(is)s
+6697(an)s 6983(identi\207er)s 9(,)k 7946(otherwise)s 8934(it)s
+0 7440(is)m 214(a)s 384(literal.)s 1107(A)s 1341(w)s 2(arning)k
+2181(message)s 3051(is)s 3265(printed)s 4004(when)s 4585(a)s
+4755(literal)s 5369(be)s 3(ginning)k 6381(with)s 6867(`@')s
+7284(is)s 7498(found,)s 8168(since)s 8719(it)s 8916(is)s
+0 7152(probably)m 905(a)s 1071(mis-spelt)s 2006(identi\207er)s 13(.)k
+3019(No)s 3365(such)s 3861(safety)s 4485(net)s 4837(is)s
+5047(possible)s 5887(for)s 6225(identi\207ers)s 7231(without)s 8022(`@'.)s
+480 6778(Equation)m 1418(formatting)s 2496(also)s 2951(demands)s 3871(symbols)s
+4737(made)s 5328(from)s 5869(punctuation)s 7074(characters,)s 8165(such)s
+8678(as)s 220 fnt35 8946 6775(+)m 240 fnt82 0 6490(and)m
+220 fnt35 404 6487(<=)m 240 fnt82 652 6490(.)m 816(It)s
+1021(is)s 1231(traditional)s 2267(to)s 2506(allo)s 6(w)k
+3085(such)s 3581(symbols)s 4430(to)s 4669(be)s 4951(juxtaposed,)s
+6095(which)s 6737(means)s 7399(that)s 7817(the)s 8165(input)s
+220 fnt35 480 6040(<=++)m 240 fnt82 0 5589(for)m 354(e)s 3(xample)k
+1234(must)s 1776(be)s 2075(interpreted)s 3184(within)s 3869(the)s
+4234(le)s 3(xical)k 4939(analyser)s 5812(by)s 6123(searching)s
+7109(the)s 7474(symbol)s 8251(table)s 8788(for)s 0 5301(its)m
+306(pre\207x)s 3(es)k 1142(in)s 1416(the)s 1795(order)s
+220 fnt35 2390 5298(<=++)m 240 fnt82 2894 5301(,)m 220 fnt35
+3032 5298(<=+)m 240 fnt82 3408 5301(,)m 220 fnt35 3546 5298(<=)m
+240 fnt82 3794 5301(.)m 3988(Although)s 4981(this)s 5408(tak)s 2(es)k
+5979(quadratic)s 6952(time,)s 7514(in)s 7788(practice)s 8630(such)s
+0 5013(sequences)m 1021(are)s 1368(too)s 1727(short)s 2265(to)s
+2504(mak)s 2(e)k 3076(a)s 3242(more)s 3789(sophisticated)s
+5095(linear)s 5698(method)s 6474(lik)s 2(e)k 6886(tries)s
+7347(w)s 2(orthwhile.)k 240 fnt84 0 4364(2.3.)m 471(Basic)s
+1073(structural)s 2149(operators)s 240 fnt82 480 3887(A)m 696(programming)s
+2036(language)s 2941(may)s 3393(be)s 3660(considered)s 4739(complete)s
+5656(when)s 6218(it)s 6395(attains)s 7054(the)s 7388(po)s 6(wer)k
+8025(of)s 8281(a)s 8432(T)s 10(uring)k 0 3599(machine,)m
+917(b)s 4(ut)k 1280(no)s 1574(such)s 2071(criterion)s
+2937(seems)s 3573(rele)s 6(v)k 6(ant)k 4390(to)s
+4630(document)s 5635(formatting.)s 6808(Instead,)s 7606(as)s 7857(the)s
+8206(language)s 0 3311(de)m 6(v)k 3(elops)k 913(and)s
+1338(ne)s 6(w)k 1806(applications)s 3033(are)s 3401(attempted,)s
+4471(de\207ciencies)s 5670(are)s 6038(e)s 3(xposed)k 6899(and)s
+7324(the)s 7693(operator)s 8570(set)s 8916(is)s 0 3023(re)m 6(vised)k
+742(to)s 981(o)s 3(v)k 3(ercome)k 1974(them.)s
+480 2649(Lout)m 1025(has)s 1429(a)s 1629(repertoire)s 2646(of)s
+2950(23)s 3268(primiti)s 6(v)k 3(e)k 4224(operators)s
+5198(\(Figure)s 5990(1\),)s 6390(which)s 7066(has)s 7470(pro)s 3(v)k 3(en)k
+8220(adequate)s 0 2361(for)m 348(a)s 525(wide)s 1056(v)s 6(ariety)k
+1778(of)s 2059(features,)s 2932(including)s 3899(equations,)s 4934(tables,)s
+5609(and)s 6023(page)s 6542(layout,)s 7257(and)s 7672(so)s
+7948(seems)s 8594(to)s 8844(be)s 0 2073(reasonably)m 1077(complete)s
+1995(in)s 2225(this)s 2607(pragmatic)s 3602(sense.)s 4270(In)s
+4513(this)s 4895(section)s 5616(we)s 5937(introduce)s 6883(the)s
+7217(eight)s 7741(concatenation)s 0 1785(and)m 424(mark-hiding)s 1680(operators.)s
+2754(T)s 19(o)k 3075(them)s 3634(f)s 2(alls)k
+4114(the)s 4482(basic)s 5047(task)s 5514(of)s 5806(assembling)s
+6956(comple)s 3(x)k 7853(objects)s 8602(from)s 0 1497(simple)m
+693(ones,)s 1239(and)s 1643(the)s 3(y)k 2106(were)s
+2626(the)s 2974(\207rst)s 3405(to)s 3644(be)s 3926(designed)s
+4835(and)s 5239(implemented.)s 480 1123(Man)m 3(y)k 1094(of)s
+1370(the)s 1723(operators)s 2668(of)s 2944(Eqn)s 3392(can)s
+3786(be)s 4073(vie)s 6(wed)k 4821(as)s 5076(b)s 4(uilding)k
+5928(small)s 6505(tables.)s 7231(A)s 7466(b)s 4(uilt-up)k
+8277(fraction,)s 0 835(for)m 367(e)s 3(xample,)k 1310(has)s
+1710(one)s 2141(column)s 2945(and)s 3379(three)s 3941(ro)s 6(ws)k
+4480(\(numerator)s 9(,)k 5669(line,)s 6163(and)s 6596(denominator\).)s
+8078(Numerous)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4352 13841(-)m 4480(5)s 4646(-)s 240 fnt83 266 13217(object)m
+220 fnt35 974 13212(/)m 240 fnt83 1038 13217(gap)m 1511(object)s
+240 fnt82 3816 13215(V)m 26(ertical)k 4613(concatenation)s 5998(with)s
+6480(mark)s 7032(alignment)s 240 fnt83 266 12929(object)m 220 fnt35
+974 12924(//)m 240 fnt83 1099 12929(gap)m 1572(object)s 240 fnt82
+3816 12927(V)m 26(ertical)k 4613(concatenation)s 5998(with)s 6480(left)s
+6857(justi\207cation)s 240 fnt83 266 12641(object)m 220 fnt35 974 12636(|)m
+240 fnt83 1011 12641(gap)m 1484(object)s 240 fnt82 3816 12639(Horizontal)m
+4893(concatenation)s 6278(with)s 6760(mark)s 7312(alignment)s 240 fnt83
+266 12353(object)m 220 fnt35 974 12348(||)m 240 fnt83 1068 12353(gap)m
+1541(object)s 240 fnt82 3816 12351(Horizontal)m 4893(concatenation)s 6278(with)s
+6760(top-justi\207cation)s 240 fnt83 266 12065(object)m 220 fnt35 974 12060(&)m
+240 fnt83 1116 12065(gap)m 1589(object)s 240 fnt82 3816 12063(Horizontal)m
+4893(concatenation)s 6278(within)s 6946(paragraphs)s 220 fnt35 266 11772(@OneCol)m
+240 fnt83 1338 11777(object)m 240 fnt82 3816 11775(Hide)m 4337(all)s
+4630(b)s 4(ut)k 4992(one)s 5394(column)s 6169(mark)s
+6721(of)s 240 fnt83 6992 11777(object)m 220 fnt35 266 11484(@OneRo)m 3(w)k
+240 fnt83 1457 11489(object)m 240 fnt82 3816 11487(Hide)m 4337(all)s
+4630(b)s 4(ut)k 4992(one)s 5394(ro)s 6(w)k
+5814(mark)s 6366(of)s 240 fnt83 6637 11489(object)m 266 11201(font)m
+220 fnt35 762 11196(@F)m 6(ont)k 240 fnt83 1534 11201(object)m
+240 fnt82 3816 11199(Render)m 240 fnt83 4567 11201(object)m 240 fnt82
+5215 11199(in)m 5458(nominated)s 6526(font)s 240 fnt83 266 10913(br)m 8(eakstyle)k
+220 fnt35 1353 10908(@Break)m 240 fnt83 2269 10913(object)m 240 fnt82
+3816 10911(Break)m 4448(paragraphs)s 5548(of)s 240 fnt83 5819 10913(object)m
+240 fnt82 6467 10911(in)m 6710(nominated)s 7778(style)s 240 fnt83
+266 10625(spacestyle)m 220 fnt35 1361 10620(@Space)m 240 fnt83 2318 10625(object)m
+240 fnt82 3816 10623(Render)m 4567(spaces)s 5242(between)s 6096(w)s 2(ords)k
+6730(in)s 6973(nominated)s 8041(style)s 240 fnt83 266 10337(length)m
+220 fnt35 979 10332(@Wide)m 240 fnt83 1813 10337(object)m 240 fnt82
+3816 10335(Render)m 240 fnt83 4567 10337(object)m 240 fnt82 5215 10335(to)m
+5454(width)s 240 fnt83 6056 10337(length)m 266 10049(length)m 220 fnt35
+979 10044(@High)m 240 fnt83 1758 10049(object)m 240 fnt82 3816 10047(Render)m
+240 fnt83 4567 10049(object)m 240 fnt82 5215 10047(to)m 5454(height)s
+240 fnt83 6112 10049(length)m 220 fnt35 266 9756(@HExpand)m 240 fnt83
+1499 9761(object)m 240 fnt82 3816 9759(Expand)m 4606(horizontal)s 5630(g)s 1(aps)k
+6119(to)s 6358(\207ll)s 6678(a)s 4(v)k 6(ailable)k
+7586(space)s 220 fnt35 266 9468(@VExpand)m 240 fnt83 1487 9473(object)m
+240 fnt82 3816 9471(Expand)m 4606(v)s 3(ertical)k 5373(g)s 1(aps)k
+5862(to)s 6101(\207ll)s 6421(a)s 4(v)k 6(ailable)k
+7329(space)s 220 fnt35 266 9180(@HScale)m 240 fnt83 1307 9185(object)m
+240 fnt82 3816 9183(Horizontal)m 4893(geometrical)s 6075(scaling)s 6805(to)s
+7044(\207ll)s 7364(a)s 4(v)k 6(ailable)k 8272(space)s
+220 fnt35 266 8892(@VScale)m 240 fnt83 1295 8897(object)m 240 fnt82
+3816 8895(V)m 26(ertical)k 4613(geometrical)s 5795(scaling)s 6525(to)s
+6764(\207ll)s 7084(a)s 4(v)k 6(ailable)k 7992(space)s
+240 fnt83 266 8609(angle)m 220 fnt35 911 8604(@Rotate)m 240 fnt83
+1892 8609(object)m 240 fnt82 3816 8607(Rotate)m 240 fnt83 4496 8609(object)m
+240 fnt82 5144 8607(by)m 240 fnt83 5438 8609(angle)m 266 8321(P)m 19(ostScript)k
+220 fnt35 1367 8316(@Gr)m 2(aphic)k 240 fnt83 2471 8321(object)m
+240 fnt82 3816 8319(Escape)m 4549(to)s 4788(graphics)s 5649(language)s
+220 fnt35 266 8028(@Ne)m 6(xt)k 240 fnt83 1050 8033(object)m
+240 fnt82 3816 8031(Add)m 4287(1)s 4442(to)s 4681(an)s
+4964(object)s 5608(denoting)s 6499(a)s 6665(number)s 240 fnt83
+266 7745(object)m 220 fnt35 974 7740(@Case)m 240 fnt83 1821 7745(alternatives)m
+240 fnt82 3816 7743(Select)m 4459(from)s 4983(a)s 5149(set)s
+5474(of)s 5745(alternati)s 6(v)k 3(e)k 6799(objects)s
+240 fnt83 266 7457(identi\207er)m 220 fnt35 1254 7452(&&)m 240 fnt83
+1662 7457(object)m 240 fnt82 3816 7455(Cross)m 4412(reference)s 240 fnt83
+266 7169(cr)m 10(oss-r)k 8(efer)k 8(ence)k 220 fnt35
+1839 7164(@Open)m 240 fnt83 2705 7169(object)m 240 fnt82 3816 7167(Retrie)m 6(v)k 3(e)k
+4672(v)s 6(alue)k 5240(from)s 5764(cross)s 6306(reference)s
+240 fnt83 266 6881(cr)m 10(oss-r)k 8(efer)k 8(ence)k
+220 fnt35 1839 6876(@T)m 26(agged)k 240 fnt83 2888 6881(object)m
+240 fnt82 3816 6879(Attach)m 4510(cross)s 5052(referencing)s 6192(tag)s
+6537(to)s 6776(object)s 240 fnt84 472 6199(Figur)m 4(e)k
+1201(1.)s 1492(The)s 1947(23)s 2240(primiti)s 2(v)k 2(e)k
+3233(operators)s 4270(of)s 4542(Lout,)s 5148(in)s 5403(order)s
+6032(of)s 6304(incr)s 4(easing)k 7405(pr)s 4(ecedence.)k
+240 fnt82 0 5562(in)m 9(v)k 3(estig)k 1(ations)k
+1377(of)s 1660(this)s 2068(kind)s 2564(con)s 9(vinced)k
+3609(the)s 3969(author)s 4652(that)s 5082(operators)s 6034(capable)s
+6832(of)s 7115(assembling)s 8256(the)s 8616(ro)s 6(ws)k
+0 5274(and)m 404(columns)s 1266(of)s 1537(tables)s 2145(w)s 2(ould)k
+2800(suf\207ce)s 3493(for)s 3831(b)s 4(uilding)k 4678(all)s
+4971(kinds)s 5541(of)s 5812(objects.)s 480 4900(The)m 906(simplest)s
+1759(objects)s 2485(are)s 2829(empty)s 3479(objects)s 4204(and)s
+4605(literal)s 5213(w)s 2(ords)k 5844(lik)s 2(e)k
+220 fnt35 6254 4897(metempsychosis)m 240 fnt82 7882 4900(,)m 7986(which)s
+8625(ha)s 4(v)k 3(e)k 0 4612(one)m 402(column)s
+1177(mark)s 1729(and)s 2133(one)s 2535(ro)s 6(w)k
+2955(mark:)s 1572 215 0 106 240 288 60 480 4106 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(metempsychosis)m
+grestore
+
+grestore
+end end restore
+grestore
+0 3655(T)m 19(o)k 337(place)s
+934(tw)s 2(o)k 1381(arbitrary)s 2294(objects)s 3059(side)s
+3537(by)s 3868(side,)s 4398(we)s 4770(use)s 5182(the)s
+5567(in\207x)s 6099(operator)s 220 fnt35 6992 3652(|)m 240 fnt82
+7029 3655(,)m 7173(denoting)s 8102(horizontal)s 0 3367(concatenation.)m 1492(F)s 3(or)k
+1881(e)s 3(xample,)k 220 fnt35 480 2866(USA |0.2i A)m 6(ustr)k 2(alia)k
+240 fnt82 0 2411(produces)m 915(the)s 1263(object)s 476 166 0 57 240 288 60 480 1905 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+
+grestore
+
+grestore
+end end restore
+grestore
+875 166 0 57 240 288 60 1244 1905 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 1 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+0 1454(The)m 443(ro)s 6(w)k 879(marks)s
+1529(are)s 1892(mer)s 4(ged)k 2678(into)s 3119(one,)s
+3587(\207xing)s 4215(the)s 4579(v)s 3(ertical)k 5361(position)s
+6205(of)s 6491(the)s 6855(objects)s 7598(relati)s 6(v)k 3(e)k
+8376(to)s 8631(each)s 0 1166(other;)m 611(their)s 1116(horizontal)s
+2148(separation)s 3196(is)s 3414(determined)s 4555(by)s 4857(the)s
+240 fnt83 5214 1168(gap)m 240 fnt82 5635 1166(attached)m 6497(to)s
+6744(the)s 7101(operator)s 9(,)k 8003(in)s 8254(this)s
+8659(case)s 0 878(0.2)m 361(inches.)s 1143(W)s 19(e)k
+1519(think)s 2080(of)s 2358(the)s 2713(g)s 1(ap)k
+3118(as)s 3376(part)s 3814(of)s 4092(the)s 4448(operator)s 9(,)k
+5349(although)s 6251(strictly)s 6974(it)s 7174(is)s 7391(a)s
+7564(third)s 8081(parameter)s 13(.)k 0 590(It)m 205(may)s
+671(be)s 953(omitted,)s 1790(def)s 2(aulting)k 2810(to)s
+220 fnt35 3049 587(0i)m 240 fnt82 3205 590(.)m 240 fnt83
+480 218(V)m 26(ertical)k 1294(concatenation)s 240 fnt82 2644 216(,)m
+2762(denoted)s 3590(by)s 3895(the)s 4254(in\207x)s 4760(operator)s
+220 fnt35 5627 213(/)m 240 fnt82 5691 216(,)m 5809(is)s
+6031(the)s 6390(same)s 6948(apart)s 7497(from)s 8032(the)s
+8392(change)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13842(-)m 4476(6)s 4649(-)s 0 13251(of)m 271(direction:)s
+220 fnt35 480 12800(A)m 6(ustr)k 2(alia /0.1i USA)k 240 fnt82
+0 12345(produces)m 915(the)s 1263(object)s 875 165 0 56 240 288 60 480 11840 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+875 165 0 57 240 288 60 480 11531 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+
+grestore
+
+grestore
+end end restore
+grestore
+0 11080(with)m 482(column)s 1257(marks)s 1892(mer)s 4(ged)k
+2663(and)s 3067(a)s 3233(0.1)s 3568(inch)s 4037(g)s 1(ap.)k
+480 10706(Consider)m 1404(no)s 6(w)k 1865(what)s 2390(happens)s
+3226(when)s 3802(horizontal)s 4826(and)s 5230(v)s 3(ertical)k
+5997(are)s 6344(combined:)s 220 fnt35 1000 10205({)m 1186(USA)s
+2442(|0.2i)s 2958(A)s 6(ustr)k 2(alia)k 3919(})s
+480 9917(/0.1i)m 1000({)s 1186(W)s 8(ashington)k 2442(|)s
+2958(Canberr)s 2(a)k 3987(})s 240 fnt82 0 9418(The)m
+445(tw)s 2(o)k 872(parameters)s 1987(of)s 220 fnt35
+2275 9415(/)m 240 fnt82 2416 9418(no)m 6(w)k 2895(ha)s 4(v)k 3(e)k
+3413(tw)s 2(o)k 3840(column)s 4632(marks)s 5284(each,)s
+5846(and)s 6268(the)s 3(y)k 6748(will)s 7191(be)s
+7490(mer)s 4(ged)k 8278(with)s 8778(the)s 0 9130(corresponding)m
+1422(marks)s 2057(in)s 2300(the)s 2648(other)s 3199(parameter)s 9(,)k
+4251(yielding)s 5088(the)s 5436(object)s 476 166 0 57 240 288 60 480 8624 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+grestore
+
+grestore
+end end restore
+grestore
+659 166 0 57 240 288 60 956 8624 LoutGr2
+0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+876 166 0 57 240 288 60 1903 8624 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 1 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+
+grestore
+
+grestore
+end end restore
+grestore
+1135 215 0 106 240 288 60 480 8265 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(W)m 19(ashington)k
+grestore
+
+grestore
+end end restore
+grestore
+876 215 0 106 240 288 60 1903 8265 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+876 166 0 57 240 288 60 0 49 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+876 166 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(Canberra)m
+grestore
+
+grestore
+end end restore
+grestore
+0 7814(The)m 220 fnt35
+425 7811(0.2i)m 240 fnt82 821 7814(g)m 1(ap)k 1216(separates)s
+2139(columns,)s 3054(not)s 3416(indi)s 6(vidual)k 4432(items)s
+4997(in)s 5237(columns,)s 6152(so)s 6414(a)s 6577(g)s 1(ap)k
+6972(attached)s 7823(to)s 8059(the)s 8403(second)s 220 fnt35
+0 7523(|)m 240 fnt82 96 7526(w)m 2(ould)k 749(serv)s 3(e)k
+1304(no)s 1595(purpose;)s 2464(an)s 3(y)k 2859(such)s
+3353(g)s 1(ap)k 3749(is)s 3957(ignored.)s 4851(If)s
+5079(the)s 5425(number)s 6214(of)s 6484(marks)s 7117(to)s
+7354(be)s 7634(mer)s 4(ged)k 8403(dif)s 6(fers,)k
+0 7238(empty)m 638(columns)s 1485(are)s 1818(added)s 2433(at)s
+2651(the)s 2984(right)s 3481(to)s 3705(equalize)s 4542(the)s
+4876(number)s 13(.)k 5743(The)s 6157(four)s 6600(marks)s
+7221(protruding)s 8269(from)s 8778(the)s 0 6950(result)m 601(are)s
+959(all)s 1263(a)s 4(v)k 6(ailable)k 2182(for)s
+2531(mer)s 4(ging)k 3389(with)s 3882(neighbouring)s 5223(marks)s
+5869(by)s 6174(other)s 6736(concatenation)s 8133(operators.)s 0 6662(The)m
+428(precedence)s 1559(of)s 220 fnt35 1830 6659(|)m 240 fnt82
+1927 6662(is)m 2137(higher)s 2808(than)s 3277(the)s 3625(precedence)s
+4756(of)s 220 fnt35 5027 6659(/)m 240 fnt82 5091 6662(,)m
+5198(so)s 5464(the)s 5812(braces)s 6473(could)s 7063(be)s
+7345(omitted.)s 480 6288(When)m 1131(lines)s 1656(of)s 1950(te)s 3(xt)k
+2387(are)s 2757(concatenated,)s 4135(it)s 4349(is)s 4582(con)s 9(v)k 3(entional)k
+5884(to)s 6145(measure)s 7020(their)s 7540(separation)s 8602(from)s
+0 6000(baseline)m 832(to)s 1063(baseline)s 1894(\(mark)s 2517(to)s
+2748(mark)s 3292(in)s 3527(Lout\),)s 4157(rather)s 4765(than)s
+5226(from)s 5742(edge)s 6242(to)s 6473(edge)s 6973(as)s
+7215(abo)s 3(v)k 3(e.)k 7937(This)s 8405(idea)s
+8855(of)s 0 5712(dif)m 6(ferent)k 863(reference)s 1794(points)s
+2417(for)s 2743(measurement)s 4065(e)s 6(v)k 4(olv)k 3(ed)k
+4855(o)s 3(v)k 3(er)k 5322(the)s 5658(years)s
+6200(into)s 6613(a)s 6767(system)s 7478(of)s 7737(six)s
+240 fnt83 8059 5714(gap)m 8459(modes)s 240 fnt82 0 5424(\(Figure)m
+769(2\),)s 1085(e)s 3(xpressed)k 2094(by)s 2398(appending)s
+3460(a)s 3636(letter)s 4195(to)s 4445(the)s 4803(length.)s
+5576(F)s 3(or)k 5975(e)s 3(xample,)k 220 fnt35
+6899 5421(|0.2i)m 240 fnt82 7366 5424(is)m 7586(an)s 7880(abbre)s 6(viation)k
+0 5136(for)m 220 fnt35 377 5133(|0.2ie)m 240 fnt82 901 5136(,)m
+1047(meaning)s 1963(0.2)s 2356(inches)s 3057(measured)s 4070(from)s
+4633(edge)s 5180(to)s 5458(edge;)s 220 fnt35 6061 5133(|0.3ix)m
+240 fnt82 6678 5136(produces)m 7632(a)s 7837(0.3)s 8220(inch)s
+8728(g)s 1(ap)k 0 4848(measured)m 972(from)s 1493(mark)s
+2043(to)s 2279(mark)s 2829(and)s 3230(widened)s 4097(if)s
+4311(necessary)s 5292(to)s 5528(pre)s 6(v)k 3(ent)k
+6294(o)s 3(v)k 3(erstriking;)k 7552(and)s 220 fnt35
+7954 4845(|2.5it)m 240 fnt82 8478 4848(places)m 0 4560(its)m 273(right)s
+781(parameter)s 1792(2.5)s 2135(inches)s 2794(from)s 3314(the)s
+3659(current)s 4392(left)s 4766(mar)s 4(gin,)k 5543(irrespecti)s 6(v)k 3(e)k
+6699(of)s 6967(the)s 7312(position)s 8137(of)s 8405(the)s
+8749(left)s 0 4272(parameter)m 13(.)k 1098(There)s 1704(is)s
+1907(also)s 2338(a)s 2496(choice)s 3169(of)s 3433(ele)s 6(v)k 3(en)k
+4098(units)s 4606(of)s 4870(measurement)s 6197(\(inches,)s 6987(centimetres,)s
+8186(multiples)s 0 3984(of)m 288(the)s 654(current)s 1407(font)s
+1870(size,)s 2365(etc.\),)s 2907(the)s 3272(most)s 3815(interesting)s
+4894(being)s 5496(the)s 220 fnt35 5862 3981(r)m 240 fnt82
+6012 3984(unit:)m 6568(one)s 220 fnt35 6987 3981(r)m 240 fnt82
+7138 3984(is)m 7365(the)s 7731(column)s 8524(width)s 0 3696(minus)m
+635(the)s 982(width)s 1583(of)s 1852(the)s 2199(follo)s 6(wing)k
+3175(object,)s 3864(so)s 4129(that)s 220 fnt35 4546 3693(|1r)m -8(t)k
+240 fnt82 4921 3696(produces)m 5835(suf\207cient)s 6783(space)s 7368(to)s
+7606(right)s 8116(justify)s 8778(the)s 0 3408(follo)m 6(wing)k
+987(object,)s 1688(and)s 220 fnt35 2103 3405(|0.5r)m -8(t)k
+240 fnt82 2673 3408(to)m 2923(center)s 3576(it.)s 3883(These)s
+4520(features)s 5337(implement)s 6429(spacings)s 7315(needed)s 8061(in)s
+8315(practice)s 0 3120(rather)m 608(than)s 1069(suggested)s 2063(by)s
+2349(theory)s 15(.)k 3101(The)s 3(y)k 3636(w)s 2(ork)k
+4179(with)s 4653(all)s 4938(\207v)s 3(e)k 5342(concatenation)s
+6719(operators,)s 7707(horizontal)s 8722(and)s 0 2832(v)m 3(ertical.)k
+480 2458(When)m 1113(we)s 1452(construct)s 2392(a)s 2562(b)s 4(uilt-up)k
+3372(fraction,)s 4225(the)s 4577(result)s 5171(has)s 5545(three)s
+6082(ro)s 6(w)k 6506(marks,)s 7201(b)s 4(ut)k
+7567(only)s 8051(the)s 8403(second)s 0 2170(should)m 697(be)s
+979(visible)s 1672(outside)s 2419(the)s 2767(object:)s gsave
+480 1339 translate
+240 fnt83 156 491 0 288 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+156 491 0 288 240 288 12 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+156 491 0 288 240 288 12 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 336(X)m
+156 0 0 0 240 288 12 0 288 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+2 68(Y)m
+grestore
+
+grestore
+end end restore
+grestore
+0 888(This)m 493(is)s 721(a)s 905(common)s
+1817(problem,)s 2739(and)s 3161(accordingly)s 4361(a)s 220 fnt35
+4545 885(@OneRo)m 3(w)k 240 fnt82 5694 888(operator)m 6567(w)s 2(as)k
+7006(introduced)s 8105(for)s 8461(hiding)s 0 600(all)m 291(b)s 4(ut)k
+650(one)s 1050(of)s 1318(the)s 1663(ro)s 6(w)k
+2081(marks)s 2713(of)s 2981(its)s 3255(parameter)s 13(.)k
+4357(Normally)s 15(,)k 5363(the)s 5708(\207rst)s 6136(mark)s
+6686(is)s 6893(the)s 7238(survi)s 6(v)k 4(or)k 9(,)k
+8121(b)s 4(ut)k 8480(a)s 8643(later)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4351 13848(-)m 4479(7)s 4647(-)s 6693 8221 0 8221 240 288 60 1186 5201 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+0 7447(Edge-to-edge)m 220 fnt35
+1786 7444(|)m 240 fnt83 1843 7449(length)m 220 fnt35 2456 7444(e)m
+240 fnt82 0 6238(Hyphenation)m 220 fnt35 1786 6235(|)m 240 fnt83
+1843 6240(length)m 220 fnt35 2456 6235(h)m 240 fnt82 0 5029(Ov)m 3(erstrik)k 2(e)k
+220 fnt35 1786 5026(|)m 240 fnt83 1843 5031(length)m 220 fnt35
+2456 5026(o)m 240 fnt82 0 3820(Mark-to-mark)m 220 fnt35 1786 3817(|)m
+240 fnt83 1843 3822(length)m 220 fnt35 2456 3817(x)m 240 fnt82
+0 2611(K)m 6(erning)k 220 fnt35 1786 2608(|)m 240 fnt83
+1843 2613(length)m 220 fnt35 2456 2608(k)m 240 fnt82 0 1402(T)m 19(ab)k 4(ulation)k
+220 fnt35 1786 1399(|)m 240 fnt83 1843 1404(length)m 220 fnt35
+2456 1399(t)m gsave
+3291 0 translate
+240 fnt82 3402 8221 0 8221 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+567 7485 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 7371 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 7485 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 7371 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 7395 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 7395 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 7395 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 7395 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 1534 7192(length)m gsave
+567 6304 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 6190 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 6304 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 6190 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 6214 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6214 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6214 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 6214 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1534 6011(length)m gsave
+567 5123 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 5009 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 5123 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 5009 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 4976 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 4976 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 4976 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4976 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1392 4774(length)m
+gsave
+567 3886 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 3772 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 3886 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 3772 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 3739 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3739 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 3739 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3739 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82 941 3536(max)m 180 fnt78 1256 3531(\()m 180 fnt83
+1319 3537(length)m 180 fnt78 1774 3531(,)m 180 fnt83 1854 3537(a)m
+180 fnt78 1994 3531(+)m 180 fnt83 2145 3537(b)m 180 fnt78
+2240 3531(\))m gsave
+1247 4363 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 4363 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 4363 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4363 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 4431(a)m gsave
+2551 4363 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 4363 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 4363 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 4363 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 4387(b)m gsave
+567 2590 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 2476 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 2590 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 2476 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 2443 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 2443 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 2443 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 2443 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82
+999 2240(max)m 180 fnt78 1314 2235(\()m 180 fnt83 1377 2241(length)m
+180 fnt78 1832 2235(,)m 180 fnt83 1912 2241(a)m 180 fnt78
+2007 2235(,)m 180 fnt83 2087 2241(b)m 180 fnt78 2182 2235(\))m
+gsave
+1247 3067 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3067 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 3067 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3067 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 3135(a)m gsave
+2551 3067 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3067 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3067 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 3067 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 3091(b)m gsave
+567 1438 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 1324 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 1438 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 1324 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 1234 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 1234 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 1234 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 1234 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1587 1032(length)m gsave
+3402 734 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 734 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1189 523(curr)m 6(ent)k
+1759(bound)s
+grestore
+end end restore
+grestore
+240 fnt84 0 4610(Figur)m 4(e)k 774(2.)s
+1110(The)s 1610(six)s 1991(gap)s 2462(modes)s 3212(\()s
+240 fnt83 3285 4613(length)m 240 fnt84 3984 4610(is)m 4242(any)s
+4716(length\).)s 5648(Hyphenation)s 7078(mode)s 7737(has)s 8182(an)s
+8537(extra)s 0 4322(pr)m 4(operty)k 955(not)s 1347(sho)s 2(wn)k
+2053(her)s 4(e.)k 240 fnt82 0 3685(mark)m 552(can)s
+941(be)s 1223(chosen)s 1945(by)s 2239(pre\207xing)s 220 fnt35
+3156 3682(^)m 240 fnt82 3322 3685(to)m 3561(the)s 3909(preceding)s
+4905(concatenation)s 6290(operator:)s 220 fnt35 480 3184(@OneRo)m 3(w { X ^/2p @HLine /2p )k 19(Y })k
+240 fnt82 0 2688(has)m 396(the)s 770(desired)s 1545(result,)s
+2208(where)s 220 fnt35 2874 2685(2p)m 240 fnt82 3197 2688(is)m
+3433(tw)s 2(o)k 3870(points)s 4532(and)s 220 fnt35
+4962 2685(@HLine)m 240 fnt82 5836 2688(is)m 6072(an)s 6381(easy)s
+6887(combination)s 8166(of)s 8464(Lout')s 13(s)k 0 2400(graphics)m
+861(operators.)s 1914(A)s 2144(similar)s 2866(operator)s 9(,)k
+220 fnt35 3760 2397(@OneCol)m 240 fnt82 4712 2400(,)m 4819(hides)s
+5375(column)s 6150(marks.)s 480 2026(A)m 728(v)s 6(ariant)k
+1463(of)s 220 fnt35 1753 2023(/)m 240 fnt82 1895 2026(called)m
+220 fnt35 2542 2023(//)m 240 fnt82 2745 2026(is)m 2974(pro)s 3(vided)k
+3898(which)s 4558(performs)s 5490(v)s 3(ertical)k 6275(concatenation)s
+7679(b)s 4(ut)k 8059(ignores)s 8833(all)s 0 1738(column)m
+775(marks)s 1410(and)s 1814(simply)s 2519(left-justi\207es)s 3709(its)s
+3985(tw)s 2(o)k 4395(parameters:)s 220 fnt35 480 1237(Heading //0.1i)m
+480 949(A |0.2i B /0.1i)m 480 661(C | D)m 240 fnt82 0 206(has)m 370(result)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4351 13844(-)m 4479(8)s 4646(-)s 480 13253(Heading)m 480 12896(A)m
+938(B)s 480 12590(C)m 938(D)s 0 12136(sho)m 6(wing)k
+883(that)s 1325(spanning)s 2267(columns)s 3153(in)s 3420(tables)s
+4052(moti)s 6(v)k 6(ate)k 4956(the)s 5328(inclusion)s
+6286(of)s 6581(this)s 7001(operator)s 13(.)k 7972(There)s
+8609(is)s 8843(an)s 0 11848(analogous)m 220 fnt35 1029 11845(||)m
+240 fnt82 1191 11848(operator)m 13(.)k 2145(The)s 2581(author)s
+3259(w)s 2(ould)k 3922(ha)s 4(v)k 3(e)k
+4430(preferred)s 5370(to)s 5616(lea)s 4(v)k 3(e)k
+6177(out)s 6550(these)s 7105(operators,)s 8108(since)s 8663(the)s 3(y)k
+0 11560(complicate)m 1104(the)s 1452(implementation,)s 3059(and)s 3463(it)s
+3655(is)s 3865(interesting)s 4926(to)s 5165(e)s 3(xamine)k
+6028(the)s 6376(prospects)s 7330(of)s 7601(doing)s 8200(so.)s
+480 11186(The)m 220 fnt35 953 11183(//)m 240 fnt82 1184 11186(operator)m
+2086(is)s 2342(formally)s 3263(redundant,)s 4373(because)s 5232(in)s
+5521(general)s 6324(the)s 6718(e)s 3(xpression)k 220 fnt35
+7841 11183(x // y)m 240 fnt82 8409 11186(can)m 8844(be)s 0 10898(replaced)m
+867(by)s 220 fnt35 480 10397(@OneCol { | x } /)m 480 10109(@OneCol { | y })m 240 fnt82
+0 9611(for)m 338(an)s 3(y)k 734(objects)s 220 fnt35
+1462 9608(x)m 240 fnt82 1629 9611(and)m 220 fnt35 2032 9608(y)m
+240 fnt82 2140 9611(.)m 2304(By)s 2637(concatenating)s 4017(an)s
+4300(empty)s 4951(object)s 5594(at)s 5826(the)s 6173(left)s
+6549(of)s 220 fnt35 6820 9608(x)m 240 fnt82 6987 9611(and)m
+7390(hiding)s 8055(all)s 8347(b)s 4(ut)k 8708(that)s
+0 9323(empty)m 641(object')s 13(s)k 1423(column)s 2186(mark,)s
+2772(we)s 3095(ef)s 6(fecti)k 6(v)k 3(ely)k
+4143(shift)s 220 fnt35 4615 9320(x)m 240 fnt82 4723 9323(')m 13(s)k
+4921(column)s 5684(mark)s 6224(to)s 6452(its)s 6716(left)s
+7081(edge.)s 7685(The)s 8101(same)s 8636(goes)s 0 9035(for)m
+220 fnt35 349 9032(y)m 240 fnt82 457 9035(,)m 575(so)s
+852(the)s 220 fnt35 1211 9032(/)m 240 fnt82 1347 9035(operator)m
+2214(has)s 2595(just)s 3011(one)s 3424(column)s 4211(mark)s
+4774(to)s 5024(mer)s 4(ge,)k 5735(at)s 5978(the)s
+6338(e)s 3(xtreme)k 7171(left,)s 7606(and)s 8021(its)s
+8308(ef)s 6(fect)k 8916(is)s 0 8747(indistinguishable)m 1690(from)s
+220 fnt35 2214 8744(//)m 240 fnt82 2339 8747(.)m 480 8373(Unfortunately)m 15(,)k
+1915(if)s 220 fnt35 2134 8370(y)m 240 fnt82 2304 8373(consists)m
+3114(of)s 3387(tw)s 2(o)k 3799(ro)s 6(ws)k
+4311(separated)s 5274(by)s 220 fnt35 5570 8370(/)m 240 fnt82
+5634 8373(,)m 5743(as)s 5995(in)s 6240(the)s 6590(e)s 3(xample)k
+7455(abo)s 3(v)k 3(e,)k 8130(both)s 8616(ro)s 6(ws)k
+0 8085(must)m 533(be)s 823(placed)s 1513(inside)s 2148(the)s
+220 fnt35 2504 8082(@OneCol)m 240 fnt82 3456 8085(,)m 3571(and)s
+3983(the)s 4340(table)s 4868(cannot)s 5574(be)s 5864(entered)s
+6633(in)s 6884(the)s 7240(simple)s 7942(ro)s 6(w-by-ro)k 6(w)k
+0 7797(manner)m 777(that)s 1194(non-e)s 3(xpert)k 2287(users)s
+2828(naturally)s 3731(e)s 3(xpect.)k 4515(Another)s 5359(adv)s 6(antage)k
+6378(of)s 220 fnt35 6649 7794(//)m 240 fnt82 6833 7797(is)m
+7043(that)s 7460(its)s 7736(left)s 8112(parameter)s 0 7509(can)m
+382(be)s 657(printed)s 1385(before)s 2044(its)s 2313(right)s
+2817(parameter)s 3824(is)s 4027(kno)s 6(wn;)k 4779(this)s
+5168(is)s 5371(important)s 6353(when)s 6922(the)s 7263(left)s
+7633(parameter)s 8640(is)s 8843(an)s 0 7221(entire)m 599(page.)s
+480 6847(The)m 960(\207fth)s 1468(and)s 1924(\207nal)s 2457(concatenation)s
+3895(operator)s 9(,)k 220 fnt35 4841 6844(&)m 240 fnt82
+4983 6847(,)m 5143(is)s 5405(an)s 5741(e)s 3(xplicit)k
+6567(v)s 3(ersion)k 7377(of)s 7701(the)s 8102(horizontal)s
+0 6559(concatenation)m 1402(operator)s 2275(interpolated)s 3492(when)s 4085(objects)s
+4830(are)s 5195(separated)s 6172(by)s 6483(white)s 7088(space.)s
+7800(It)s 8022(is)s 8250(formally)s 0 6271(identical)m 907(to)s
+220 fnt35 1177 6268(|)m 240 fnt82 1305 6271(e)m 3(xcept)k
+2017(for)s 2386(taking)s 3068(higher)s 3770(precedence)s 4932(and)s
+5367(being)s 5983(subject)s 6751(to)s 7021(replacement)s 8279(by)s
+220 fnt35 8604 6268(//1vx)m 240 fnt82 0 5983(during)m 678(paragraph)s
+1691(breaking)s 2581(\(Section)s 3434(2.5\).)s 240 fnt84 0 5334(2.4.)m
+471(Implementation)s 2159(of)s 2431(objects)s 3201(and)s 3642(concatenation)s
+240 fnt82 480 4857(In)m 738(this)s 1136(section)s 1872(we)s
+2210(discuss)s 2954(the)s 3304(implementation)s 4863(of)s 5137(objects)s
+5867(and)s 6273(concatenation,)s 7710(and)s 8117(especially)s 0 4569(mark)m
+552(alignment.)s 1672(The)s 2100(\207rst)s 2531(step)s 2969(is)s
+3179(to)s 3418(use)s 3793(an)s 4076(operator)s 4932(precedence)s
+6063(parser)s 6706(to)s 6945(con)s 9(v)k 3(ert)k
+7710(input)s 8262(such)s 8758(as)s 220 fnt35 480 4068(a |0.5i b /0.2i c | d)m
+240 fnt82 0 3613(into)m 425(parse)s 985(trees)s 1486(such)s
+1982(as)s gsave
+480 1919 translate
+240 fnt83 3396 1354 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1867 338 56 282 240 288 12 1529 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+grestore
+(T) lfigpromotelabels
+grestore
+1413 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+876 338 56 282 240 288 12 537 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+511 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+511 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+511 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(5)m 192 fnt83 404 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 962 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1075 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1413 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1413 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 1526 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(2)m 192 fnt83 410 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2043 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 0 790 240 288 12 2156 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+789 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3396 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 1468(Missing)m 879(objects)s 1662(are)s 2065(replaced)s
+2987(by)s 3336(empty)s 4044(objects,)s 4883(and)s 5342(sequences)s
+6419(of)s 6745(concatenation)s 8186(operators)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4349 13844(-)m 4477(9)s 4648(-)s 0 13251(are)m 347(consolidated:)s
+gsave
+480 11602 translate
+240 fnt83 2492 1359 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1415 338 56 282 240 288 12 1077 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78
+56 105(0)m 192 fnt83 195 111(.)m 192 fnt78 270 105(2)m
+192 fnt83 410 111(i)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 968 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1411 846 0 790 240 288 12 1081 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+875 338 56 282 240 288 12 536 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+509 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83 195 111(.)m
+192 fnt78 270 105(3)m 192 fnt83 402 111(i)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 960 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1073 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1411 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2492 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt78 3284 12840(\336)m gsave
+3825 11602 translate
+240 fnt83 2492 1359 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1415 338 56 282 240 288 12 1077 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(2)m 192 fnt83 410 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 968 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 1081 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1419 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+509 846 56 790 240 288 12 1532 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(3)m 192 fnt83 402 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2041 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 2154 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2492 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 11151(to)m 239(mak)s 2(e)k
+811(manifest)s 1693(their)s 2190(associati)s 6(vity)k 3432(and)s
+3836(reduce)s 4529(the)s 4877(depth)s 5466(of)s 5737(the)s
+6085(tree)s 6498(for)s 6836(ef\207cienc)s 3(y)k 7829(later)s 13(.)k
+480 10777(The)m 970(required)s 1887(semantic)s 2851(information)s 4099(is)s
+4371(the)s 4782(size)s 5271(of)s 5605(each)s 6162(subobject,)s
+7249(consisting)s 8334(of)s 8668(four)s 0 10489(inte)m 3(gers:)k
+920(width)s 1524(to)s 1765(left)s 2144(and)s 2550(right)s
+3062(of)s 3335(the)s 3685(distinguished)s 5021(column)s 5798(mark,)s
+6397(and)s 6803(height)s 7463(abo)s 3(v)k 3(e)k
+8087(and)s 8493(belo)s 6(w)k 0 10201(the)m 368(distinguished)s
+1722(ro)s 6(w)k 2162(mark.)s 2837(These)s 3484(numbers)s
+4379(are)s 4746(al)s 2(w)k 2(ays)k 5477(non-ne)s 3(g)k 1(ati)k 6(v)k 3(e)k
+6789(in)s 7052(Basser)s 7769(Lout,)s 8348(b)s 4(ut)k
+8730(this)s 0 9913(restriction)m 1024(is)s 1234(unnecessary)s 2457(and)s
+2861(should)s 3558(be)s 3840(dropped.)s 480 9539(F)m 3(or)k
+867(the)s 1212(lea)s 4(v)k 3(es,)k 1907(which)s
+2546(are)s 2890(simple)s 3581(w)s 2(ords,)k 4268(the)s
+4614(numbers)s 5486(are)s 5830(obtained)s 6710(from)s 7231(font)s
+7674(tables.)s 8392(F)s 3(or)k 8778(the)s 0 9251(higher)m
+678(le)s 6(v)k 3(els)k 1285(we)s 1628(apply)s
+2222(recursi)s 6(v)k 3(e)k 3152(rules.)s 3788(Suppose)s
+4664(that)s 240 fnt83 5090 9253(hgap)m 240 fnt78 5583 9245(\()m
+240 fnt83 5675 9253(x)m 240 fnt78 5801 9245(,)m 240 fnt83
+5932 9253(g)m 240 fnt78 6066 9245(,)m 240 fnt83 6197 9253(y)m
+240 fnt78 6319 9245(\))m 240 fnt82 6453 9251(returns)m 7175(the)s
+7531(desired)s 8287(distance)s 0 8963(between)m 846(the)s 1186(column)s
+1952(marks)s 2579(of)s 2841(objects)s 240 fnt83 3561 8965(x)m
+240 fnt82 3719 8963(and)m 240 fnt83 4114 8965(y)m 240 fnt82
+4268 8963(when)m 4835(the)s 3(y)k 5290(are)s 5629(separated)s
+6580(by)s 6866(g)s 1(ap)k 240 fnt83 7255 8965(g)m
+240 fnt82 7369 8963(:)m 240 fnt83 7527 8965(right)m 240 fnt78
+8000 8957(\()m 240 fnt83 8075 8965(x)m 240 fnt78 8185 8957(\))m
+8298(+)s 240 fnt83 8473 8965(length)m 240 fnt78 0 8669(\()m
+240 fnt83 89 8677(g)m 240 fnt78 221 8669(\))m 376(+)s
+240 fnt83 594 8677(left)m 240 fnt78 920 8669(\()m 240 fnt83
+1009 8677(y)m 240 fnt78 1129 8669(\))m 240 fnt82 1261 8675(when)m
+1842(the)s 2196(g)s 1(ap)k 2600(mode)s 3193(is)s
+3409(edge-to-edge,)s 4770(the)s 5124(lar)s 4(ger)k 5741(of)s
+240 fnt83 6018 8677(length)m 240 fnt78 6629 8669(\()m 240 fnt83
+6718 8677(g)m 240 fnt78 6850 8669(\))m 240 fnt82 6982 8675(and)m
+240 fnt83 7391 8677(right)m 240 fnt78 7878 8669(\()m 240 fnt83
+7968 8677(x)m 240 fnt78 8091 8669(\))m 8246(+)s 240 fnt83
+8464 8677(left)m 240 fnt78 8790 8669(\()m 240 fnt83 8880 8677(y)m
+240 fnt78 9000 8669(\))m 240 fnt82 0 8387(when)m 576(the)s
+924(mode)s 1512(is)s 1722(mark-to-mark,)s 3155(and)s 3559(so)s
+3825(on.)s 4229(Gi)s 6(v)k 3(en)k 4862(an)s
+5145(object)s 240 fnt83 480 7892(X)m 240 fnt78 720 7884(=)m
+240 fnt83 933 7892(x)m 168 fnt78 1039 7799(1)m 240 fnt78
+1249 7884(|)m 240 fnt83 1294 7892(g)m 168 fnt78 1405 7799(1)m
+240 fnt78 1615 7884(\274)m 200 fnt83 1973 7900(^)m 240 fnt78
+2069 7884(|)m 240 fnt83 2114 7892(g)m 168 fnt83 2225 7805(i)m
+168 fnt78 2291 7799(-)m 2403(1)s 240 fnt83 2613 7892(x)m
+168 fnt83 2719 7805(i)m 240 fnt78 2907 7884(\274)m 3265(|)s
+240 fnt83 3310 7892(g)m 168 fnt83 3421 7805(n)m 168 fnt78
+3523 7799(-)m 3635(1)s 240 fnt83 3845 7892(x)m 168 fnt83
+3951 7805(n)m 240 fnt82 0 7348(we)m 335(may)s 801(calculate)s
+1705(its)s 1981(size)s 2408(as)s 2658(follo)s 6(ws:)k
+240 fnt83 740 6845(left)m 240 fnt78 1060 6837(\()m 240 fnt83
+1144 6845(X)m 240 fnt78 1312 6837(\))m 1474(=)s 240 fnt83
+1687 6845(left)m 240 fnt78 2007 6837(\()m 240 fnt83 2091 6845(x)m
+168 fnt78 2197 6752(1)m 240 fnt78 2275 6837(\))m 2413(+)s
+240 fnt83 2614 6845(hgap)m 240 fnt78 3099 6837(\()m 240 fnt83
+3183 6845(x)m 168 fnt78 3289 6752(1)m 240 fnt78 3367 6837(,)m
+240 fnt83 3474 6845(g)m 168 fnt78 3585 6752(1)m 240 fnt78
+3663 6837(,)m 240 fnt83 3770 6845(x)m 168 fnt78 3876 6752(2)m
+240 fnt78 3968 6837(\))m 4106(+)s 4307(\274)s 4593(+)s
+240 fnt83 4794 6845(hgap)m 240 fnt78 5279 6837(\()m 240 fnt83
+5363 6845(x)m 168 fnt83 5469 6758(i)m 168 fnt78 5535 6752(-)m
+5647(1)s 240 fnt78 5725 6837(,)m 240 fnt83 5832 6845(g)m
+168 fnt83 5943 6758(i)m 168 fnt78 6009 6752(-)m 6121(1)s
+240 fnt78 6199 6837(,)m 240 fnt83 6306 6845(x)m 168 fnt83
+6412 6758(i)m 240 fnt78 6468 6837(\))m 240 fnt83 579 6442(right)m
+240 fnt78 1060 6434(\()m 240 fnt83 1144 6442(X)m 240 fnt78
+1312 6434(\))m 1474(=)s 240 fnt83 1687 6442(hgap)m 240 fnt78
+2172 6434(\()m 240 fnt83 2256 6442(x)m 168 fnt83 2362 6355(i)m
+240 fnt78 2418 6434(,)m 240 fnt83 2525 6442(g)m 168 fnt83
+2636 6355(i)m 240 fnt78 2692 6434(,)m 240 fnt83 2799 6442(x)m
+168 fnt83 2905 6355(i)m 168 fnt78 2971 6349(+)m 3084(1)s
+240 fnt78 3162 6434(\))m 3300(+)s 3501(\274)s 3787(+)s
+240 fnt83 3988 6442(hgap)m 240 fnt78 4473 6434(\()m 240 fnt83
+4557 6442(x)m 168 fnt83 4663 6355(n)m 168 fnt78 4765 6349(-)m
+4877(1)s 240 fnt78 4955 6434(,)m 240 fnt83 5062 6442(g)m
+168 fnt83 5173 6355(n)m 168 fnt78 5275 6349(-)m 5387(1)s
+240 fnt78 5465 6434(,)m 240 fnt83 5572 6442(x)m 168 fnt83
+5678 6355(n)m 240 fnt78 5770 6434(\))m 5908(+)s 240 fnt83
+6109 6442(right)m 240 fnt78 6590 6434(\()m 240 fnt83 6674 6442(x)m
+168 fnt83 6780 6355(n)m 240 fnt78 6872 6434(\))m 240 fnt83
+485 6039(abo)m 2(ve)k 240 fnt78 1060 6031(\()m 240 fnt83
+1144 6039(X)m 240 fnt78 1312 6031(\))m 1474(=)s 240 fnt83
+1687 6039(abo)m 2(ve)k 240 fnt78 2262 6031(\()m 240 fnt83
+2346 6039(x)m 168 fnt78 2452 5944(1)m 240 fnt78 2530 6031(\))m
+2680(\255)s 2901(\274)s 3199(\255)s 240 fnt83 3420 6039(abo)m 2(ve)k
+240 fnt78 3995 6031(\()m 240 fnt83 4079 6039(x)m 168 fnt83
+4185 5950(n)m 240 fnt78 4277 6031(\))m 240 fnt83 480 5636(below)m
+240 fnt78 1060 5628(\()m 240 fnt83 1144 5636(X)m 240 fnt78
+1312 5628(\))m 1474(=)s 240 fnt83 1687 5636(below)m 240 fnt78
+2267 5628(\()m 240 fnt83 2351 5636(x)m 168 fnt78 2457 5541(1)m
+240 fnt78 2535 5628(\))m 2685(\255)s 2906(\274)s 3204(\255)s
+240 fnt83 3425 5636(below)m 240 fnt78 4005 5628(\()m 240 fnt83
+4089 5636(x)m 168 fnt83 4195 5547(n)m 240 fnt78 4287 5628(\))m
+240 fnt82 0 5041(where)m 240 fnt78 693 5035(\255)m 240 fnt82
+943 5041(returns)m 1678(the)s 2046(lar)s 4(ger)k 2679(of)s
+2971(its)s 3267(tw)s 2(o)k 3698(parameters.)s 4930(Similar)s
+5712(formulas)s 6633(are)s 7001(easily)s 7632(deri)s 6(v)k 3(ed)k
+8419(for)s 8778(the)s 0 4753(other)m 551(operators.)s 480 4379(F)m 3(or)k
+866(purposes)s 1765(of)s 2033(e)s 3(xposition)k 3081(we)s
+3412(will)s 3835(no)s 6(w)k 4293(mak)s 2(e)k
+4862(the)s 5207(simplifying)s 6358(assumptions)s 7589(that)s 8004(all)s
+8294(g)s 1(aps)k 8779(are)s 220 fnt35 0 4088(0i)m
+240 fnt82 156 4091(,)m 248(all)s 525(column)s 1285(marks)s
+1904(lie)s 2183(at)s 2399(the)s 2732(left)s 3093(edge,)s
+3637(and)s 4025(all)s 4303(ro)s 6(w)k 4707(marks)s
+5327(lie)s 5605(at)s 5822(the)s 6154(top)s 6498(edge.)s
+7098(Then)s 7632(the)s 7964(size)s 8376(of)s 8631(each)s
+0 3803(object)m 644(can)s 1033(be)s 1315(e)s 3(xpressed)k
+2313(by)s 2607(just)s 3012(tw)s 2(o)k 3422(numbers,)s
+4353(width)s 4955(and)s 5359(height,)s 6064(and)s 6468(the)s
+6816(four)s 7274(formulas)s 8174(reduce)s 8867(to)s 240 fnt83
+555 3300(width)m 240 fnt78 1094 3292(\()m 240 fnt83 1178 3300(x)m
+168 fnt78 1284 3207(1)m 240 fnt78 1434 3292(|)m 1551(\274)s
+1849(|)s 240 fnt83 1966 3300(x)m 168 fnt83 2072 3213(n)m
+240 fnt78 2164 3292(\))m 2326(=)s 240 fnt83 2539 3300(width)m
+240 fnt78 3078 3292(\()m 240 fnt83 3162 3300(x)m 168 fnt78
+3268 3207(1)m 240 fnt78 3346 3292(\))m 3484(+)s 3685(\274)s
+3971(+)s 240 fnt83 4172 3300(width)m 240 fnt78 4711 3292(\()m
+240 fnt83 4795 3300(x)m 168 fnt83 4901 3213(n)m 240 fnt78
+4993 3292(\))m 240 fnt83 480 2897(height)m 240 fnt78 1094 2889(\()m
+240 fnt83 1178 2897(x)m 168 fnt78 1284 2804(1)m 240 fnt78
+1434 2889(|)m 1551(\274)s 1849(|)s 240 fnt83 1966 2897(x)m
+168 fnt83 2072 2810(n)m 240 fnt78 2164 2889(\))m 2326(=)s
+240 fnt83 2539 2897(height)m 240 fnt78 3153 2889(\()m 240 fnt83
+3237 2897(x)m 168 fnt78 3343 2804(1)m 240 fnt78 3421 2889(\))m
+3571(\255)s 3792(\274)s 4090(\255)s 240 fnt83 4311 2897(height)m
+240 fnt78 4925 2889(\()m 240 fnt83 5009 2897(x)m 168 fnt83
+5115 2810(n)m 240 fnt78 5207 2889(\))m 240 fnt82 0 2353(The)m
+428(corresponding)s 1850(formulas)s 2750(for)s 3088(v)s 3(ertical)k
+3855(concatenation)s 5240(are)s 240 fnt83 555 1803(width)m 240 fnt78
+1094 1795(\()m 240 fnt83 1178 1803(x)m 168 fnt78 1284 1710(1)m
+240 fnt83 1434 1803(/)m 240 fnt78 1609 1795(\274)m 240 fnt83
+1907 1803(/)m 2082(x)s 168 fnt83 2188 1716(n)m 240 fnt78
+2280 1795(\))m 2442(=)s 240 fnt83 2655 1803(width)m 240 fnt78
+3194 1795(\()m 240 fnt83 3278 1803(x)m 168 fnt78 3384 1710(1)m
+240 fnt78 3462 1795(\))m 3612(\255)s 3833(\274)s 4131(\255)s
+240 fnt83 4352 1803(width)m 240 fnt78 4891 1795(\()m 240 fnt83
+4975 1803(x)m 168 fnt83 5081 1716(n)m 240 fnt78 5173 1795(\))m
+240 fnt83 480 1400(height)m 240 fnt78 1094 1392(\()m 240 fnt83
+1178 1400(x)m 168 fnt78 1284 1307(1)m 240 fnt83 1434 1400(/)m
+240 fnt78 1609 1392(\274)m 240 fnt83 1907 1400(/)m 2082(x)s
+168 fnt83 2188 1313(n)m 240 fnt78 2280 1392(\))m 2442(=)s
+240 fnt83 2655 1400(height)m 240 fnt78 3269 1392(\()m 240 fnt83
+3353 1400(x)m 168 fnt78 3459 1307(1)m 240 fnt78 3537 1392(\))m
+3675(+)s 3876(\274)s 4162(+)s 240 fnt83 4363 1400(height)m
+240 fnt78 4977 1392(\()m 240 fnt83 5061 1400(x)m 168 fnt83
+5167 1313(n)m 240 fnt78 5259 1392(\))m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(10)s 4710(-)s 0 13253(According)m 1063(to)s
+1302(these)s 1849(formulas,)s 2805(the)s 3153(height)s 3811(of)s
+gsave
+480 11559 translate
+240 fnt83 3044 1354 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1240 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1353 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1691 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 56 790 240 288 12 1804 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3044 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 11108(is)m
+240 fnt78 480 10600([)m 240 fnt83 563 10608(height)m 240 fnt78
+1177 10600(\()m 240 fnt83 1261 10608(a)m 240 fnt78 1388 10600(\))m
+1538(\255)s 240 fnt83 1759 10608(height)m 240 fnt78 2373 10600(\()m
+240 fnt83 2457 10608(b)m 240 fnt78 2583 10600(\))m 2661(])s
+2792(+)s 2993([)s 240 fnt83 3076 10608(height)m 240 fnt78
+3690 10600(\()m 240 fnt83 3774 10608(c)m 240 fnt78 3888 10600(\))m
+4038(\255)s 240 fnt83 4259 10608(height)m 240 fnt78 4873 10600(\()m
+240 fnt83 4957 10608(d)m 240 fnt78 5095 10600(\))m 5173(])s
+240 fnt82 0 10104(which)m 642(is)s 852(correct,)s 1621(b)s 4(ut)k
+1983(for)s 2321(width)s 2923(the)s 3(y)k 3386(yield)s
+240 fnt78 480 9546([)m 240 fnt83 563 9554(width)m 240 fnt78
+1102 9546(\()m 240 fnt83 1186 9554(a)m 240 fnt78 1313 9546(\))m
+1451(+)s 240 fnt83 1652 9554(width)m 240 fnt78 2191 9546(\()m
+240 fnt83 2275 9554(b)m 240 fnt78 2401 9546(\))m 2479(])s
+2622(\255)s 2843([)s 240 fnt83 2926 9554(width)m 240 fnt78
+3465 9546(\()m 240 fnt83 3549 9554(c)m 240 fnt78 3663 9546(\))m
+3801(+)s 240 fnt83 4002 9554(width)m 240 fnt78 4541 9546(\()m
+240 fnt83 4625 9554(d)m 240 fnt78 4763 9546(\))m 4841(])s
+240 fnt82 0 9050(which)m 645(is)s 859(not,)s 1276(since)s
+1827(it)s 2023(does)s 2517(not)s 2887(tak)s 2(e)k
+3343(the)s 3694(mer)s 4(ging)k 4544(of)s 4819(column)s
+5598(marks)s 6237(into)s 6666(account.)s 7578(The)s 8010(asymmetry)s
+0 8762(between)m 874(horizontal)s 1918(and)s 2342(v)s 3(ertical)k
+3130(has)s 3520(come)s 4114(about)s 4726(because)s 5560(the)s
+5928(ro)s 6(w)k 6368(entries,)s 7131(such)s 7648(as)s
+240 fnt83 7918 8764(a)m 240 fnt82 8113 8762(and)m 240 fnt83
+8537 8764(b)m 240 fnt82 8651 8762(,)m 8779(are)s 0 8474(adjacent)m
+849(in)s 1085(the)s 1426(tree,)s 1883(b)s 4(ut)k
+2238(the)s 2579(column)s 3346(entries,)s 4082(such)s 4571(as)s
+240 fnt83 4814 8476(a)m 240 fnt82 4982 8474(and)m 240 fnt83
+5379 8476(c)m 240 fnt82 5481 8474(,)m 5581(are)s 5920(not.)s
+6383(It)s 6581(w)s 2(ould)k 7229(be)s 7504(possible)s
+8337(to)s 8568(solv)s 3(e)k 0 8186(this)m 395(cross-linking)s
+1694(problem)s 2550(by)s 2842(augmenting)s 4024(the)s 4370(size)s
+4795(information)s 5979(stored)s 6619(in)s 6861(each)s 7354(node)s
+7875(to)s 8112(record)s 8778(the)s 0 7898(number)m 791(of)s
+1063(marks)s 1698(and)s 2103(the)s 2451(size)s 2879(of)s
+3150(each,)s 3696(b)s 4(ut)k 4058(the)s 4407(author)s
+5078(has)s 5449(preferred)s 6381(the)s 6730(follo)s 6(wing)k
+7707(method)s 8484(which)s 0 7610(mak)m 2(es)k 660(structural)s
+1616(changes)s 2438(to)s 2677(the)s 3025(tree)s 3438(instead.)s
+480 7236(If)m 240 fnt83 715 7238(a)m 240 fnt82 896 7236(and)m
+240 fnt83 1305 7238(c)m 240 fnt82 1473 7236(share)m 2038(a)s
+2210(column)s 2990(mark,)s 3594(the)s 3(y)k 4063(each)s
+4563(might)s 5187(as)s 5442(well)s 5914(ha)s 4(v)k 3(e)k
+6420(width)s 240 fnt83 7028 7238(width)m 240 fnt78 7572 7230(\()m
+240 fnt83 7662 7238(a)m 240 fnt78 7795 7230(\))m 7961(\255)s
+240 fnt83 8199 7238(width)m 240 fnt78 8743 7230(\()m 240 fnt83
+8833 7238(c)m 240 fnt78 8953 7230(\))m 240 fnt82 9019 7236(,)m
+0 6948(since)m 547(all)s 840(width)s 1442(calculations)s 2635(apply)s
+3221(to)s 3460(entire)s 4060(columns.)s 5035(Accordingly)s 15(,)k
+6323(we)s 6659(introduce)s 7618(a)s 7784(ne)s 6(w)k
+8232(operator)s 9(,)k 240 fnt83 0 6662(COL)m 240 fnt82
+466 6660(,)m 573(de\207ned)s 1336(by)s 240 fnt83 480 6110(width)m
+240 fnt78 1019 6102(\()m 240 fnt83 1103 6110(x)m 168 fnt78
+1209 6017(1)m 240 fnt83 1347 6110(COL)m 240 fnt78 1885 6102(\274)m
+240 fnt83 2171 6110(COL)m 2709(x)s 168 fnt83 2815 6023(n)m
+240 fnt78 2907 6102(\))m 3057(=)s 240 fnt83 3270 6110(width)m
+240 fnt78 3809 6102(\()m 240 fnt83 3893 6110(x)m 168 fnt78
+3999 6017(1)m 240 fnt78 4077 6102(\))m 4227(\255)s 4448(\274)s
+4746(\255)s 240 fnt83 4967 6110(width)m 240 fnt78 5506 6102(\()m
+240 fnt83 5590 6110(x)m 168 fnt83 5696 6023(n)m 240 fnt78
+5788 6102(\))m 240 fnt82 0 5566(and)m 440(replace)s 1221(both)s
+240 fnt83 1741 5568(a)m 240 fnt82 1952 5566(and)m 240 fnt83
+2393 5568(c)m 240 fnt82 2591 5566(by)m 240 fnt83 2922 5568(a)m
+3218(COL)s 3865(c)s 240 fnt82 3967 5566(.)m 4168(T)s 19(o)k
+4504(pre)s 6(v)k 3(ent)k 240 fnt83 5309 5568(COL)m
+240 fnt82 5871 5566(operators)m 6848(from)s 7408(disturbing)s 8468(height)s
+0 5278(calculations,)m 1248(we)s 1583(de\207ne)s 2224(a)s 2390(binary)s
+3055(operator)s 3911(called)s 240 fnt83 4539 5280(SPLIT)m 240 fnt82
+5228 5278(by)m 240 fnt83 555 4775(width)m 240 fnt78 1094 4767(\()m
+240 fnt83 1178 4775(x)m 1356(SPLIT)s 2057(y)s 240 fnt78
+2171 4767(\))m 2333(=)s 240 fnt83 2546 4775(width)m 240 fnt78
+3085 4767(\()m 240 fnt83 3169 4775(x)m 240 fnt78 3287 4767(\))m
+240 fnt83 480 4372(height)m 240 fnt78 1094 4364(\()m 240 fnt83
+1178 4372(x)m 1356(SPLIT)s 2057(y)s 240 fnt78 2171 4364(\))m
+2333(=)s 240 fnt83 2546 4372(height)m 240 fnt78 3160 4364(\()m
+240 fnt83 3244 4372(y)m 240 fnt78 3358 4364(\))m 240 fnt82
+0 3868(which)m 642(switches)s 1516(height)s 2174(and)s 2578(width)s
+3180(calculations)s 4372(onto)s 4851(dif)s 6(ferent)k 5726(subtrees.)s
+6673(Then)s 7222(the)s 7570(transformation)s gsave
+480 2169 translate
+240 fnt83 338 1359 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+338 1359 56 1298 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 1016 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+end end restore
+grestore
+240 fnt78 1130 3407(\336)m gsave
+1671 2169 translate
+240 fnt83 2564 1359 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1386 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+484 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 935 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1048 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1386 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+614 338 56 282 240 288 12 1499 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2113 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 2226 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2564 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 1669(widens)m 240 fnt83
+740 1671(a)m 240 fnt82 926 1669(to)m 240 fnt83 1176 1671(width)m
+240 fnt78 1726 1663(\()m 240 fnt83 1821 1671(a)m 240 fnt78
+1959 1663(\))m 2142(\255)s 240 fnt83 2396 1671(width)m 240 fnt78
+2946 1663(\()m 240 fnt83 3041 1671(c)m 240 fnt78 3166 1663(\))m
+240 fnt82 3303 1669(without)m 4105(af)s 6(fecting)k 5011(its)s
+5298(height;)s 6019(it)s 6222(is)s 6443(applied)s 7216(to)s
+7466(e)s 6(v)k 3(ery)k 8053(object)s 8708(that)s
+0 1381(shares)m 638(its)s 904(column)s 1669(mark)s 2211(with)s
+2683(at)s 2905(least)s 3392(one)s 3784(other)s 4325(object.)s
+5063(A)s 5283(similar)s 5995(transformation)s 7448(in)s 9(v)k 4(olving)k
+8396(a)s 240 fnt83 8552 1383(R)m 9(O)k 12(W)k
+240 fnt82 0 1093(operator)m 856(deals)s 1398(with)s 1880(shared)s
+2562(ro)s 6(w)k 2982(marks.)s 3730(The)s 4158(ef)s 6(fect)k
+4754(on)s 5051(our)s 5430(little)s 5922(table)s 6442(is)s
+6652(to)s 6891(replace)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(11)s 4700(-)s gsave
+480 12065 translate
+240 fnt83 3044 1354 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1240 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1353 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78
+136 106(\244)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1691 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 56 790 240 288 12 1804 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3044 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 11614(by)m gsave
+480 8904 translate
+240 fnt83 6248 2370 0 2314 240 288 12 LoutGraphic
+gsave
+grestore save gsave 70 dict begin lfigdict begin
+grestore
+3293 338 56 282 240 288 12 2955 2032 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+3096 1862 0 1806 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1717 338 56 282 240 288 12 1379 1524 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+1520 1354 0 1298 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1520 1354 0 1298 240 288 12 1576 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1806 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+3096 1862 0 1806 240 288 12 3152 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1717 338 56 282 240 288 12 1379 1524 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78
+156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+1520 1354 0 1298 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(COL)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1520 1354 0 1298 240 288 12 1576 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 6248 1806 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 8453(In)m 244(f)s 2(act,)k
+693(common)s 1576(sube)s 3(xpressions)k 3060(are)s 3395(identi\207ed)s
+4343(\(tri)s 6(vially\))k 5286(and)s 5678(the)s 6013(result)s
+6591(is)s 6788(a)s 6942(directed)s 7756(ac)s 3(yclic)k
+8469(graph;)s 0 8165(each)m 486(af)s 6(fected)k 1296(leaf)s
+1716(has)s 2076(tw)s 2(o)k 2477(parents,)s 3264(one)s
+3657(for)s 3985(width)s 4578(and)s 4972(one)s 5365(for)s
+5693(height;)s 6394(and)s 6788(each)s 240 fnt83 7274 8167(COL)m
+240 fnt82 7790 8165(or)m 240 fnt83 8040 8167(R)m 9(O)k 12(W)k
+240 fnt82 8604 8165(node)m 0 7877(has)m 360(one)s 752(parent)s
+1398(and)s 1792(one)s 2184(child)s 2709(for)s 3037(each)s
+3521(object)s 4155(lying)s 4690(on)s 4976(the)s 5314(corresponding)s
+6726(mark.)s 7370(The)s 7788(data)s 8235(structure)s 0 7589(roughly)m
+799(doubles)s 1595(in)s 1838(size,)s 2316(and)s 2720(this)s
+3116(occurs)s 3791(only)s 4271(rarely)s 4881(in)s 5124(practice.)s
+480 7215(This)m 956(method)s 1732(can)s 2121(cope)s 2629(with)s
+3111(an)s 3(y)k 3508(le)s 3(g)k 1(al)k
+4023(input,)s 4622(including)s 220 fnt35 480 6714({ a // c | d } | { b / e })m 480 6426(/ { f / i } | { g | h // j })m
+240 fnt82 0 5927(which)m 642(produces)s 1557(o)s 3(v)k 3(erlapping)k
+2747(spanning)s 3665(columns:)s gsave
+480 3779 translate
+240 fnt83 1699 1808 0 1695 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1133 452 113 339 240 288 60 0 1356 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 511 178(a)m
+grestore
+566 452 113 339 240 288 60 1133 1356 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83
+228 150(b)m
+grestore
+566 452 113 339 240 288 60 0 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 234 178(c)m
+grestore
+566 452 113 339 240 288 60 566 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 222 150(d)m
+
+grestore
+566 452 113 339 240 288 60 1132 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 235 178(e)m
+grestore
+566 452 113 339 240 288 60 0 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 235 173(f)m
+grestore
+566 452 113 339 240 288 60 566 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83
+228 200(g)m
+grestore
+566 452 113 339 240 288 60 1132 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 228 149(h)m
+grestore
+566 452 113 339 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 253 153(i)m
+
+grestore
+1133 452 113 339 240 288 60 566 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 535 176(j)m
+grestore
+end end restore
+grestore
+0 3328(The)m 428(box)s 3(es)k
+1035(ha)s 4(v)k 3(e)k 1536(been)s 2045(added)s
+2675(to)s 2914(clarify)s 3590(the)s 3938(structure.)s 4937(The)s
+5365(width)s 5967(of)s 6238(this)s 6634(object)s 7278(is)s
+7488(formally)s 240 fnt78 480 2770(\()m 564(\()s 240 fnt83
+648 2778(width)m 240 fnt78 1187 2770(\()m 240 fnt83 1271 2778(a)m
+240 fnt78 1398 2770(\))m 1548(\255)s 1769(\()s 240 fnt83
+1853 2778(x)m 240 fnt78 2031 2770(+)m 240 fnt83 2232 2778(y)m
+240 fnt78 2346 2770(\))m 2424(\))s 2562(+)s 240 fnt83
+2763 2778(z)m 240 fnt78 2866 2770(\))m 3016(\255)s 3237(\()s
+240 fnt83 3321 2778(x)m 240 fnt78 3499 2770(+)m 3700(\()s
+3784(\()s 240 fnt83 3868 2778(y)m 240 fnt78 4042 2770(+)m
+240 fnt83 4243 2778(z)m 240 fnt78 4346 2770(\))m 4496(\255)s
+240 fnt83 4717 2778(width)m 240 fnt78 5256 2770(\()m 240 fnt83
+5340 2778(j)m 240 fnt78 5418 2770(\))m 5496(\))s 5574(\))s
+240 fnt82 0 2274(where)m 240 fnt83 480 1773(x)m 240 fnt78
+670 1765(=)m 240 fnt83 883 1773(width)m 240 fnt78 1422 1765(\()m
+240 fnt83 1506 1773(c)m 240 fnt78 1620 1765(\))m 1770(\255)s
+240 fnt83 1991 1773(width)m 240 fnt78 2530 1765(\()m 240 fnt83
+2662 1773(f)m 240 fnt78 2823 1765(\))m 2973(\255)s 240 fnt83
+3194 1773(width)m 240 fnt78 3733 1765(\()m 240 fnt83 3817 1773(i)m
+240 fnt78 3892 1765(\))m 240 fnt83 480 1222(y)m 240 fnt78
+666 1214(=)m 240 fnt83 879 1222(width)m 240 fnt78 1418 1214(\()m
+240 fnt83 1502 1222(d)m 240 fnt78 1688 1214(\))m 1838(\255)s
+240 fnt83 2059 1222(width)m 240 fnt78 2598 1214(\()m 240 fnt83
+2682 1222(g)m 240 fnt78 2808 1214(\))m 240 fnt83 480 671(z)m
+240 fnt78 655 663(=)m 240 fnt83 868 671(width)m 240 fnt78
+1407 663(\()m 240 fnt83 1491 671(b)m 240 fnt78 1617 663(\))m
+1767(\255)s 240 fnt83 1988 671(width)m 240 fnt78 2527 663(\()m
+240 fnt83 2611 671(e)m 240 fnt78 2722 663(\))m 2872(\255)s
+240 fnt83 3093 671(width)m 240 fnt78 3632 663(\()m 240 fnt83
+3716 671(h)m 240 fnt78 3843 663(\))m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(12)s 4710(-)s 0 12968(It)m 224(seems)s
+878(clear)s 1420(that)s 240 fnt83 1857 12970(y)m 240 fnt82
+2038 12968(at)m 2289(least)s 2805(must)s 3349(appear)s 4065(twice)s
+4657(in)s 4919(an)s 3(y)k 5335(e)s 3(xpression)k
+6431(for)s 6788(the)s 7155(width)s 7776(of)s 8066(this)s
+8482(object)s 0 12680(made)m 602(out)s 997(of)s 1297(simple)s
+2019(addition)s 2889(and)s 3322(maxing)s 4121(operations,)s 5253(sho)s 6(wing)k
+6141(that)s 6588(an)s 6900(ordinary)s 7793(tree)s 8235(structure)s
+0 12392(is)m 227(insuf\207cient)s 1379(for)s 1734(o)s 3(v)k 3(erlapping)k
+2941(spanning)s 3876(columns.)s 4868(The)s 5313(Basser)s 6027(Lout)s
+6556(interpreter)s 7626(actually)s 8453(rejects)s 0 12104(such)m 521(structures,)s
+1581(o)s 6(wing)k 2252(to)s 2517(the)s 2890(author')s 13(s)k
+3736(doubts)s 4451(about)s 5069(the)s 5442(implementability)s 7153(of)s
+240 fnt83 7449 12106(Constr)m 3(ained)k 240 fnt82 8722 12104(and)m
+240 fnt83 0 11818(AdjustSize)m 240 fnt82 1049 11816(\(Section)m 1902(5.3\))s
+2330(on)s 2627(them;)s 3217(b)s 4(ut)k 3579(with)s
+4061(hindsight)s 5012(this)s 5408(caution)s 6169(w)s 2(as)k
+6590(unnecessary)s 15(.)k 480 11442(The)m 915(directed)s 1749(ac)s 3(yclic)k
+2482(graph)s 3091(is)s 3308(ordered)s 4104(in)s 4354(the)s
+4709(sense)s 5290(that)s 5715(the)s 6071(order)s 6642(of)s
+6920(the)s 7275(edges)s 7878(entering)s 8722(and)s 0 11154(lea)m 4(ving)k
+746(each)s 1234(node)s 1748(matters.)s 2607(The)s 3028(structure)s
+3911(is)s 4114(highly)s 4773(dynamic,)s 5696(and)s 6093(tra)s 4(v)k 3(ersals)k
+7044(both)s 7519(with)s 7994(and)s 8390(ag)s 1(ainst)k
+0 10866(the)m 349(arro)s 6(ws)k 1045(are)s 1394(required.)s
+2355(After)s 2920(a)s 3087(fe)s 6(w)k 3494(ad-)s
+3788(hoc)s 4189(attempts)s 5050(to)s 5291(e)s 3(xtend)k
+5985(the)s 6334(usual)s 6896(tree)s 7310(representation)s 8722(had)s
+0 10578(f)m 2(ailed,)k 665(the)s 1030(author)s 1718(de)s 6(v)k 3(eloped)k
+2769(a)s 2952(representation)s 4379(based)s 5000(on)s 5314(doubly)s
+6051(link)s 2(ed)k 6723(lists)s 7175(of)s 7463(records)s
+8235(denoting)s 0 10290(links,)m 578(whose)s 1253(\210e)s 3(xibility)k
+2240(more)s 2794(than)s 3270(compensated)s 4584(for)s 4929(the)s
+5284(some)s 6(what)k 6315(e)s 3(xcessi)k 6(v)k 3(e)k
+7282(memory)s 8140(consump)s 8998(-)s 0 10002(tion.)m 536(F)s 3(or)k
+925(e)s 3(xample,)k gsave
+480 8136 translate
+240 fnt83 3282 1526 0 1470 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+338 338 56 282 240 288 12 0 1188 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(A) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 2944 1188 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+123 105(b)m
+grestore
+(B) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(C) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1472 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@CTR lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@CTR C@CTR A@CTR lfigangle C@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@CTR lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@CTR D@CTR A@CTR lfigangle D@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@CTR B@CTR D@CTR lfigangle B@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@CTR D@CTR B@CTR lfigangle D@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 7685(is)m 210(represented)s 1369(by)s gsave
+1135 3169 translate
+240 fnt83 6796 4176 0 4120 240 288 12 LoutGraphic
+gsave
+grestore save gsave 300 dict begin lfigdict begin
+grestore
+452 1014 0 958 240 288 12 0 3162 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 180 128(a)m
+
+grestore
+(BASE) lfigpromotelabels
+grestore
+(A) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 6344 3162 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 180 105(b)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(B) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 0 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 1586 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83
+104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(M) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 4758 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(N) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 185 128(c)m
+
+grestore
+(BASE) lfigpromotelabels
+grestore
+(C) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 3172 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 175 105(d)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 A@MID@CTR L@MID@CTR A@MID@CTR M@MID@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+A@MID@CTR L@MID@CTR A@MID@CTR M@MID@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 L@TOP@CTR C@TOP@CTR L@TOP@CTR C@TOP@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+L@TOP@CTR C@TOP@CTR L@TOP@CTR C@TOP@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 M@TOP@CTR D@TOP@CTR N@TOP@CTR D@TOP@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+M@TOP@CTR D@TOP@CTR N@TOP@CTR D@TOP@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 B@MID@CTR N@MID@CTR B@MID@CTR N@MID@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+B@MID@CTR N@MID@CTR B@MID@CTR N@MID@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 2718(where)m 240 fnt83 645 2720(LK)m
+240 fnt82 1017 2718(tags)m 1458(a)s 1630(record)s 2304(representing)s
+3543(a)s 3715(link.)s 4257(The)s 4690(\207rst)s 5127(list)s
+5484(in)s 5732(an)s 3(y)k 6135(node)s 6663(contains)s
+7516(all)s 7815(the)s 8169(incoming)s 0 2430(links,)m 577(the)s
+931(second)s 1660(contains)s 2514(the)s 2867(outgoing)s 3778(ones.)s
+4387(The)s 4821(node)s 5348(serv)s 3(es)k 5999(as)s
+6255(the)s 6609(header)s 7311(for)s 7655(both)s 8144(lists.)s
+8698(The)s 0 2142(required)m 890(operations)s 1974(reduce)s 2704(to)s
+2979(simple)s 3709(appends,)s 4638(deletes,)s 5444(and)s 5885(tra)s 4(v)k 3(ersals)k
+6880(of)s 7187(doubly)s 7944(link)s 2(ed)k 8635(lists,)s
+0 1854(all)m 325(ha)s 4(ving)k 1058(small)s 1663(constant)s
+2552(cost.)s 3133(There)s 3779(is)s 4021(a)s 4219(highly)s
+4918(tuned)s 5540(memory)s 6423(allocator)s 9(,)k 7389(and)s
+7825(care)s 8310(is)s 8553(tak)s 2(en)k 0 1566(to)m
+269(dispose)s 1073(of)s 1374(each)s 1900(node)s 2452(when)s
+3058(the)s 3436(last)s 3858(incoming)s 4845(link)s 5308(is)s
+5549(deleted,)s 6376(so)s 6672(that)s 7120(there)s 7684(is)s
+7924(no)s 8247(need)s 8788(for)s 0 1278(g)m 1(arbage)k
+812(collection.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(13)s 4705(-)s 480 13253(In)m 739(normal)s
+1475(use)s 1854(the)s 2205(number)s 3000(of)s 3275(nodes)s
+3888(at)s 4124(higher)s 4799(le)s 6(v)k 3(els)k
+5402(of)s 5676(the)s 6028(dag)s 6431(is)s 6644(small)s
+7220(in)s 7467(comparison)s 8644(with)s 0 12965(the)m 351(lea)s 4(v)k 3(es)k
+995(and)s 1402(their)s 1903(incoming)s 2863(links,)s 3438(so)s
+3707(we)s 4046(may)s 4515(estimate)s 5369(the)s 5720(space)s
+6311(comple)s 3(xity)k 7441(at)s 7676(about)s 8271(60)s
+8570(bytes)s 0 12677(per)m 355(input)s 896(w)s 2(ord)k
+1433(\(20)s 1797(bytes)s 2342(per)s 2696(link,)s 3165(40)s
+3449(per)s 3803(leaf)s 4222(node\).)s 4920(Careful)s 5680(optimization)s
+6935(could)s 7514(easily)s 8114(halv)s 3(e)k 8674(this,)s
+0 12389(b)m 4(ut)k 362(since)s 909(memory)s 1760(is)s
+1970(reclaimed)s 2969(after)s 3465(printing)s 4275(each)s 4770(page)s
+5278(there)s 5811(is)s 6021(little)s 6513(need.)s 240 fnt84
+0 11740(2.5.)m 471(Context-sensiti)s 2(v)k 2(e)k 2274(attrib)s 4(utes)k
+3318(of)s 3590(objects)s 240 fnt82 480 11264(Although)m 1466(we)s
+1826(are)s 2198(free)s 2649(to)s 2913(place)s 3498(an)s 3(y)k
+3920(object)s 4588(in)s 4856(an)s 3(y)k 5278(conte)s 3(xt,)k
+6111(the)s 6484(conte)s 3(xt)k 7270(must)s 7820(in\210uence)s
+8778(the)s 0 10976(appearance)m 1131(of)s 1402(the)s 1750(object,)s
+2441(since)s 2988(otherwise)s 220 fnt35 480 10477(A shor)m -8(t par)k 2(ag)k 2(r)k 2(aph of te)k 6(xt.)k
+240 fnt82 0 9978(could)m 588(not)s 952(appear)s 1647(in)s
+1887(a)s 2051(v)s 6(ariety)k 2760(of)s 3028(fonts,)s
+3611(column)s 4384(widths,)s 5126(etc.)s 5566(This)s 6040(in\210uence)s
+6970(cannot)s 7666(tak)s 2(e)k 8116(the)s 8461(purely)s
+0 9690(static)m 569(form)s 1106(that)s 1538(block-structured)s 3175(languages)s
+4196(use)s 4585(to)s 4837(associate)s 5769(v)s 6(alues)k
+6438(with)s 6933(identi\207ers,)s 8009(for)s 8360(then)s 8843(an)s
+0 9402(operator)m 850(could)s 1434(not)s 1794(in\210uence)s 2721(the)s
+3063(appearance)s 4188(of)s 4453(its)s 4723(parameters;)s 5876(and)s
+6274(a)s 6434(state)s 6921(v)s 6(ariable)k 7734(solution)s
+8556(is)s 8760(not)s 0 9114(compatible)m 1118(with)s 1600(the)s
+1948(o)s 3(v)k 3(erall)k 2660(functional)s 3684(design.)s
+480 8740(The)m 914(information)s 2105(needed)s 2848(from)s 3378(the)s
+3733(conte)s 3(xt)k 4500(seems)s 5141(quite)s 5682(limited,)s
+6471(comprising)s 7607(the)s 7961(font)s 8413(f)s 2(amily)k 15(,)k
+0 8452(f)m 2(ace,)k 525(and)s 952(size)s 1402(to)s
+1664(use,)s 2114(the)s 2485(style)s 3015(of)s 3309(paragraph)s
+4345(breaking)s 5259(required,)s 6185(ho)s 6(w)k 6669(much)s
+7281(space)s 7891(to)s 8154(substitute)s 0 8164(between)m 873(the)s
+1240(w)s 2(ords)k 1893(of)s 2184(paragraphs,)s 3359(and)s
+3782(ho)s 6(w)k 4263(much)s 4871(horizontal)s 5914(and)s
+6337(v)s 3(ertical)k 7124(space)s 7730(is)s 7959(a)s 4(v)k 6(ailable)k
+8887(to)s 0 7876(recei)m 6(v)k 3(e)k 763(the)s
+1139(object.)s 1914(These)s 2569(four)s 3054(items)s 3650(constitute)s
+4662(the)s 5038(so-called)s 5985(`style)s 6599(information')s 7866(of)s
+8165(Lout.)s 8809(As)s 0 7588(graphics)m 902(rendering)s 1912(hardw)s 2(are)k
+2896(impro)s 3(v)k 3(es,)k 3928(the)s 4317(style)s
+4865(information)s 6091(will)s 6558(probably)s 7504(gro)s 6(w)k
+8085(to)s 8366(include)s 0 7300(colour)m 671(and)s 1075(te)s 3(xture)k
+1791(information.)s 480 6926(The)m 908(w)s 2(ay)k 1359(to)s
+1598(deal)s 2051(with)s 2533(fonts)s 3062(at)s 3294(least)s
+3791(is)s 4001(v)s 3(ery)k 4477(clear:)s 220 fnt35
+480 6425({ )m 11(Times Slope 12p } @F)k 6(ont { Hello)k 8(, w)k 2(or)k -3(ld })k
+240 fnt82 0 5929(should)m 697(ha)s 4(v)k 3(e)k
+1198(result)s 240 fnt83 480 5475(Hello,)m 1104(world)s 240 fnt82
+0 4993(Lout)m 528(also)s 983(pro)s 3(vides)k 220 fnt35
+1872 4990(@Break)m 240 fnt82 2745 4993(and)m 220 fnt35 3166 4990(@Space)m
+240 fnt82 4080 4993(symbols)m 4946(for)s 5301(controlling)s 6420(the)s
+6785(paragraph)s 7815(breaking)s 8722(and)s 0 4705(space)m 610(styles)s
+1229(mentioned)s 2320(abo)s 3(v)k 3(e.)k 3074(These)s
+3724(w)s 2(ork)k 4299(in)s 4565(the)s 4937(same)s
+5507(w)s 2(ay)k 15(,)k 6020(returning)s 6972(their)s
+7493(right)s 8028(parameters)s 0 4417(in)m 261(the)s 627(style)s
+1152(of)s 1441(their)s 1956(left.)s 2455(The)s 2901(implementation)s
+4476(is)s 4704(v)s 3(ery)k 5198(simple:)s 6019(one)s
+6439(merely)s 7174(broadcasts)s 8252(the)s 8619(style)s 0 4129(information)m
+1183(do)s 6(wn)k 1765(into)s 2188(the)s 2533(parse)s
+3091(tree)s 3502(of)s 3771(the)s 4116(right)s 4625(parameter)s 13(.)k
+5728(A)s 5956(font,)s 6445(for)s 6781(e)s 3(xample,)k
+7693(is)s 7901(con)s 9(v)k 3(erted)k 8887(to)s
+0 3841(an)m 278(8-bit)s 783(internal)s 1562(name)s 2130(and)s
+2529(stored)s 3165(in)s 3403(each)s 3892(leaf,)s 4351(while)s
+4932(a)s 5093(breaking)s 5977(style)s 6479(is)s 6683(stored)s
+7320(in)s 7557(the)s 7900(root)s 8339(node)s 8855(of)s
+0 3553(each)m 495(paragraph.)s 480 3179(The)m 954(same)s 1547(language)s
+2514(design)s 3242(can)s 3677(be)s 4006(used)s 4549(for)s
+4933(a)s 4(v)k 6(ailable)k 5888(width)s 6536(and)s
+6986(height,)s 7738(only)s 8264(here)s 8778(the)s 0 2891(implementation)m
+1557(is)s 1767(much)s 2356(more)s 2903(demanding:)s 220 fnt35
+480 2390(2i @Wide {)m 480 2102(\(1\) |0.1i An e)m 6(xample)k 480 1814(containing a small)m 480 1526(par)m 2(ag)k 2(r)k 2(aph of \207lled te)k 6(xt.)k
+480 1238(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(14)s 4710(-)s 0 13256(is)m 210(guaranteed)s
+1317(to)s 1556(be)s 1838(tw)s 2(o)k 2248(inches)s
+2910(wide:)s 480 12753(\(1\))m 891(An)s 1270(e)s 3(xample)k
+2162(containing)s 3254(a)s 891 12465(small)m 1504(paragraph)s 2558(of)s
+2871(\207lled)s 891 12177(te)m 3(xt.)k 0 11724(One)m 448(must)s
+966(calculate)s 1863(that)s 2273(1.9)s 2617(inches)s 3272(minus)s
+3900(the)s 4241(width)s 4836(of)s 220 fnt35 5100 11721(\(1\))m
+240 fnt82 5406 11724(is)m 5609(a)s 4(v)k 6(ailable)k
+6510(to)s 6741(the)s 7082(paragraph,)s 8138(and)s 8534(break)s
+0 11436(it)m 186(accordingly;)s 1421(Basser)s 2111(Lout)s 2617(does)s
+3100(this)s 3490(in)s 3727(tw)s 2(o)k 4130(stages.)s
+4872(In)s 5121(the)s 5463(\207rst,)s 5935(upw)s 2(ard-mo)k 3(ving)k
+7505(stage,)s 8097(widths)s 8779(are)s 0 11148(calculated)m 1018(using)s
+1581(the)s 1920(formulae)s 2829(of)s 3091(Section)s 3856(2.3,)s
+4254(which)s 4887(assume)s 5638(that)s 6047(a)s 4(v)k 6(ailable)k
+6946(space)s 7524(is)s 7725(in\207nite.)s 8557(If)s 8778(the)s
+0 10860(upw)m 2(ard)k 763(mo)s 3(v)k 3(ement)k
+1815(reaches)s 2570(a)s 240 fnt83 2724 10862(WIDE)m 240 fnt82
+3375 10860(node,)m 3936(corresponding)s 5346(to)s 5573(a)s 220 fnt35
+5728 10857(@Wide)m 240 fnt82 6490 10860(operator)m 9(,)k 7372(and)s
+7764(the)s 8100(calculated)s 0 10572(width)m 627(e)s 3(xceeds)k
+1457(that)s 1900(allo)s 6(wed,)k 2784(a)s 2975(second,)s
+3772(do)s 6(wnw)k 2(ard-mo)k 3(ving)k 5661(stage)s
+6234(is)s 6469(initiated)s 7334(which)s 8001(attempts)s 8887(to)s
+0 10284(reduce)m 681(the)s 1017(width)s 1606(by)s 1888(\207nding)s
+2607(and)s 2999(breaking)s 3877(paragraphs.)s 5077(This)s 5541(second)s
+6251(stage)s 6786(is)s 6984(quite)s 7505(routine)s 8226(e)s 3(xcept)k
+8894(at)s 220 fnt35 0 9993(|)m 240 fnt82 84 9996(nodes,)m
+736(whose)s 1390(children)s 2216(are)s 2549(the)s 2883(columns)s
+3731(of)s 3988(a)s 4141(table.)s 4755(It)s 4946(is)s
+5142(necessary)s 6111(to)s 6336(apportion)s 7296(the)s 7630(a)s 4(v)k 6(ailable)k
+8524(width)s 0 9708(\(minus)m 727(inter)s 4(-column)k 2026(g)s 1(aps\))k
+2604(among)s 3321(the)s 3681(columns.)s 4668(Basser)s 5377(Lout)s
+5901(lea)s 4(v)k 3(es)k 6554(narro)s 6(w)k
+7291(columns)s 8166(unbrok)s 2(en)k 0 9420(and)m 404(breaks)s
+1079(the)s 1427(remaining)s 2449(columns)s 3311(to)s 3550(equal)s
+4123(width,)s 4775(using)s 5347(up)s 5640(all)s 5933(of)s
+6204(the)s 6552(a)s 4(v)k 6(ailable)k 7460(space.)s
+480 9046(The)m 897(size)s 1313(of)s 1572(an)s 1844(object)s
+2476(is)s 2675(not)s 3029(clearly)s 3721(determined)s 4843(when)s
+5407(the)s 5744(upw)s 2(ard-mo)k 3(ving)k 7309(size)s
+7725(is)s 7923(less)s 8321(than)s 8778(the)s 0 8758(do)m 6(wnw)k 2(ard-mo)k 3(ving)k
+1871(a)s 4(v)k 6(ailable)k 2786(space,)s 3431(and)s
+3842(the)s 4197(object)s 4849(contains)s 5704(constructs)s 6731(that)s
+7156(depend)s 7913(on)s 8218(a)s 4(v)k 6(ailable)k
+0 8470(space)m 587(\(e.g.)s 1056(right)s 1567(justi\207cation\).)s 2938(F)s 3(or)k
+3327(e)s 3(xample,)k 4241(in)s 220 fnt35 480 7969(2i @Wide { Heading // a |1r)m -8(t b })k
+240 fnt82 0 7470(it)m 211(seems)s 865(natural)s 1603(to)s
+1861(assign)s 2536(a)s 2721(width)s 3342(of)s 3633(tw)s 2(o)k
+4062(inches)s 4744(to)s 5002(the)s 5369(subobject)s 220 fnt35
+6366 7467(a |1r)m -8(t b)k 240 fnt82 7124 7470(because)m 7957(of)s
+8247(the)s 8615(right)s 0 7182(justi\207cation,)m 1270(b)s 4(ut)k
+1667(it)s 1895(w)s 2(ould)k 2585(be)s 2903(equally)s
+3696(plausible)s 4650(if)s 4903(the)s 5286(width)s 5924(of)s
+220 fnt35 6230 7179(Heading)m 240 fnt82 7129 7182(w)m 2(as)k
+7586(assigned)s 8503(to)s 8778(the)s 0 6894(subobject)m 989(instead.)s
+1843(The)s 2284(author)s 2968(is)s 3191(conscious)s 4199(of)s
+4483(ha)s 4(ving)k 5197(f)s 2(ailed)k 5809(to)s
+6061(resolv)s 3(e)k 6817(this)s 7226(matter)s 7908(properly;)s
+8843(an)s 0 6606(e)m 3(xtra)k 534(operator)s 1390(for)s
+1728(controlling)s 2830(a)s 4(v)k 6(ailable)k 3738(space)s
+4325(is)s 4535(probably)s 5440(necessary)s 15(.)k 480 6232(The)m
+930(actual)s 1578(paragraph)s 2614(breaking)s 3527(is)s 3759(just)s
+4187(a)s 4376(simple)s 5092(transformation)s 6578(on)s 6897(the)s
+7268(parse)s 7851(tree;)s 8343(the)s 8714(real)s 0 5944(issue)m
+544(is)s 764(ho)s 6(w)k 1235(to)s 1484(describe)s
+2346(the)s 2704(v)s 6(arious)k 3463(styles:)s 4183(ragged)s
+4902(right,)s 5470(adjusted,)s 6384(outdented,)s 7445(and)s 7859(so)s
+8135(on.)s 8549(Their)s 0 5656(di)m 6(v)k 3(ersity)k
+874(suggests)s 1729(that)s 2140(the)s 3(y)k 2596(should)s
+3286(someho)s 6(w)k 4245(be)s 4519(de\207ned)s 5275(using)s
+5840(more)s 6380(basic)s 6917(features;)s 7777(b)s 4(ut)k
+8132(then)s 8593(there)s 0 5368(are)m 367(algorithms)s 1461(for)s
+1820(high-quality)s 3064(paragraph)s 4098(breaking,)s 5063(which)s 5726(presumably)s
+6917(must)s 7463(be)s 7766(b)s 4(uilt-in.)k 8650(This)s
+0 5080(dilemma)m 915(w)s 2(as)k 1355(not)s 1741(clearly)s
+2463(grasped)s 3285(by)s 3598(the)s 3966(author)s 4656(in)s
+4919(1985,)s 5525(and)s 5949(he)s 6250(included)s 7152(a)s
+7337(b)s 4(uilt-in)k 8113(paragraph)s 0 4792(break)m 2(er)k 9(,)k
+818(with)s 1306(the)s 220 fnt35 1660 4789(@Break)m 240 fnt82
+2522 4792(operator)m 3384(selecting)s 4292(from)s 4822(a)s 4995(\207x)s 3(ed)k
+5535(set)s 5866(of)s 6143(styles.)s 6857(A)s 7093(much)s
+7688(better)s 8298(solution)s 0 4504(based)m 603(on)s 900(g)s 1(alle)k 3(ys)k
+1624(will)s 2050(be)s 2332(gi)s 6(v)k 3(en)k
+2912(in)s 3155(Section)s 3929(5.5,)s 4336(b)s 4(ut,)k
+4745(re)s 3(grettably)k 15(,)k 5868(it)s 6060(is)s
+6270(not)s 6636(implemented.)s 240 fnt84 0 3711(3.)m 291(De\207nitions)s
+240 fnt82 480 3280(The)m 936(need)s 1474(to)s 1741(pro)s 3(vide)k
+2554(a)s 2748(means)s 3438(of)s 3737(packaging)s 4803(useful)s
+5470(pieces)s 6146(of)s 6445(code)s 6982(for)s 7348(easy)s
+7855(repeated)s 8751(use)s 0 2992(w)m 2(as)k 440(recognised)s
+1554(in)s 1816(the)s 2184(v)s 3(ery)k 2679(earliest)s
+3447(programming)s 4822(languages.)s 5962(This)s 6458(need)s 6987(is)s
+7217(e)s 6(v)k 3(en)k 7736(more)s 8303(acute)s
+8883(in)s 0 2704(document)m 1004(formatting,)s 2118(if)s 2335(that)s
+2752(is)s 2962(possible,)s 3852(because)s 4664(the)s 5012(majority)s
+5874(of)s 6145(users)s 6686(are)s 7033(not)s 7398(programmers)s
+8722(and)s 0 2416(do)m 293(not)s 659(understand)s 1767(the)s
+2115(code)s 2623(the)s 3(y)k 3086(in)s 9(v)k 4(ok)k 2(e.)k
+240 fnt84 0 1767(3.1.)m 471(Operators)s 240 fnt82 480 1290(It)m
+680(is)s 885(e)s 6(vident)k 1637(from)s 2156(the)s
+2498(e)s 3(xample)k 3356(of)s 3621(Eqn)s 4059(that)s
+4471(user)s 4(-de\207ned)k 5702(operators)s 6636(are)s 6978(needed)s
+7708(that)s 8121(mimic)s 8778(the)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(15)s 4706(-)s 0 13250(primiti)m 6(v)k 3(e)k
+929(ones)s 1426(in)s 1677(taking)s 2335(objects)s 3071(as)s
+3328(parameters)s 4434(and)s 4845(returning)s 5781(objects)s 6517(as)s
+6774(results.)s 7569(F)s 3(or)k 7965(e)s 3(xample,)k
+8887(to)s 0 12962(de\207ne)m 641(a)s 807(superscript)s 1915(operator)s
+2771(so)s 3037(that)s 220 fnt35 480 12468(2 sup n)m 240 fnt82
+0 11943(appears)m 781(as)s 168 fnt82 1145 12059(n)m 240 fnt78
+1031 11937(2)m 240 fnt82 1227 11943(,)m 1334(the)s 1682(follo)s 6(wing)k
+2659(operator)s 3515(de\207nition)s 4489(may)s 4955(be)s 5237(used:)s
+220 fnt35 480 11444(def sup)m 480 11156( precedence 50)m 480 10868( associativity r)m -3(ight)k
+480 10580( left x)m 480 10292( r)m -3(ight y)k 480 10004({)m 480 9716( @OneRo)m 3(w { | {-2p @F)k 6(ont y} ^/0.5fk x })k
+480 9428(})m 240 fnt82 0 8932(The)m 220 fnt35 481 8929(sup)m
+240 fnt82 940 8932(operator)m 1850(has)s 2273(precedence)s 3458(50,)s
+3858(is)s 4122(right)s 4686(associati)s 6(v)k 3(e,)k
+5886(tak)s 2(es)k 6479(tw)s 2(o)k 6943(objects)s
+7724(as)s 8028(parameters)s 0 8644(passed)m 720(on)s 1041(the)s
+1413(left)s 1814(and)s 2242(right,)s 2825(and)s 3253(returns)s
+3991(the)s 4363(object)s 5031(between)s 5910(braces)s 6595(as)s
+6869(result.)s 7587(This)s 8087(object)s 8756(has)s 0 8356(the)m
+348(structure)s gsave
+608 7875 translate
+280 fnt83 128 191 0 123 280 288 70 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+128 191 0 123 280 288 70 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+128 191 0 123 280 288 70 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+260 fnt35 0 56(y)m
+grestore
+
+grestore
+end end restore
+grestore
+gsave
+480 7740 translate
+280 fnt83 128 135 0 67 280 288 70 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+128 135 0 67 280 288 70 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+128 135 0 67 280 288 70 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+260 fnt35 0 0(x)m
+
+grestore
+
+grestore
+end end restore
+grestore
+0 7289(b)m 4(ut)k 381(with)s 882(the)s 1249(\207rst)s
+1699(ro)s 6(w)k 2138(mark)s 2709(hidden)s 3437(by)s
+3751(the)s 220 fnt35 4118 7286(@OneRo)m 3(w)k 240 fnt82
+5268 7289(operator)m 9(,)k 6181(and)s 220 fnt35 6604 7286(y)m
+240 fnt82 6791 7289(tw)m 2(o)k 7220(points)s 7875(smaller)s
+8657(than)s 0 7001(it)m 220(w)s 2(ould)k 904(otherwise)s
+1917(ha)s 4(v)k 3(e)k 2447(been.)s 3091(The)s
+3548(length)s 220 fnt35 4231 6998(0.5f)m 240 fnt82 4683 7001(speci\207es)m
+5585(half)s 6057(the)s 6433(current)s 7198(font)s 7671(size;)s
+8243(Figure)s 8952(2)s 0 6713(describes)m 936(the)s 220 fnt35
+1280 6710(k)m 240 fnt82 1446 6713(g)m 1(ap)k 1840(mode.)s
+2532(In)s 2784(the)s 3128(Eq)s 3448(equation)s 4325(formatting)s
+5382(package)s 6218([10])s 6651(the)s 6995(equation)s 7872(as)s
+8118(a)s 8280(whole)s 8916(is)s 0 6425(set)m 331(in)s
+580(italic)s 1116(font,)s 1614(and)s 220 fnt35 2024 6422(2)m
+240 fnt82 2203 6425(is)m 2419(an)s 2709(identi\207er)s 3637(whose)s
+4311(body)s 4852(contains)s 5706(a)s 5879(font)s 6330(change)s
+7070(back)s 7590(to)s 7835(Roman.)s 8698(The)s 0 6137(digits)m
+220 fnt35 586 6134(0)m 240 fnt82 765 6137(to)m 220 fnt35
+1009 6134(9)m 240 fnt82 1186 6137(are)m 1538(classed)s 2291(as)s
+2546(punctuation)s 3737(characters,)s 4816(permitting)s 220 fnt35 5869 6134(234)m
+240 fnt82 6293 6137(for)m 6635(e)s 3(xample)k 7503(to)s
+7747(be)s 8034(interpreted)s 0 5849(as)m 250(a)s 416(sequence)s
+1349(of)s 1620(three)s 2153(identi\207ers.)s 480 5475(These)m 1152(de\207nitions)s
+2258(are)s 2650(easily)s 3307(implemented)s 4658(by)s 4997(a)s
+5208(standard)s 6122(symbol)s 6927(table)s 7492(and)s 7941(an)s
+8270(operator)s 0 5187(precedence)m 1155(parser)s 13(.)k 1914(Algol)s
+2539(block)s 3157(structure)s 4073(with)s 4580(the)s 4953(usual)s
+5538(scope)s 6164(rules)s 6704(w)s 2(as)k 7150(adopted)s
+7991(as)s 8266(a)s 8457(matter)s 0 4899(of)m 271(course.)s
+480 4525(Operators)m 1481(are)s 1837(limited)s 2580(to)s 2828(at)s
+3069(most)s 3603(tw)s 2(o)k 4022(parameters,)s 5185(left)s
+5571(and)s 5984(right,)s 6551(and)s 6964(the)s 7321(parameters)s
+8428(cannot)s 0 4237(be)m 282(gi)s 6(v)k 3(en)k
+862(def)s 2(ault)k 1583(v)s 6(alues.)k 240 fnt83
+2352 4239(Named)m 240 fnt82 3097 4237(parameters)m 4195(solv)s 3(e)k
+4753(both)s 5236(problems:)s 220 fnt35 480 3736(def @Pref)m 6(ace)k
+480 3448( named @T)m 26(ag {})k 480 3160( named @Title { Pref)m 6(ace })k 480 2872( r)m -3(ight @Body)k
+480 2584({)m 480 2296( Bold @F)m 6(ont @Title)k 480 2008( //0.3v @Body)m 480 1720(})m
+240 fnt82 0 1226(The)m 452(def)s 2(ault)k 1197(v)s 6(alue)k
+1789(appears)s 2594(just)s 3023(after)s 3543(the)s 3915(parameter')s 13(s)k
+5103(declaration,)s 6295(between)s 7173(braces.)s 7972(In)s 9(v)k 4(ocations)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(16)s 4709(-)s 0 13251(ha)m 4(v)k 3(e)k
+501(a)s 667(natural)s 1385(syntax:)s 220 fnt35 480 12750(@Pref)m 6(ace)k
+480 12462( @Title { About this book })m 480 12174({)m 480 11886( F)m 6(e)k 4(w obser)k -6(v)k 5(ers w)k 2(ould ha)k 4(v)k 5(e supposed in 1984, that ...)k
+480 11598(})m 240 fnt82 0 11104(with)m 481(the)s 827(actual)s
+1450(named)s 2145(parameters)s 3241(follo)s 6(wing)k 4216(directly)s
+4998(after)s 5492(the)s 5838(operator)s 9(,)k 6731(before)s
+7395(an)s 3(y)k 7790(right)s 8299(parame)s 8998(-)s
+0 10816(ter)m 13(.)k 400(In)s 653(this)s 1046(e)s 3(xample,)k
+220 fnt35 1958 10813(@T)m 26(ag)k 240 fnt82 2578 10816(will)m
+3001(recei)s 6(v)k 3(e)k 3735(its)s 4008(def)s 2(ault)k
+4726(v)s 6(alue,)k 5342(and)s 5744(a)s 5907(less)s
+6313(e)s 3(xpert)k 6965(user)s 7420(could)s 8007(safely)s
+8628(omit)s 0 10528(the)m 220 fnt35 348 10525(@Title)m 240 fnt82
+1036 10528(parameter)m 2050(as)s 2300(well.)s 480 10154(Lout)m 1007(permits)s
+1790(named)s 2502(parameters)s 3616(to)s 3870(ha)s 4(v)k 3(e)k
+4387(parameters,)s 5557(a)s 5739(feature)s 6472(with)s 6970(applications)s
+8192(to)s 8447(biblio)s 8998(-)s 0 9866(graphic)m 781(databases,)s
+1816(running)s 2626(headers,)s 3475(and)s 3891(other)s 4454(places)s
+5114(where)s 5766(a)s 5944(format)s 6652(has)s 7034(to)s
+7285(be)s 7579(supplied)s 8460(before)s 0 9578(content)m 760(is)s
+965(kno)s 6(wn.)k 1771(One)s 2221(could)s 2806(go)s
+3094(further)s 3798(and)s 4197(pro)s 3(vide)k 4976(a)s
+5137(complete)s 6064(lambda)s 6823(calculus,)s 7708(with)s 8185(functions)s
+0 9290(as)m 250(\207rst-)s 689(class)s 1204(objects,)s 1988(pro)s 3(vided)k
+2894(care)s 3347(w)s 2(as)k 3768(tak)s 2(en)k
+4341(not)s 4707(to)s 4946(intimidate)s 5970(the)s 6318(non-)s
+6746(e)s 3(xpert)k 7400(user)s 13(.)k 240 fnt84
+0 8641(3.2.)m 471(Recursion)s 1563(and)s 2004(page)s 2539(lay)s 6(out)k
+240 fnt82 480 8164(Design)m 1302(and)s 1794(implementation)s 3439(should)s
+4223(proceed)s 5126(together)s 6057(in)s 6387(e)s 3(xploratory)k
+7628(projects,)s 8579(since)s 0 7876(otherwise)m 988(the)s 1340(design)s
+2025(too)s 2388(easily)s 3003(becomes)s 3894(unrealistic.)s 5056(Sometimes)s
+6173(the)s 6524(implementation)s 8085(does)s 8579(more)s 0 7588(than)m
+469(its)s 745(designer)s 1615(intended.)s 2603(The)s 3031(author)s
+3702(wrote)s 4302(the)s 4650(follo)s 6(wing)k 5627(purely)s
+6292(as)s 6542(a)s 6708(testing)s 7398(scaf)s 6(fold:)k
+220 fnt35 480 7087(def @P)m 8(age r)k -3(ight x)k 480 6799({)m
+480 6511( 8i @Wide 11i @High)m 480 6223( {)m 480 5935( //1i ||1i x ||1i)m 480 5647( //1i)m 480 5359( })m
+480 5071(})m 240 fnt82 0 4577(Only)m 518(afterw)s 2(ards)k
+1558(did)s 1906(he)s 2172(realize)s 2848(its)s 3108(signi\207cance:)s
+4400(the)s 4732(concept)s 5521(of)s 5776(a)s 5926(page)s
+6418(had)s 6807(been)s 7300(de\207ned)s 8047(outside)s 8778(the)s
+0 4289(implementation,)m 1619(remo)s 3(ving)k 2598(the)s 2959(need)s
+3481(for)s 3831(commands)s 4932(for)s 5282(setting)s 5984(page)s
+6505(width)s 7119(and)s 7535(height,)s 8253(mar)s 4(gins,)k
+0 4001(and)m 404(so)s 670(on.)s 480 3627(De\207ning)m 1393(a)s
+1582(sequence)s 2538(of)s 2831(pages)s 3450(is)s 3683(harder)s 9(,)k
+4414(since)s 4983(their)s 5503(number)s 6317(is)s 6550(not)s
+6938(kno)s 6(wn)k 7665(in)s 7931(adv)s 6(ance.)k
+8896(A)s 0 3339(simple)m 693(v)s 3(ersion)k 1451(of)s
+1722(this)s 2118(same)s 2665(problem)s 3522(is)s 3732(af)s 6(forded)k
+4593(by)s 4887(the)s 5235(leaders)s 5962(found)s 6579(in)s
+6822(tables)s 7430(of)s 7701(contents:)s 480 2834(Chapter)m 1297(7)s
+1525(..)s 1809(..)s 2093(..)s 2377(..)s 2661(..)s
+2945(..)s 3229(..)s 3513(..)s 3797(..)s 4081(..)s
+4365(..)s 4649(..)s 4933(..)s 5217(..)s 5501(..)s
+5785(..)s 6009(53)s 0 2331(This)m 476(seemed)s 1251(to)s
+1490(require)s 2222(recursion,)s 3218(speci\207cally)s 4360(the)s 4708(de\207nition)s
+220 fnt35 480 1830(def @Leaders { ..)m 13( @Leaders })k 240 fnt82 0 1336(Note)m
+535(that)s 968(both)s 220 fnt35 1465 1333(..)m 240 fnt82
+1643 1336(and)m 220 fnt35 2061 1333(@Leaders)m 240 fnt82 3145 1336(are)m
+3506(objects,)s 4305(so)s 4585(the)s 4948(tw)s 2(o)k
+5372(spaces)s 6062(separating)s 7111(them)s 7664(are)s 8026(signi\207cant.)s
+0 1048(No)m 361(base)s 858(case)s 1341(is)s 1567(gi)s 6(v)k 3(en,)k
+2213(and)s 2633(indeed)s 3345(we)s 3696(ha)s 4(v)k 3(e)k
+4213(no)s 4522(boolean)s 5353(or)s 5628(conditional)s 6775(operators)s
+7731(with)s 8229(which)s 8887(to)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(17)s 4707(-)s 0 13255(e)m 3(xpress)k
+757(it;)s 993(b)s 4(ut)k 1346(we)s 1673(can)s
+2053(adopt)s 2637(the)s 2977(implicit)s 3770(base)s 4243(`if)s
+4530(space)s 5109(is)s 5311(not)s 5668(suf\207cient,)s 6656(delete)s
+220 fnt35 7273 13252(@Leaders)m 240 fnt82 8334 13255(and)m 8729(an)s 3(y)k
+0 12967(preceding)m 996(space'.)s 1770(Then)s 2319(the)s 2667(e)s 3(xpression)k
+220 fnt35 480 12466(4i @Wide { Chapter 7 @Leaders 53 })m 240 fnt82 0 11970(will)m 417(produce)s
+1234(the)s 1572(object)s 2206(sho)s 6(wn)k 2873(abo)s 3(v)k 3(e.)k
+3593(It)s 3788(is)s 3988(hard)s 4461(to)s 4691(see)s
+5042(ho)s 6(w)k 5493(this)s 5879(base)s 6350(could)s
+6930(be)s 7202(made)s 7766(e)s 3(xplicit,)k 8576(with)s
+8998(-)s 0 11682(out)m 348(violating)s 1232(the)s 1561(general)s
+2301(principle)s 3187(of)s 3439(k)s 2(eeping)k 4230(all)s
+4504(size)s 4912(information)s 6079(internal.)s 6953(In)s 7190(the)s
+7519(implementation,)s 220 fnt35 0 11391(@Leaders)m 240 fnt82 1071 11394(remains)m
+1881(une)s 3(xpanded)k 3097(while)s 3686(sizes)s 4204(are)s
+4554(being)s 5142(calculated;)s 6224(then)s 6696(it)s 6891(is)s
+7103(treated)s 7813(similarly)s 8718(to)s 8960(a)s 0 11106(recepti)m 6(v)k 3(e)k
+922(symbol,)s 1734(with)s 2216(its)s 2492(body)s 3026(as)s
+3276(an)s 3559(incoming)s 4516(g)s 1(alle)k 3(y)k
+5150(\(Section)s 6003(5.2\).)s 480 10732(W)m 9(ith)k 1014(this)s
+1418(settled,)s 2156(it)s 2356(is)s 2574(no)s 6(w)k
+3044(clear)s 3575(ho)s 6(w)k 4044(to)s 4291(de\207ne)s
+4940(a)s 5115(document)s 6127(which)s 6777(is)s 6995(a)s
+7169(numbered)s 8193(sequence)s 0 10444(of)m 271(pages.)s 980(Let)s
+220 fnt35 1358 10441(@Ne)m 6(xt)k 240 fnt82 2082 10444(be)m
+2364(a)s 2530(pre\207x)s 3143(operator)s 3999(which)s 4641(returns)s
+5355(its)s 5631(parameter)s 6645(plus)s 7095(one.)s 7605(Then)s
+220 fnt35 480 9943(def @P)m 8(ageList)k 480 9655( r)m -3(ight @P)k 8(ageNum)k
+480 9367({)m 480 9079( @P)m 8(age {)k 480 8791( |0.5r)m -8(t - @P)k 8(ageNum -)k
+480 8503( //1v @T)m 26(e)k 6(xtPlace)k 480 8215( //1r)m -8(t @F)k 6(ootSect)k
+480 7927( })m 480 7639( //)m 480 7351( @P)m 8(ageList @Ne)k 6(xt @P)k 8(ageNum)k
+480 7063(})m 240 fnt82 0 6569(when)m 576(in)s 9(v)k 4(ok)k 2(ed)k
+1391(in)s 1634(the)s 1982(e)s 3(xpression)k 220 fnt35
+3059 6566(@P)m 8(ageList 1)k 240 fnt82 4267 6569(,)m 4374(has)s
+4744(for)s 5082(its)s 5358(result)s 5948(the)s 6296(potentially)s
+7372(in\207nite)s 8105(object)s 1927 2494 0 2494 240 288 60 480 3735 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s
+1035(-)s 140 fnt35 170 2000(@T)m 16(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+1927 2494 0 2494 240 288 60 480 1241 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 839 2216(-)m 925(2)s
+1041(-)s 140 fnt35 170 2000(@T)m 16(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+140 fnt35 480 1026(@P)m 5(ageList 3)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(18)s 4706(-)s 0 13253(Similarly)m 15(,)k
+980(we)s 1315(may)s 1781(de\207ne)s 220 fnt35 2422 13250(@F)m 6(ootSect)k
+240 fnt82 3573 13253(lik)m 2(e)k 3985(this:)s 220 fnt35
+480 12752(def @F)m 6(ootSect)k 480 12464({)m 480 12176( def @F)m 6(ootList)k
+480 11888( r)m -3(ight @Num)k 480 11600( {)m 480 11312( @F)m 6(ootPlace)k
+480 11024( //1v)m 480 10736( @F)m 6(ootList @Ne)k 6(xt @Num)k 480 10448( })m
+480 9872( 1i @Wide @HLine)m 480 9584( //1v)m 480 9296( @F)m 6(ootList 1)k 480 9008(})m
+240 fnt82 0 8514(so)m 266(that)s 684(an)s 967(in)s 9(v)k 4(ocation)k
+2021(of)s 220 fnt35 2292 8511(@F)m 6(ootSect)k 240 fnt82
+3443 8514(produces)m gsave
+480 8174 translate
+220 fnt35 1440 0 0 0 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+220 fnt35 480 7829(@F)m 6(ootPlace)k 480 7541(@F)m 6(ootPlace)k
+480 7253(@F)m 6(ootPlace)k 480 6965(...)m 240 fnt82 0 6514(The)m
+476(e)s 3(xpansion)k 1550(process)s 2367(is)s 2626(v)s 3(ery)k
+3150(similar)s 3921(to)s 4209(a)s 4424(BNF)s 4997(deri)s 6(v)k 6(ation,)k
+6109(and)s 6562(w)s 2(ould)k 7266(be)s 7597(attempted)s
+8646(only)s 0 6226(on)m 297(demand.)s 480 5852(Clearly)m 15(,)k
+1276(deciding)s 2154(which)s 2797(e)s 3(xpansions)k 3910(to)s
+4150(tak)s 2(e)k 4603(and)s 5008(replacing)s 220 fnt35
+5951 5849(@T)m 26(e)k 6(xtPlace)k 240 fnt82 7170 5852(and)m
+220 fnt35 7575 5849(@F)m 6(ootPlace)k 240 fnt82 8832 5852(by)m
+0 5564(the)m 338(appropriate)s 1471(actual)s 2085(te)s 3(xt)k
+2489(will)s 2904(not)s 3259(be)s 3530(easy;)s 4056(this)s
+4441(is)s 4640(the)s 4977(subject)s 5703(of)s 5963(Section)s
+6726(5.1.)s 7179(The)s 7596(important)s 8574(point)s 0 5276(for)m
+331(no)s 6(w)k 784(is)s 986(that)s 1397(we)s
+1724(ha)s 4(v)k 3(e)k 2217(here)s 2677(a)s
+2835(v)s 3(ery)k 3303(simple)s 3989(and)s 4385(\210e)s 3(xible)k
+5147(method)s 5916(of)s 6179(specifying)s 7220(the)s 7561(layout)s
+8211(of)s 8474(pages,)s 0 4988(which)m 642(requires)s 1462(no)s
+1755(specialized)s 2874(language)s 3794(features.)s 240 fnt84 0 4340(3.3.)m
+471(Modules)s 240 fnt82 480 3909(It)m 679(is)s 882(well)s
+1342(accepted)s 2229(that)s 2641(the)s 2982(visibility)s 3879(of)s
+4143(symbols)s 4986(is)s 5189(not)s 5549(adequately)s 6632(controlled)s
+7653(by)s 7940(Algol)s 8533(block)s 0 3621(structure.)m 999(The)s
+1427(author)s 2098(is)s 2308(a)s 3(w)k 2(are)k
+2929(of)s 3200(se)s 6(v)k 3(eral)k 3922(major)s
+4539(problems)s 5480(of)s 5751(this)s 6147(kind)s 6631(in)s
+6874(document)s 7878(formatting.)s 480 3247(One)m 976(problem)s 1874(is)s
+2126(that)s 2585(some)s 3187(symbols)s 4078(should)s 4816(be)s
+5139(visible)s 5874(only)s 6395(within)s 7104(restricted)s 8091(parts)s
+8647(of)s 8960(a)s 0 2959(document.)m 1108(F)s 3(or)k
+1497(e)s 3(xample,)k 2411(we)s 2746(naturally)s 3649(e)s 3(xpect)k
+4330(equation)s 5211(formatting)s 6272(to)s 6511(be)s 6793(accomplished)s
+8166(lik)s 2(e)k 8578(this:)s 220 fnt35 480 2462(surrounding te)m 6(xt)k
+480 2174(@Eq { {x sup 2 + 1} o)m 3(v)k 5(er 4 })k 480 1886(surrounding te)m 6(xt)k
+240 fnt82 0 1387(with)m 482(the)s 830(symbols)s 220 fnt35
+1679 1384(sup)m 240 fnt82 2025 1387(,)m 220 fnt35 2132 1384(o)m 3(v)k 5(er)k
+240 fnt82 2551 1387(,)m 2658(etc.,)s 3103(visible)s 3796(only)s
+4276(within)s 4944(the)s 5292(equation,)s 6223(not)s 6589(in)s
+6832(the)s 7180(surrounding)s 8390(te)s 3(xt.)k 480 1013(It)m
+695(seems)s 1341(natural)s 2069(to)s 2319(de\207ne)s 2970(these)s
+3528(symbols)s 4387(within)s 220 fnt35 5066 1010(@Eq)m 240 fnt82
+5544 1013(,)m 5661(since)s 6219(the)s 3(y)k 6692(are)s
+7050(local)s 7579(to)s 7829(equations.)s 8921(It)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(19)s 4708(-)s 0 13251(only)m 494(remains)s
+1316(then)s 1799(to)s 2053(decree)s 2746(that)s 3179(symbols)s
+4043(local)s 4576(to)s 220 fnt35 4830 13248(@Eq)m 240 fnt82
+5382 13251(are)m 5744(to)s 5998(be)s 6294(visible)s 7002(within)s
+7684(its)s 7975(actual)s 8615(right)s 0 12963(parameter)m 9(,)k
+1052(and)s 1456(this)s 1852(is)s 2062(done)s 2584(by)s
+2878(replacing)s 3820(the)s 4168(right)s 4679(formal)s 5370(parameter)s
+6384(with)s 6866(a)s 240 fnt83 7032 12965(body)m 240 fnt82
+7554 12963(parameter:)m 220 fnt35 480 12477(e)m 6(xpor)k -8(t sup o)k 3(v)k 5(er)k
+480 12189(def @Eq)m 480 11901( body @Body)m 480 11613({)m 480 11325( def sup ...)m 480 11037( def o)m 3(v)k 5(er ...)k
+480 10461( Slope @F)m 6(ont @Body)k 480 10173(})m 240 fnt82 0 9679(The)m
+220 fnt35 426 9676(e)m 6(xpor)k -8(t)k 240 fnt82
+1092 9679(clause)m 1743(lists)s 2176(the)s 2522(identi\207ers)s 3526(which)s
+4166(are)s 4511(permitted)s 5482(to)s 5719(be)s 5999(visible)s
+6690(outside)s 7435(their)s 7930(usual)s 8488(range,)s 0 9391(the)m
+359(body)s 905(of)s 220 fnt35 1188 9388(@Eq)m 240 fnt82
+1666 9391(;)m 1790(and)s 2206(the)s 220 fnt35 2566 9388(body)m
+240 fnt82 3112 9391(declaration)m 4241(imports)s 5034(them)s 5584(into)s
+6021(\(mak)s 2(es)k 6772(them)s 7322(visible)s 8027(within\))s
+8778(the)s 0 9103(actual)m 614(right)s 1114(parameter)s 2117(of)s
+2376(each)s 2860(in)s 9(v)k 4(ocation)k 3903(of)s
+220 fnt35 4162 9100(@Eq)m 240 fnt82 4640 9103(.)m 4793(This)s
+5258(arrangement)s 6500(has)s 6859(pro)s 3(v)k 3(en)k
+7564(v)s 3(ery)k 8028(con)s 9(v)k 3(enient)k
+0 8815(for)m 338(de\207ning)s 1176(a)s 1342(v)s 6(ariety)k
+2053(of)s 2324(special-purpose)s 3880(packages.)s 480 8441(Another)m 1361(problem)s
+2256(arises)s 2888(when)s 3502(global)s 4193(symbols,)s 5136(such)s
+5669(as)s 5957(the)s 6343(ones)s 6871(used)s 7406(for)s
+7782(headings)s 8722(and)s 0 8153(paragraph)m 1034(separators,)s 2130(call)s
+2550(on)s 2868(v)s 6(alues)k 3545(that)s 3984(the)s
+4353(non-e)s 3(xpert)k 5468(user)s 5947(will)s 6394(need)s
+6925(to)s 7185(modify)s 15(,)k 7989(such)s 8506(as)s
+8778(the)s 0 7865(initial)m 605(font)s 1044(or)s 1297(paragraph)s
+2303(indent.)s 3059(These)s 3680(v)s 6(alues)k 4329(are)s
+4670(lik)s 2(e)k 5076(parameters)s 6167(of)s 6432(the)s
+6774(document)s 7771(as)s 8015(a)s 8175(whole,)s 8860(so)s
+0 7577(it)m 192(is)s 402(natural)s 1120(to)s 1359(try)s
+1678(this:)s 220 fnt35 480 7076(e)m 6(xpor)k -8(t @Heading @PP ...)k
+480 6788(def @BookLa)m 6(y)k 4(out)k 480 6500( named @InitialF)m 6(ont { )k 11(Times Base 12p })k
+480 6212( named @InitialBreak { adjust 14p })m 480 5924( named @ColumnWidth { 6i })m 480 5636( ...)m 480 5348({)m 480 5060( def @Heading ...)m
+480 4772( def @PP ...)m 480 4484(})m 240 fnt82 0 3990(No)m 6(w)k
+220 fnt35 579 3987(@Heading)m 240 fnt82 1732 3990(and)m 220 fnt35
+2202 3987(@PP)m 240 fnt82 2833 3990(may)m 3365(in)s 9(v)k 4(ok)k 2(e)k
+220 fnt35 4124 3987(@InitialF)m 6(ont)k 240 fnt82 5411 3990(and)m
+5881(the)s 6295(other)s 6911(parameters.)s 8188(T)s 19(o)k
+8554(mak)s 2(e)k 220 fnt35 0 3699(@Heading)m 240 fnt82
+1100 3702(and)m 220 fnt35 1517 3699(@PP)m 240 fnt82 2096 3702(visible)m
+2802(throughout)s 3926(the)s 4287(document,)s 5352(we)s 5700(need)s
+6223(only)s 6716(add)s 7133(a)s 7312(body)s 7859(parameter)s
+8887(to)s 220 fnt35 0 3411(@BookLa)m 6(y)k 4(out)k
+240 fnt82 1428 3414(and)m 1832(present)s 2582(the)s 2930(entire)s
+3529(document)s 4533(as)s 220 fnt35 480 2913(@BookLa)m 6(y)k 4(out)k
+480 2625( @InitialF)m 6(ont { Helv)k 5(etica Base 10p })k 480 2337( @InitialBreak { adjust 12p })m 480 2049({)m
+480 1761( )m 11(The document.)k 480 1473(})m 240 fnt82 0 979(b)m 4(ut)k
+383(for)s 742(practical)s 1639(reasons)s 2429(gi)s 6(v)k 3(en)k
+3030(belo)s 6(w)k 3684(we)s 4040(prefer)s 4691(not)s
+5078(to)s 5338(enclose)s 6132(the)s 6502(entire)s 7122(document)s
+8147(in)s 8412(braces.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(20)s 4710(-)s 0 13253(Instead,)m 797(we)s
+1132(write)s 220 fnt35 480 12771(@Use { @BookLa)m 6(y)k 4(out)k
+480 12483( @InitialF)m 6(ont { Helv)k 5(etica Base 10p })k 480 12195( @InitialBreak { adjust 12p })m 480 11907(})m
+480 11619(The document.)m 240 fnt82 0 11165(which)m 643(has)s 1015(the)s
+1365(same)s 1914(ef)s 6(fect:)k 220 fnt35 2617 11162(@Use)m
+240 fnt82 3284 11165(mak)m 2(es)k 3946(the)s 4296(e)s 3(xported)k
+5190(symbols)s 6040(of)s 220 fnt35 6313 11162(@BookLa)m 6(y)k 4(out)k
+240 fnt82 7743 11165(visible)m 8438(for)s 8778(the)s 0 10877(remainder)m
+1028(of)s 1299(the)s 1647(document,)s 2698(and)s 3102(is)s
+3312(permitted)s 4285(only)s 4765(at)s 4997(the)s 5345(be)s 3(ginning.)k
+480 10503(The)m 925(third)s 1451(feature)s 2187(that)s 2622(af)s 6(fects)k
+3319(visibility)s 15(,)k 4278(and)s 4699(which)s 5359(will)s
+5802(pro)s 3(v)k 3(e)k 6414(useful)s 7071(for)s
+7426(cross)s 7986(referencing)s 0 10215(\(Section)m 851(6.1\),)s 1335(is)s
+1543(the)s 220 fnt35 1889 10212(@Open)m 240 fnt82 2693 10215(symbol.)m
+3560(It)s 3763(mak)s 2(es)k 4421(the)s 4767(e)s 3(xported)k
+5657(symbols)s 6504(of)s 6773(its)s 7047(left)s 7422(parameter)s
+8433(visible)s 0 9927(within)m 668(its)s 944(right)s 1455(parameter)s 9(,)k
+2507(and)s 2911(is)s 3121(therefore)s 4038(similar)s 4760(to)s
+4999(the)s 5347(P)s 3(ascal)k 220 fnt35 6009 9924(with)m
+240 fnt82 6444 9927(statement.)m 480 9553(It)m 698(could)s 1301(be)s
+1596(ar)s 4(gued)k 2314(that)s 2745(Lout)s 3270(is)s
+3493(o)s 3(v)k 3(er)k 4(-supplied)k 4869(with)s
+5364(these)s 5924(visibility)s 6840(modifying)s 7903(features:)s 8778(the)s
+0 9265(body)m 544(parameter)s 9(,)k 220 fnt35 1606 9262(@Use)m
+240 fnt82 2282 9265(and)m 220 fnt35 2696 9262(@Open)m 240 fnt82
+3513 9265(do)m 3816(not)s 4193(seem)s 4754(suf\207ciently)s 5894(dif)s 6(ferent)k
+6779(from)s 7314(each)s 7819(another)s 13(.)k 8698(The)s
+220 fnt35 0 8974(@Open)m 240 fnt82 806 8977(symbol)m 1566(is)s
+1776(the)s 2124(most)s 2649(general,)s 3459(being)s 4044(capable)s
+4830(of)s 5101(replacing)s 6043(the)s 6391(other)s 6942(tw)s 2(o.)k
+7463(F)s 3(or)k 7852(e)s 3(xample,)k 220 fnt35
+480 8476(@Use { x })m 480 8188(@Use { y })m 480 7900(Body of document)m 240 fnt82 0 7402(can)m
+389(be)s 671(replaced)s 1538(by)s 220 fnt35 480 6901(x @Open {)m
+480 6613(y @Open {)m 480 6325(Body of document)m 480 6037(}})m 240 fnt82 0 5543(and,)m
+453(taking)s 1104(the)s 220 fnt35 1452 5540(@Eq)m 240 fnt82
+1990 5543(symbol)m 2750(abo)s 3(v)k 3(e)k 3372(as)s
+3622(e)s 3(xample,)k 4536(we)s 4871(could)s 5461(eliminate)s
+6405(its)s 6681(body)s 7215(parameter)s 9(,)k 8267(add)s
+220 fnt35 480 5042(def @Body r)m -3(ight x { Slope @F)k 6(ont x })k 240 fnt82
+0 4543(to)m 239(the)s 587(e)s 3(xported)k 1479(de\207nitions)s
+2540(of)s 220 fnt35 2811 4540(@Eq)m 240 fnt82 3289 4543(,)m
+3396(and)s 3800(replace)s 220 fnt35 480 4042(@Eq { object })m 240 fnt82
+0 3545(by)m 220 fnt35 480 3044(@Eq @Open { @Body { object } })m 240 fnt82 0 2544(If)m
+220 fnt35 232 2541(@Eq)m 240 fnt82 772 2544(is)m 985(a)s
+1153(g)s 1(alle)k 3(y)k 1790(\(Section)s 2645(5.1\),)s
+220 fnt35 3133 2541(@Body)m 240 fnt82 3917 2544(must)m 4444(tak)s 2(e)k
+4899(o)s 3(v)k 3(er)k 5380(that)s 5800(function.)s
+6764(But)s 7172(one)s 7577(w)s 2(ould)k 8234(not)s
+8603(w)s 2(ant)k 0 2256(to)m 253(write)s 813(these)s
+1374(clumsy)s 2133(e)s 3(xpressions)k 3311(in)s 3568(practice,)s
+4444(and)s 4862(the)s 5224(enclosure)s 6210(of)s 6495(lar)s 4(ge)k
+7038(quantities)s 8032(of)s 8317(input)s 8883(in)s 0 1968(e)m 3(xtra)k
+534(braces)s 1195(could)s 1785(cause)s 2372(Basser)s 3069(Lout)s
+3581(to)s 3820(run)s 4196(out)s 4562(of)s 4833(memory)s
+5684(\(Section)s 6537(5.4\).)s 480 1594(A)m 700(quite)s 1224(separate)s
+2052(kind)s 2526(of)s 2786(visibility)s 3679(problem)s 4526(arises)s
+5110(when)s 5676(e)s 3(xpert)k 6319(users)s 6851(wish)s
+7350(to)s 7579(de\207ne)s 8210(an)s 8482(object)s 0 1306(or)m
+259(operator)s 1115(for)s 1453(repeated)s 2320(use)s 2695(within,)s
+3413(say)s 15(,)k 3824(equations:)s 220 fnt35 480 807(def isum { sum from i=1 to n })m
+240 fnt82 0 313(As)m 338(it)s 551(stands)s 1221(this)s
+1638(can)s 2048(only)s 2549(be)s 2852(placed)s 3555(within)s
+4244(the)s 220 fnt35 4613 310(@Eq)m 240 fnt82 5172 313(package)m
+6033(itself,)s 6637(where)s 220 fnt35 7298 310(sum)m 240 fnt82
+7780 313(and)m 8205(the)s 8575(other)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(21)s 4700(-)s 0 13256(symbols)m 841(are)s
+1179(visible,)s 1915(b)s 4(ut)k 2268(it)s 2451(is)s
+2653(not)s 3010(desirable)s 3919(to)s 4150(modify)s 4886(the)s
+5225(source)s 5897(code)s 6396(of)s 6658(a)s 6816(standard)s
+7675(package.)s 8614(Lout)s 0 12968(pro)m 3(vides)k 872(an)s
+220 fnt35 1155 12965(impor)m -8(t)k 240 fnt82 1828 12968(clause)m
+2481(to)s 2720(solv)s 3(e)k 3278(this)s 3674(problem:)s
+220 fnt35 480 12467(impor)m -8(t @Eq)k 480 12179(def isum { sum from i=1 to n })m 240 fnt82
+0 11685(may)m 469(appear)s 1169(after)s 220 fnt35 1669 11682(@Eq)m
+240 fnt82 2210 11685(is)m 2423(de\207ned,)s 3239(and)s 3646(it)s
+3842(will)s 4271(mak)s 2(e)k 4846(the)s 5198(e)s 3(xported)k
+6093(symbols)s 6945(of)s 220 fnt35 7220 11682(@Eq)m 240 fnt82
+7761 11685(visible)m 8458(within)s 0 11397(the)m 335(body)s 855(of)s
+220 fnt35 1112 11394(isum)m 240 fnt82 1561 11397(.)m 1711(This)s
+2174(feature)s 2878(complicates)s 4056(the)s 4390(treatment)s 5337(of)s
+5595(en)s 9(vironments)k 6925(\(Section)s 7764(3.4\),)s 8236(and)s
+8626(e)s 6(v)k 3(en)k 0 11109(introduces)m 1050(an)s
+1336(insecurity)s 15(,)k 2373(when)s 220 fnt35 2952 11106(isum)m
+240 fnt82 3464 11109(is)m 3677(in)s 9(v)k 4(ok)k 2(ed)k
+4495(outside)s 5245(an)s 5531(equation.)s 6522(A)s 6755(simpler)s
+7534(approach)s 8471(w)s 2(ould)k 0 10821(be)m 290(to)s
+538(allo)s 6(w)k 1126(only)s 1615(one)s 2026(symbol)s
+2795(in)s 3047(an)s 220 fnt35 3339 10818(impor)m -8(t)k
+240 fnt82 4020 10821(clause,)m 4733(and)s 5146(treat)s 5638(the)s
+5995(follo)s 6(wing)k 6981(de\207nition)s 7964(e)s 3(xactly)k
+8714(lik)s 2(e)k 0 10533(a)m 174(local)s 702(de\207nition)s
+1684(of)s 1964(that)s 2390(symbol;)s 3216(b)s 4(ut)k
+3587(then)s 4064(it)s 4265(w)s 2(ould)k 4928(not)s
+5303(be)s 5594(possible)s 6442(to)s 6690(de\207ne)s 7339(symbols)s
+8197(using)s 8778(the)s 0 10245(resources)m 953(of)s 1224(more)s
+1771(than)s 2240(one)s 2642(of)s 2913(the)s 3261(standard)s
+4129(packages.)s 240 fnt84 0 9596(3.4.)m 471(Implementation)s 2159(of)s
+2431(de\207nitions)s 240 fnt82 480 9119(Input)m 1089(is)s 1343(processed)s
+2388(by)s 2726(a)s 2936(h)s 1(ybrid)k 3663(parser)s
+4350(which)s 5036(emplo)s 2(ys)k 5940(operator)s 6840(precedence)s
+8015(for)s 8398(objects)s 0 8831(and)m 433(simple)s 1156(recursi)s 6(v)k 3(e)k
+2108(descent)s 2915(for)s 3283(the)s 3661(headers)s 4472(of)s
+4772(de\207nitions.)s 5976(A)s 6236(symbol)s 7026(table)s 7576(stores)s
+8214(the)s 8592(body)s 0 8543(of)m 278(each)s 780(de\207nition)s
+1761(as)s 2018(a)s 2191(parse)s 2758(tree,)s 3229(e)s 3(xcept)k
+3917(for)s 4263(macros)s 5011(which)s 5660(are)s 6014(lists)s
+6456(of)s 6734(tok)s 2(ens,)k 7471(and)s 7882(manages)s
+8778(the)s 0 8255(usual)m 564(stack)s 1121(of)s 1397(static)s
+1958(scopes,)s 2708(accepting)s 240 fnt83 3682 8257(PushScope)m 240 fnt82
+4791 8255(and)m 240 fnt83 5200 8257(P)m 19(opScope)k 240 fnt82
+6197 8255(operations)m 7249(as)s 7504(the)s 7857(parser)s 8505(enters)s
+0 7967(and)m 447(lea)s 4(v)k 3(es)k 1131(scope)s
+1775(re)s 3(gions,)k 2626(including)s 3627(actual)s 4295(body)s
+4872(parameters)s 6013(and)s 6461(the)s 6852(right)s 7406(parameter)s
+8463(of)s 8778(the)s 220 fnt35 0 7676(@Open)m 240 fnt82
+806 7679(operator)m 13(.)k 480 7305(As)m 818(the)s 1187(parse)s
+1769(proceeds,)s 2747(a)s 2934(complete)s 3888(call)s 4308(graph)s
+4932(is)s 5163(constructed,)s 6393(recording,)s 7438(for)s 7797(each)s
+8314(symbol,)s 0 7017(which)m 633(symbols)s 1473(are)s 1810(in)s 9(v)k 4(ok)k 2(ed)k
+2616(within)s 3274(its)s 3541(body)s 15(.)k 4160(Immediately)s
+5412(after)s 5898(the)s 6237(last)s 6618(de\207nition)s 7583(is)s
+7783(read,)s 8292(the)s 8630(tran)s 8998(-)s 0 6729(siti)m 6(v)k 3(e)k
+565(closure)s 1312(of)s 1584(the)s 1933(call)s 2334(graph)s
+2937(is)s 3148(computed,)s 4200(and)s 4605(used)s 5104(to)s
+5344(determine)s 6356(whether)s 7187(each)s 7684(non-)s 8112(parameter)s
+0 6441(symbol)m 775(is)s 1001(recursi)s 6(v)k 3(e)k
+1939(or)s 2214(recepti)s 6(v)k 3(e)k 3151(\(Section)s
+4020(5.1\),)s 4522(and)s 4942(whether)s 5787(each)s 6298(parameter)s
+7328(is)s 7554(in)s 9(v)k 4(ok)k 2(ed)k
+8385(e)s 3(xactly)k 0 6153(once)m 508(or)s 767(not.)s
+480 5779(Purely)m 1188(functional)s 2243(systems)s 3082(may)s 3579(e)s 6(v)k 6(aluate)k
+4450(symbol)s 5240(in)s 9(v)k 4(ocations)k 6412(in)s
+6686(applicati)s 6(v)k 3(e)k 7812(order)s 8407(\(where)s
+0 5491(parameters)m 1092(are)s 1433(e)s 6(v)k 6(aluated)k
+2389(before)s 3049(substitution)s 4216(into)s 4635(bodies\),)s 5440(or)s
+5693(in)s 5930(normal)s 6656(order)s 7214(\(substitution)s 8460(before)s
+0 5203(e)m 6(v)k 6(aluation\),)k 1164(and)s 1562(the)s 3(y)k
+2018(may)s 2478(also)s 2909(share)s 3463(the)s 3804(v)s 6(alue)k
+4366(of)s 4630(a)s 4790(parameter)s 5798(among)s 6496(all)s
+6783(uses)s 7239(of)s 7504(it.)s 7793(But)s 8193(in)s
+8429(Basser)s 0 4915(Lout,)m 603(the)s 996(presence)s 1932(of)s
+2248(conte)s 3(xt-sensiti)k 6(v)k 3(e)k 3955(style)s
+4507(information)s 5736(\(Section)s 6634(2.5\))s 7106(forces)s 7785(normal)s
+8562(order)s 0 4627(e)m 6(v)k 6(aluation)k 1041(and)s
+1445(pre)s 6(v)k 3(ents)k 2297(sharing)s 3054(of)s
+3325(parameter)s 4339(v)s 6(alues.)k 480 4253(T)m 19(o)k
+780(e)s 6(v)k 6(aluate)k 1620(an)s 1903(unsized)s
+2692(object)s 3336(\(pure)s 3896(parse)s 4456(tree\),)s 4999(its)s
+240 fnt83 5275 4255(en)m 9(vir)k 10(onment)k 240 fnt82
+6456 4253(,)m 6563(the)s 6911(equi)s 6(v)k 6(alent)k
+7955(of)s 8226(the)s 8574(stack)s 0 3965(frames)m 728(in)s
+999(Algol-lik)s 2(e)k 2064(languages,)s 3156(must)s 3710(be)s
+4020(a)s 4(v)k 6(ailable,)k 5008(containing)s 6099(the)s
+6476(actual)s 7129(v)s 6(alues)k 7814(of)s 8113(all)s
+8435(formal)s 0 3677(parameters)m 1119(that)s 1558(are)s 1927(visible)s
+2641(within)s 3330(the)s 3700(unsized)s 4510(object.)s 5279(En)s 9(vironment)k
+6601(handling)s 7513(is)s 7744(a)s 7932(well-kno)s 6(wn)k
+0 3389(implementation)m 1557(technique,)s 2594(so)s 2860(it)s 3052(will)s
+3478(be)s 3760(discussed)s 4735(only)s 5215(brie\210y)s 5893(here.)s
+480 3015(En)m 9(vironments)k 1894(are)s 2272(e)s 3(xtra)k
+2837(subtrees)s 3702(hung)s 4265(from)s 4820(the)s 5199(objects)s
+5958(the)s 3(y)k 6451(refer)s 6991(to.)s 7372(This)s
+7879(or)s 4(g)k 1(anization)k 0 2727(mak)m 2(es)k
+668(e)s 3(xcellent)k 1595(use)s 1978(of)s 2257(the)s
+2613(ordered)s 3409(dag)s 3816(to)s 4063(permit)s 4754(en)s 9(vironments)k
+6106(to)s 6353(be)s 6643(shared,)s 7382(and)s 7794(deleted)s
+8550(when)s 0 2439(the)m 339(last)s 721(reference)s 1655(to)s
+1885(them)s 2413(is)s 2614(remo)s 3(v)k 3(ed.)k
+3600(Se)s 6(v)k 3(eral)k 4353(optimizations)s 5695(ha)s 4(v)k 3(e)k
+6187(been)s 6687(implemented.)s 8090(Actual)s 8772(pa)s 8998(-)s
+0 2151(rameters)m 860(kno)s 6(wn)k 1552(to)s 1778(be)s
+2048(in)s 9(v)k 4(ok)k 2(ed)k 2850(only)s
+3318(once)s 3814(are)s 4148(mo)s 3(v)k 3(ed)k
+4840(in)s 5070(from)s 5582(the)s 5918(en)s 9(vironment,)k
+7212(not)s 7566(copied;)s 8303(cop)s 2(ying)k 0 1863(could)m
+581(lead)s 1028(to)s 1258(quadratic)s 2191(time)s 2662(comple)s 3(xity)k 15(.)k
+3875(Actual)s 4558(parameters)s 5647(of)s 5909(the)s 6248(form)s
+220 fnt35 6763 1860(@Ne)m 6(xt)k 240 fnt83 7478 1865(object)m
+240 fnt82 8117 1863(recei)m 6(v)k 3(e)k 8843(an)s
+0 1575(applicati)m 6(v)k 3(e)k 1105(pre-)s 1478(e)s 6(v)k 6(aluation)k
+2529(which)s 3181(pre)s 6(v)k 3(ents)k 4044(long)s
+4533(chains)s 5205(of)s 220 fnt35 5486 1572(@Ne)m 6(xt)k
+240 fnt82 6221 1575(symbols)m 7080(from)s 7614(forming)s 8448(during)s
+0 1287(the)m 359(generation)s 1437(of)s 1719(lar)s 4(ge)k
+2260(page)s 2779(numbers.)s 3779(Some)s 4391(en)s 9(vironments)k
+5747(which)s 6400(pro)s 3(v)k 6(ably)k 7308(contrib)s 4(ute)k
+8341(nothing)s 0 999(are)m 344(deleted,)s 1137(most)s 1659(notably)s
+2427(when)s 3000(a)s 3162(symbol)s 3918(in)s 9(v)k 4(ocation)k
+4969(has)s 5335(no)s 5625(symbols)s 6470(within)s 7135(its)s
+7407(actual)s 8028(parameters)s 0 711(and)m 406(no)s 702(import)s
+1402(list,)s 1803(so)s 2071(that)s 2492(only)s 2975(the)s
+3326(en)s 9(vironment)k 4589(of)s 4862(its)s 5141(body)s
+5678(need)s 6191(be)s 6476(k)s 2(ept;)k 7000(this)s
+7399(sa)s 4(v)k 3(es)k 7964(a)s 8133(great)s
+8673(deal)s 0 423(of)m 271(space)s 858(when)s 1434(objects)s
+2162(with)s 2644(en)s 9(vironments)k 3988(are)s 4335(written)s
+5068(to)s 5307(auxiliary)s 6210(\207les)s 6659(\(Section)s 7512(6.1\).)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(22)s 4710(-)s 240 fnt84 0 12678(4.)m
+291(Implementation)s 1979(of)s 2251(the)s 2625(functional)s 3715(subset)s
+240 fnt82 480 12201(The)m 941(objects)s 1702(and)s 2139(de\207nitions)s
+3233(of)s 3537(Lout)s 4082(are)s 4462(v)s 3(ery)k
+4971(similar)s 5726(to)s 5998(those)s 6592(found)s 7242(in)s
+7518(other)s 8102(functional)s 0 11913(languages,)m 1085(and)s 1510(the)s 3(y)k
+1994(form)s 2539(a)s 2726(natural)s 3465(subset)s 4144(of)s
+4436(the)s 4805(language.)s 5854(So)s 6181(we)s 6537(pause)s
+7159(here)s 7647(and)s 8072(present)s 8843(an)s 0 11625(o)m 3(v)k 3(ervie)k 6(w)k
+932(of)s 1203(the)s 1551(Basser)s 2248(Lout)s 2760(object)s
+3404(e)s 6(v)k 6(aluation)k 4445(algorithm.)s 480 11251(The)m
+922(problem)s 1794(is)s 2019(to)s 2272(tak)s 2(e)k
+2739(an)s 3037(unsized)s 3841(object)s 4499(\(pure)s 5074(parse)s
+5649(tree\),)s 6206(its)s 6497(en)s 9(vironment)k 7772(\(Section)s
+8640(3.4\),)s 0 10963(and)m 404(its)s 681(style)s 1188(\(Section)s
+2042(2.5\),)s 2528(and)s 2933(to)s 3173(produce)s 4000(a)s
+4167(PostScript)s 5209(\207le)s 5571(for)s 5910(rendering)s 6879(the)s
+7228(object)s 7872(on)s 8170(an)s 8454(output)s 0 10675(de)m 6(vice.)k
+786(This)s 1267(\207le)s 1632(is)s 1847(essentially)s 2914(a)s
+3084(sequence)s 4022(of)s 4298(instructions)s 5468(to)s 5712(print)s
+6227(a)s 6398(gi)s 6(v)k 3(en)k 6983(string)s
+7584(of)s 7860(characters)s 8883(in)s 0 10387(a)m 166(gi)s 6(v)k 3(en)k
+746(font)s 1191(at)s 1423(a)s 1589(gi)s 6(v)k 3(en)k
+2169(point.)s 480 10013(Before)m 1189(the)s 1541(algorithm)s 2534(be)s 3(gins,)k
+3266(the)s 3618(parse)s 4182(tree)s 4599(must)s 5127(be)s
+5413(obtained,)s 6348(either)s 6955(by)s 7252(parsing)s 8013(input)s
+8569(or)s 8832(by)s 0 9725(cop)m 2(ying)k 823(from)s
+1347(the)s 1695(symbol)s 2455(table.)s 3082(Afterw)s 2(ards)k
+4205(the)s 4553(data)s 5011(structure)s 5901(must)s 6426(be)s
+6708(disposed.)s 7710(The)s 8137(algorithm)s 0 9437(proper)m 692(consists)s
+1508(of)s 1787(\207v)s 3(e)k 2207(passes,)s 2933(each)s
+3437(a)s 3611(recursi)s 6(v)k 3(e)k 4541(tra)s 4(v)k 3(ersal)k
+5418(of)s 5697(the)s 6054(structure)s 6953(from)s 7485(the)s
+7841(root)s 8294(do)s 6(wn)k 8887(to)s 0 9149(the)m
+348(lea)s 4(v)k 3(es)k 989(and)s 1393(back.)s
+240 fnt83 0 8695(1.)m 330(Evaluation)s 1490(of)s 1827(unsized)s
+2667(objects.)s 240 fnt82 3554 8693(On)m 3960(the)s 4364(w)s 2(ay)k
+4871(do)s 6(wn,)k 5561(calculate)s 6521(en)s 9(vironments)k
+7921(and)s 8381(replace)s 0 8405(non-recursi)m 6(v)k 3(e,)k
+1404(non-recepti)s 6(v)k 3(e)k 2757(symbols)s 3598(by)s
+3884(their)s 4373(bodies)s 5041(\(Section)s 5886(3.4\);)s 6369(broadcast)s
+7337(fonts)s 7858(to)s 8089(the)s 8429(lea)s 4(v)k 3(es,)k
+0 8117(and)m 409(paragraph)s 1427(breaking)s 2322(and)s 2731(spacing)s
+3521(styles)s 4121(to)s 4365(the)s 4718(paragraph)s 5736(nodes.)s
+6465(On)s 6820(the)s 7173(w)s 2(ay)k 7629(back)s
+8147(up,)s 8500(delete)s 240 fnt83 0 7831(FONT)m 240 fnt82
+630 7829(,)m 240 fnt83 737 7831(BREAK)m 240 fnt82 1494 7829(,)m
+1601(and)s 240 fnt83 2005 7831(SP)m 21(A)k 7(CE)k
+240 fnt82 2760 7829(nodes,)m 3426(and)s 3830(insert)s 240 fnt83
+4420 7831(SPLIT)m 240 fnt82 5049 7829(,)m 240 fnt83 5156 7831(COL)m
+240 fnt82 5622 7829(,)m 5729(and)s 240 fnt83 6133 7831(R)m 9(O)k 12(W)k
+240 fnt82 6707 7829(nodes)m 7317(\(Section)s 8170(2.3\).)s 240 fnt83
+0 7336(2.)m 293(W)s 13(idth)k 925(calculations)s 2169(and)s
+2614(br)s 8(eaking)k 3(.)k 240 fnt82 3628 7334(Calculate)m
+4605(the)s 4973(width)s 5594(of)s 5885(e)s 6(v)k 3(ery)k
+6480(subobject)s 7477(from)s 8020(the)s 8388(bottom)s 0 7046(up.)m
+404(As)s 720(described)s 1693(in)s 1936(Section)s 2709(2.3,)s
+240 fnt83 3115 7048(WIDE)m 240 fnt82 3777 7046(nodes)m 4386(may)s
+4851(trigger)s 5547(object)s 6190(breaking)s 7079(sub-tra)s 4(v)k 3(ersals)k
+8448(during)s 0 6758(this)m 396(pass.)s 240 fnt83 0 6255(3.)m
+274(Height)s 989(calculations.)s 240 fnt82 2312 6253(Calculate)m 3270(the)s
+3618(height)s 4276(of)s 4547(e)s 6(v)k 3(ery)k
+5123(subobject,)s 6147(from)s 6671(the)s 7019(bottom)s 7757(up.)s
+240 fnt83 0 5750(4.)m 283(Horizontal)s 1389(coor)s 8(dinates.)k
+240 fnt82 2674 5748(Calculate)m 3641(the)s 3998(horizontal)s 5032(coordinate)s
+6106(of)s 6386(each)s 6890(subobject)s 7876(from)s 8409(the)s
+8767(top)s 0 5460(do)m 6(wn,)k 634(and)s 1038(store)s
+1558(each)s 2053(leaf)s -13(')k 13(s)k 2633(coordinate)s
+3698(in)s 3941(the)s 4289(leaf.)s 240 fnt83 0 4976(5.)m
+295(V)s 26(ertical)k 1119(coor)s 8(dinates)k 2317(and)s
+2765(P)s 19(ostScript)k 3827(g)s 2(ener)k 3(ation.)k
+240 fnt82 5034 4974(Calculate)m 6013(the)s 6383(v)s 3(ertical)k
+7171(coordinate)s 8257(of)s 8550(e)s 6(v)k 3(ery)k
+0 4686(subobject)m 981(from)s 1509(the)s 1861(top)s 2224(do)s 6(wn,)k
+2862(and)s 3270(at)s 3506(each)s 4005(leaf,)s 4473(retrie)s 6(v)k 3(e)k
+5252(the)s 5604(character)s 6542(string,)s 7197(font,)s 7693(and)s
+8102(horizontal)s 0 4398(coordinate,)m 1116(and)s 1520(print)s 2031(the)s
+2379(PostScript)s 3421(instruction)s 4500(for)s 4838(rendering)s 5807(that)s
+6225(leaf.)s 0 3895(Figure)m 692(3)s 869(gi)s 6(v)k 3(es)k
+1428(the)s 1789(amount)s 2579(of)s 2863(code)s 3383(required)s
+4250(for)s 4600(each)s 5168(pass.)s 5756(Symmetry)s 6819(between)s
+7685(horizontal)s 8722(and)s 0 3607(v)m 3(ertical)k 764(is)s
+971(e)s 3(xploited)k 1913(throughout)s 3021(Basser)s 3715(Lout,)s
+4271(and)s 4672(passes)s 5331(2)s 5502(and)s 5903(3,)s
+6127(as)s 6374(well)s 6837(as)s 7084(4)s 7255(and)s
+7656(5,)s 7880(are)s 8224(e)s 3(x)k 3(ecuted)k
+0 3319(on)m 297(shared)s 979(code.)s 480 2945(The)m 929(author)s
+1621(can)s 2031(see)s 2413(no)s 2728(simple)s 3442(w)s 2(ay)k
+3914(to)s 4174(reduce)s 4888(the)s 5258(number)s 6070(of)s
+6362(passes.)s 7158(The)s 7607(introduction)s 8855(of)s 0 2657(horizontal)m
+1027(g)s 1(alle)k 3(ys)k 1755(\(Section)s 2612(5.5\))s
+3044(w)s 2(ould)k 3703(remo)s 3(v)k 3(e)k
+4474(the)s 4826(need)s 5340(for)s 5682(the)s 6034(object)s
+6682(breaking)s 7576(transformations)s 0 2369(within)m 700(this)s 1128(algorithm)s
+2149(that)s 2599(are)s 2978(the)s 3359(principal)s 4295(obstacles)s
+5254(in)s 5529(the)s 5909(w)s 2(ay)k 6393(of)s
+6696(the)s 7076(mer)s 4(ging)k 7954(of)s 8257(passes)s
+8952(2)s 0 2081(and)m 404(3.)s 240 fnt84 0 1337(5.)m
+291(Galleys)s 240 fnt82 480 860(W)m 9(ith)k 1022(objects)s
+1767(and)s 2188(de\207nitions)s 3266(under)s 3888(control,)s 4689(the)s
+5053(author)s 5741(f)s 2(aced)k 6331(the)s 6696(problem)s
+7570(of)s 7858(getting)s 8592(body)s 0 572(te)m 3(xt,)k
+478(footnotes,)s 1491(\210oating)s 2291(\207gures)s 3009(and)s 3429(tables,)s
+4109(references,)s 5213(inde)s 3(x)k 5813(entries,)s 6572(and)s
+6992(entries)s 7695(in)s 7954(the)s 8318(table)s 8855(of)s
+0 284(contents)m 844(into)s 1264(their)s 1757(places.)s 2513(The)s
+2937(resulting)s 3821(in)s 9(v)k 3(estig)k 1(ation)k
+5095(occupied)s 6013(three)s 6541(months)s 7293(of)s 7559(full-time)s
+8444(design)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(23)s 4705(-)s 1659 13218(1.)m 2163(Initialization)s
+7172(200)s 1659 12930(2.)m 2163(Memory)s 3041(allocation,)s 4090(ordered)s
+4878(dag)s 5277(operations)s 7172(400)s 1659 12642(3.)m 2163(Le)s 3(xical)k
+2931(analysis,)s 3808(macros,)s 4605(\207le)s 4966(handling)s 6992(1,350)s
+1659 12354(4.)m 2163(P)s 3(arsing)k 2930(of)s 3201(objects)s
+3929(and)s 4333(de\207nitions)s 6992(1,150)s 1659 12066(5.)m 2163(Symbol)s
+2963(table)s 3483(and)s 3887(call)s 4286(graph)s 7172(600)s
+1659 11778(6.)m 2163(Ev)s 6(aluation)k 3250(of)s 3521(pure)s
+4002(parse)s 4562(trees)s 6992(1,650)s 1659 11490(7.)m 2163(Reading,)s
+3068(storing,)s 3839(and)s 4243(scaling)s 4973(of)s 5244(fonts)s
+7172(600)s 1659 11202(8.)m 2163(Cross)s 2759(references)s 3790(and)s
+4194(databases)s 6992(1,000)s 1659 10914(9.)m 2163(W)s 9(idth)k
+2809(and)s 3213(height)s 3871(calculations,)s 5119(and)s 5523(breaking)s
+7172(700)s 1539 10626(10.)m 240 fnt83 2163 10628(Constr)m 3(ained)k
+240 fnt82 3410 10626(and)m 240 fnt83 3814 10628(AdjustSize)m 240 fnt82
+7172 10626(700)m 1539 10338(11.)m 2163(T)s 8(ransfer)k 3023(of)s
+3294(sized)s 3843(objects)s 4571(into)s 4996(g)s 1(alle)k 3(y)k
+5630(tree)s 7172(450)s 1539 10050(12.)m 2163(Galle)s 3(y)k
+2851(\210ushing)s 3676(algorithm)s 6992(1,500)s 1539 9762(13.)m 2163(Coordinate)s
+3282(calculations)s 4474(and)s 4878(PostScript)s 5920(output)s 7172(700)s
+1539 9474(14.)m 2163(Deb)s 4(ugging)k 3277(and)s 3681(error)s
+4204(handling)s 6992(1,200)s 655 0 0 0 240 288 60 6872 9328 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+6872 9074(12,200)m 240 fnt84 0 8394(Figur)m 4(e)k
+761(3.)s 1084(Major)s 1825(components)s 3134(of)s 3438(the)s
+3844(Basser)s 4612(Lout)s 5197(inter)s 2(pr)k 4(eter)k 22(,)k
+6441(sho)s 2(wing)k 7365(the)s 7772(appr)s 4(oximate)k
+0 8106(number)m 868(of)s 1140(lines)s 1658(of)s 1930(C)s
+2155(code.)s 240 fnt82 0 7512(w)m 2(ork,)k 612(and)s
+1031(proceeded)s 2088(approximately)s 3538(as)s 3803(described)s 4793(in)s
+5051(Section)s 5840(5.1;)s 6268(the)s 6631(implementation)s 8204(occupied)s
+0 7224(the)m 348(years)s 903(1987-89.)s 240 fnt84 0 6575(5.1.)m
+471(The)s 926(galley)s 1580(abstraction)s 240 fnt82 480 6098(Let)m
+870(us)s 1147(tak)s 2(e)k 1611(the)s 1972(footnote)s
+2838(as)s 3100(a)s 3279(representati)s 6(v)k 3(e)k
+4677(e)s 3(xample.)k 5661(At)s 5973(some)s 6546(point)s
+7111(in)s 7366(the)s 7727(document,)s 8791(we)s 0 5810(wish)m
+509(to)s 748(write)s 220 fnt35 480 5362(preceding te)m 6(xt)k
+480 5074(@F)m 6(ootNote { f)k 6(ootnote te)k 6(xt })k 480 4786(f)m 6(ollo)k 3(wing te)k 6(xt)k
+240 fnt82 0 4287(and)m 406(we)s 744(e)s 3(xpect)k
+1428(the)s 1779(formatter)s 2729(to)s 2971(remo)s 3(v)k 3(e)k
+3741(the)s 4092(footnote)s 4947(from)s 5474(this)s 5873(conte)s 3(xt)k
+6637(and)s 7044(place)s 7607(it)s 7802(at)s 8037(the)s
+8388(bottom)s 0 3999(of)m 281(the)s 639(current)s 1386(page,)s
+1955(possibly)s 2817(splitting)s 3664(some)s 4235(or)s 4504(all)s
+4808(of)s 5089(it)s 5291(onto)s 5781(a)s 5957(follo)s 6(wing)k
+6944(page)s 7463(if)s 7690(space)s 8287(is)s 8508(insuf)s
+8998(-)s 0 3711(\207cient.)m 480 3337(An)m 844(object)s 1503(appears)s
+2298(in)s 2556(the)s 2918(\207nal)s 3413(document)s 4431(at)s
+4678(the)s 5040(point)s 5607(it)s 5813(is)s 6038(in)s 9(v)k 4(ok)k 2(ed,)k
+6916(b)s 4(ut)k 7293(this)s 7703(basic)s 8262(property)s
+0 3049(does)m 503(not)s 882(hold)s 1379(for)s 1730(footnotes:)s
+2799(the)s 3160(point)s 3725(of)s 4009(in)s 9(v)k 4(ocation)k
+5076(and)s 5493(the)s 5854(point)s 6419(of)s 6703(appearance)s
+7847(are)s 8207(dif)s 6(ferent.)k 0 2761(In)m 254(some)s
+813(w)s 2(ay)k 15(,)k 1299(the)s 1645(footnote)s
+2496(is)s 2703(attached)s 3555(to)s 3791(the)s 4137(document)s
+5139(at)s 5368(both)s 5849(points,)s 6539(introducing)s 7692(a)s
+7856(cross)s 8395(linking)s 0 2473(\(Section)m 853(2.1\))s 1281(that)s
+1699(cannot)s 2397(be)s 2679(described)s 3653(in)s 3896(purely)s
+4561(functional)s 5585(terms.)s 480 2099(Since)m 1069(the)s 1420(interpretation)s
+2766(of)s 3040(an)s 3(y)k 3440(object)s 4087(depends)s
+4926(on)s 5226(an)s 5512(en)s 9(vironment)k 6775(and)s
+7182(style)s 7692(inherited)s 8602(from)s 0 1811(the)m 347(conte)s 3(xt,)k
+1153(the)s 1499(\207rst)s 1929(question)s 2795(must)s 3318(be)s
+3598(whether)s 4427(the)s 4773(footnote)s 5624(inherits)s 6390(them)s
+6926(through)s 7726(the)s 8072(in)s 9(v)k 4(ocation)k
+0 1523(point)m 552(or)s 811(through)s 1613(the)s 1961(point\(s\))s
+2753(of)s 3024(appearance.)s 480 1149(If)m 697(symbols)s 1533(are)s
+1867(to)s 2092(be)s 2361(interpreted)s 3440(statically)s 4341(as)s
+4578(heretofore,)s 5653(then)s 6108(en)s 9(vironments)k 7439(must)s
+7951(be)s 8219(inherited)s 0 861(through)m 829(the)s 1204(in)s 9(v)k 4(ocation)k
+2285(point)s 2865(alone.)s 3574(Dynamic)s 4531(inheritance)s 5675(through)s
+6505(the)s 6880(point)s 7459(of)s 7757(appearance)s 8916(is)s
+0 573(enticing)m 836(in)s 1092(some)s 1666(w)s 2(ays:)k
+2335(it)s 2541(might)s 3172(replace)s 3930(the)s 4291(body)s
+4838(parameter)s 9(,)k 5904(and)s 6321(it)s 6526(might)s
+7157(help)s 7635(with)s 8131(automatic)s 0 285(numbering,)m 1163(since)s
+1730(the)s 2097(number)s 2908(of)s 3198(a)s 3384(footnote)s
+4256(is)s 4486(kno)s 6(wn)k 5209(only)s 5709(at)s
+5960(the)s 6328(point)s 6899(of)s 7190(appearance;)s 8396(b)s 4(ut)k
+8778(the)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(24)s 4710(-)s 0 13256(implementation)m 1606(problems)s
+2597(are)s 2993(se)s 6(v)k 3(ere,)k 3751(and)s
+4204(static)s 4810(inheritance)s 5976(seems)s 6661(much)s 7299(simpler)s
+8125(and)s 8579(more)s 0 12968(comprehensible)m 1572(to)s 1814(the)s
+2165(user)s 13(.)k 2716(Style,)s 3317(at)s 3552(least)s
+4052(its)s 4330(a)s 4(v)k 6(ailable)k 5241(width)s
+5846(and)s 6253(height)s 6913(part,)s 7394(must)s 7922(of)s
+8196(necessity)s 0 12680(be)m 268(inherited)s 1160(through)s 1947(the)s
+2280(point)s 2817(of)s 3073(appearance.)s 4297(F)s 3(or)k
+4671(consistenc)s 3(y)k 15(,)k 5861(the)s 6194(entire)s
+6778(style)s 7270(should)s 7952(be)s 8219(inherited)s 0 12392(in)m
+256(this)s 666(w)s 2(ay)k 15(.)k 1226(There)s
+1853(is)s 2077(a)s 2257(suggesti)s 6(v)k 3(e)k
+3328(analogy)s 4154(here)s 4635(with)s 5131(actual)s 5770(parameters,)s
+6938(which)s 7594(ha)s 4(v)k 3(e)k 8109(a)s
+8289(point)s 8855(of)s 0 12104(in)m 9(v)k 4(ocation)k
+1060(from)s 1591(which)s 2240(the)s 3(y)k 2710(inherit)s
+3400(an)s 3690(en)s 9(vironment,)k 5004(and)s 5414(a)s
+5587(point)s 6146(of)s 6424(appearance)s 7562(within)s 8237(the)s
+8592(body)s 0 11816(of)m 265(the)s 606(enclosing)s 1569(de\207nition,)s
+2587(from)s 3104(which)s 3739(the)s 3(y)k 4196(inherit)s
+4872(a)s 5031(style.)s 5639(It)s 5838(may)s 6297(be)s
+6572(possible)s 7406(to)s 7638(treat)s 8114(a)s 8273(footnote)s
+0 11528(as)m 250(the)s 598(actual)s 1223(parameter)s 2237(of)s
+2508(some)s 3069(symbol,)s 3881(therefore,)s 4849(although)s 5744(the)s
+6092(details)s 6766(seem)s 7317(v)s 3(ery)k 7793(obscure.)s
+480 11154(But)m 881(the)s 1224(most)s 1744(profound)s 2674(consequence)s
+3948(of)s 4214(ha)s 4(ving)k 4910(tw)s 2(o)k
+5314(types)s 5865(of)s 6131(attachment)s 7234(point)s 7780(is)s
+7985(that)s 8398(it)s 8584(leads)s 0 10866(to)m 261(tw)s 2(o)k
+693(distincti)s 6(v)k 3(e)k 1757(tree)s 2192(structures.)s
+3306(Considering)s 4551(in)s 9(v)k 4(ocation)k 5627(points)s
+6285(only)s 6787(leads)s 7351(to)s 7612(static)s 8190(trees)s
+8714(lik)s 2(e)k 0 10578(this)m 396(one:)s gsave
+480 8292 translate
+240 fnt83 3666 1996 170 1715 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1117 1273 170 993 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 1273 170 993 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 721 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+1206 553 170 272 240 288 60 1230 1443 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(body)m 692(te)s 4(xt)k
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 2436 1715 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 1273 0 993 240 288 60 2549 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1001 552 170 272 240 288 60 116 721 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 552 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(\207gur)m 8(e)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 1117 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 3666 1715 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 7841(which)m 663(sho)s 6(ws)k 1329(that)s
+1769(the)s 2139(body)s 2695(te)s 3(xt)k 3131(contains)s
+4001(a)s 4189(footnote)s 5064(and)s 5490(a)s 5677(\207gure,)s
+6364(the)s 6734(latter)s 7305(itself)s 7875(containing)s 8960(a)s
+0 7553(footnote.)m 961(Considering)s 2184(points)s 2820(of)s 3091(appearance)s
+4222(only)s 4702(gi)s 6(v)k 3(es)k 5249(a)s
+5415(completely)s 6531(dif)s 6(ferent,)k 7453(dynamic)s 8330(tree:)s
+gsave
+480 5939 translate
+240 fnt83 4663 1274 0 995 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+3382 551 170 272 240 288 60 1281 723 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2101 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(sequence)m 1100(of)s 1381(pa)s 2(g)k 2(es)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(body)m 692(te)s 4(xt)k
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 1206 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 553 170 272 240 288 60 1319 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 2436 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+884 553 170 272 240 288 60 2549 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 552 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(\207gur)m 8(e)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 3433 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 553 170 272 240 288 60 3546 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 4663 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 5488(The)m 468(tree)s 921(can)s 1351(be)s
+1673(deeper)s 9(,)k 2448(for)s 2827(e)s 3(xample)k
+3730(with)s 4253(sections)s 5114(appearing)s 6150(within)s 6859(chapters)s
+7746(which)s 8429(appear)s 0 5200(within)m 680(the)s 1041(body)s
+1587(te)s 3(xt,)k 2062(which)s 2717(appears)s 3510(within)s
+4191(the)s 4551(\207nal)s 5044(sequence)s 5990(of)s 6273(pages.)s
+6995(Document)s 8065(formatting)s 0 4912(languages)m 1024(generally)s 1984(shirk)s
+2540(the)s 2905(issues)s 3544(raised)s 4189(by)s 4500(this)s
+4912(dual)s 5396(tree)s 5826(structure,)s 6785(by)s 7096(making)s
+7884(the)s 8249(dynamic)s 0 4624(tree)m 421(b)s 4(uilt-in,)k
+1235(by)s 1537(limiting)s 2354(one)s 2764(or)s 3032(both)s
+3523(trees)s 4032(to)s 4279(tw)s 2(o)k 4697(le)s 6(v)k 3(els,)k
+5360(and)s 5773(so)s 6047(on,)s 6402(pro)s 3(viding)k
+7391(a)s 7565(classic)s 8263(e)s 3(xample)k 0 4336(of)m
+295(the)s 667(impo)s 3(v)k 3(erishing)k 2120(ef)s 6(fect)k
+2740(of)s 3035(f)s 2(ailing)k 3733(to)s 3997(permit)s
+4704(language)s 5648(features)s 6478(to)s 6741(attain)s 7352(their)s
+7873(natural)s 8616(le)s 6(v)k 3(el)k 0 4048(of)m
+271(generality)s 15(.)k 480 3674(W)m 19(e)k 854(are)s
+1206(thus)s 1662(led)s 2017(to)s 2261(propose)s 3081(a)s
+3252(second)s 3980(abstraction)s 5091(for)s 5434(document)s 6443(formatting,)s
+7564(which)s 8211(we)s 8552(name)s 0 3386(the)m 240 fnt83
+371 3388(galle)m 7(y)k 240 fnt82 1028 3386(in)m 1294(recognition)s
+2464(of)s 2759(its)s 3058(similarity)s 4050(to)s 4312(the)s
+4684(g)s 1(alle)k 3(ys)k 5432(used)s 5952(in)s
+6219(manual)s 7001(typesetting.)s 8238(A)s 8492(g)s 1(alle)k 3(y)k
+0 3098(consists)m 817(of)s 1098(an)s 1391(object)s 2045(\(such)s
+2630(as)s 2890(a)s 3066(footnote\))s 4001(together)s 4854(with)s
+5346(a)s 5522(sequence)s 6465(of)s 6746(places)s 7404(where)s
+8054(that)s 8482(object)s 0 2810(may)m 491(appear)s 1214(\(such)s
+1814(as)s 2090(the)s 2464(bottoms)s 3311(of)s 3608(the)s
+3982(current)s 4743(and)s 5173(follo)s 6(wing)k 6176(pages\).)s
+6989(Splitting)s 7891(occurs)s 8592(quite)s 0 2522(naturally)m 903(when)s
+1479(space)s 2066(at)s 2298(an)s 3(y)k 2695(place)s
+3255(is)s 3465(insuf\207cient)s 4600(to)s 4839(hold)s 5323(the)s
+5671(entire)s 6270(object.)s 480 2148(In)m 736(Lout,)s 1295(a)s
+1461(footnote)s 2314(g)s 1(alle)k 3(y)k 2948(and)s
+3352(its)s 3628(place)s 4188(of)s 4459(appearance)s 5590(are)s
+5937(de\207ned)s 6700(as)s 6950(follo)s 6(ws:)k 220 fnt35
+480 1647(def @F)m 6(ootPlace { @Galle)k 4(y })k 480 1071(def @F)m 6(ootNote into { @F)k 6(ootPlace&&f)k 6(ollo)k 3(wing })k
+480 783( r)m -3(ight x)k 480 495({ x })m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(25)s 4706(-)s 0 13250(The)m 220 fnt35
+445 13247(@F)m 6(ootPlace)k 240 fnt82 1719 13250(symbol)m 2496(contains)s
+3362(the)s 3727(special)s 4463(symbol)s 220 fnt35 5240 13247(@Galle)m 4(y)k
+240 fnt82 6078 13250(,)m 6203(indicating)s 7229(that)s 7665(it)s
+7874(is)s 8102(a)s 8285(point)s 8855(of)s 0 12962(appearance)m
+1143(for)s 1493(a)s 1672(g)s 1(alle)k 3(y)k 15(.)k
+2413(By)s 2759(placing)s 3529(in)s 9(v)k 4(ocations)k
+4682(of)s 220 fnt35 4965 12959(@F)m 6(ootPlace)k 240 fnt82
+6234 12962(at)m 6478(the)s 6838(bottoms)s 7673(of)s 7956(pages,)s
+8620(as)s 8883(in)s 0 12674(Section)m 801(3.2,)s 1235(we)s
+1597(de\207ne)s 2265(the)s 2640(desired)s 3415(points)s 4078(of)s
+4376(appearance)s 5534(for)s 5899(footnotes.)s 6980(Symbols)s 7896(whose)s
+8592(body)s 0 12386(contains)m 220 fnt35 863 12383(@Galle)m 4(y)k
+240 fnt82 1776 12386(either)m 2394(directly)s 3192(or)s 3466(indirectly)s
+4450(are)s 4812(called)s 5455(recepti)s 6(v)k 3(e)k
+6392(symbols,)s 7312(meaning)s 8204(recepti)s 6(v)k 3(e)k
+0 12098(to)m 239(g)s 1(alle)k 3(ys,)k 1019(and)s
+1423(the)s 3(y)k 1886(are)s 2233(e)s 3(xpanded)k
+3207(only)s 3687(on)s 3984(demand.)s 4906(The)s 5334(ef)s 6(fect)k
+5930(of)s 6202(the)s 220 fnt35 6550 12095(into)m 240 fnt82
+6956 12098(clause)m 7609(is)s 7819(to)s 8058(mak)s 2(e)k
+8631(each)s 0 11810(in)m 9(v)k 4(ocation)k 1057(of)s
+220 fnt35 1332 11807(@F)m 6(ootNote)k 240 fnt82 2506 11810(a)m
+2676(g)s 1(alle)k 3(y)k 3313(whose)s 3985(object)s
+4632(is)s 4846(the)s 5198(result)s 5791(of)s 6066(the)s
+6417(in)s 9(v)k 4(ocation)k 7475(in)s 7721(the)s
+8073(usual)s 8637(w)s 2(ay)k 15(,)k 0 11522(and)m
+406(whose)s 1076(sequence)s 2011(of)s 2285(points)s 2923(of)s
+3196(appearance)s 4329(is)s 4542(speci\207ed)s 5452(by)s 5748(the)s
+220 fnt35 6098 11519(into)m 240 fnt82 6507 11522(clause;)m 7218(in)s
+7463(this)s 7861(e)s 3(xample,)k 8778(the)s 0 11234(sequence)m
+933(of)s 1204(all)s 220 fnt35 1497 11231(@F)m 6(ootPlace)k
+240 fnt82 2753 11234(symbols)m 3602(follo)s 6(wing)k 4579(the)s
+4927(in)s 9(v)k 4(ocation)k 5981(point.)s 480 10860(Lout)m
+995(permits)s 1766(g)s 1(alle)k 3(ys)k 2494(to)s
+2737(be)s 3023(in)s 9(v)k 4(ok)k 2(ed)k
+3842(within)s 4514(other)s 5069(g)s 1(alle)k 3(ys)k
+5797(to)s 6040(arbitrary)s 6919(depth,)s 7562(so)s 7832(that)s
+8254(one)s 8660(may)s 0 10572(ha)m 4(v)k 3(e)k
+514(footnotes)s 1468(within)s 2149(\207gures)s 2864(within)s 3546(the)s
+3907(body)s 4454(te)s 3(xt)k 4882(g)s 1(alle)k 3(y)k 15(,)k
+5568(for)s 5919(e)s 3(xample,)k 6846(creating)s 7681(arbitrary)s
+8570(static)s 0 10284(trees.)m 649(Recepti)s 6(v)k 3(e)k
+1688(symbols)s 2573(lik)s 2(e)k 220 fnt35 3021 10281(@F)m 6(ootPlace)k
+240 fnt82 4313 10284(may)m 4815(appear)s 5548(within)s 6252(an)s 3(y)k
+6685(g)s 1(alle)k 3(y)k 15(,)k 7393(creating)s
+8251(arbitrary)s 0 9996(dynamic)m 912(trees)s 1449(as)s 1734(well.)s
+2345(The)s 2808(root)s 3289(of)s 3595(the)s 3979(dynamic)s
+4891(tree,)s 5391(which)s 6068(w)s 2(ould)k 6759(normally)s
+7711(consist)s 8471(of)s 8778(the)s 0 9708(sequence)m 959(of)s
+1257(pages)s 1880(of)s 2178(the)s 2553(complete)s 3512(assembled)s
+4593(document,)s 5671(is)s 5908(considered)s 7029(to)s 7295(be)s
+7604(a)s 7797(g)s 1(alle)k 3(y)k 8458(whose)s
+0 9420(point)m 563(of)s 845(appearance)s 1987(is)s 2208(the)s
+2567(output)s 3250(\207le.)s 3730(Points)s 4390(of)s 4672(appearance)s
+5814(may)s 6291(be)s 220 fnt35 6584 9417(preceding)m 240 fnt82
+7606 9420(or)m 220 fnt35 7876 9417(f)m 6(ollo)k 3(wing)k
+240 fnt82 8778 9420(the)m 0 9132(in)m 9(v)k 4(ocation)k
+1054(point;)s 1658(entries)s 2345(in)s 2588(tables)s 3196(of)s
+3467(contents)s 4315(are)s 4662(the)s 5010(main)s 5545(users)s
+6087(of)s 220 fnt35 6358 9129(preceding)m 240 fnt82 7309 9132(.)m
+480 8758(The)m 913(g)s 1(alle)k 3(y)k 1552(abstraction)s
+2662(is)s 2877(adequate)s 3788(for)s 4131(all)s 4429(of)s
+4706(the)s 5059(applications)s 6270(listed)s 6850(at)s 7087(the)s
+7440(be)s 3(ginning)k 8453(of)s 8730(this)s 0 8470(section,)m
+808(e)s 3(xcept)k 1514(that)s 1957(there)s 2515(is)s
+2749(no)s 3067(pro)s 3(vision)k 4050(for)s 4413(sorting)s
+5155(inde)s 3(x)k 5763(entries)s 6475(and)s 6904(references.)s
+8073(Sorting)s 8855(of)s 0 8182(g)m 1(alle)k 3(ys)k
+715(has)s 1075(been)s 1574(added)s 2194(to)s 2423(Lout)s
+2925(as)s 3165(a)s 3321(b)s 4(uilt-in)k 4068(feature,)s
+4827(in)s 9(v)k 4(ok)k 2(ed)k 5632(by)s
+5916(adding)s 6611(a)s 6767(special)s 220 fnt35 7475 8179(@K)m 8(e)k 4(y)k
+240 fnt82 8112 8182(parameter)m 0 7894(to)m 227(the)s 563(g)s 1(alle)k 3(ys,)k
+1330(and)s 1722(using)s 2281(its)s 2545(v)s 6(alue)k
+3100(as)s 3338(the)s 3673(sort)s 4079(k)s 2(e)k 3(y)k 15(.)k
+4556(The)s 4972(author)s 5631(w)s 2(as)k 6039(at)s
+6259(a)s 6412(loss)s 6823(to)s 7049(\207nd)s 7468(an)s 3(y)k
+7852(other)s 8391(w)s 2(ay)k 15(,)k 8867(or)s
+0 7606(an)m 3(y)k 397(useful)s 1036(generalization)s 2446(of)s
+2717(this)s 3113(feature.)s 3939(Its)s 4228(implementation)s 5785(will)s
+6211(be)s 6493(discussed)s 7468(in)s 7711(Section)s 8485(6.2.)s
+240 fnt84 0 6957(5.2.)m 471(The)s 926(galley)s 1580(\210ushing)s
+2447(algorithm)s 240 fnt82 480 6480(Galle)m 3(y)k 1177(components)s
+2395(are)s 2751(promoted)s 3736(one)s 4148(by)s 4451(one)s
+4863(into)s 5298(the)s 5655(point)s 6217(of)s 6498(appearance)s
+7638(in)s 7891(the)s 8249(dynamic)s 0 6192(parent)m 672(g)s 1(alle)k 3(y)k 15(,)k
+1359(then)s 1843(carried)s 2579(along)s 3179(with)s 3676(it,)s
+3931(ultimately)s 4968(to)s 5222(the)s 5586(root)s 6046(g)s 1(alle)k 3(y)k
+6695(and)s 7115(the)s 7478(output)s 8165(\207le.)s 8650(This)s
+0 5904(process)m 800(is)s 1042(called)s 240 fnt83 1703 5906(galle)m 7(y)k
+2368(\210ushing)s 240 fnt82 3121 5904(:)m 3259(the)s 3640(g)s 1(alle)k 3(ys)k
+4396(are)s 4775(ri)s 6(v)k 3(ers)k 5393(running)s
+6223(together)s 7098(to)s 7370(the)s 7750(sea,)s 8194(and)s
+8631(each)s 0 5616(component)m 1124(is)s 1334(a)s 1500(drop)s
+1992(of)s 2263(w)s 2(ater)k 13(.)k 480 5242(Here)m
+1057(is)s 1324(a)s 1547(snapshot)s 2502(of)s 2830(a)s
+3053(small)s 3682(dynamic)s 4616(tree,)s 5137(based)s 5797(on)s
+6151(the)s 220 fnt35 6556 5239(@P)m 8(ageList)k 240 fnt82
+7737 5242(de\207nitions)m 8855(of)s 0 4954(Section)m 774(3.2:)s 6982 3257 0 3257 240 288 60 480 1406 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+200 fnt83
+0 3121(output)m 563(\207le)s gsave
+860 0 translate
+240 fnt82 0 3257 0 3165 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+0 0 0 0 240 288 60 0 3165 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(A) lfigpromotelabels
+grestore
+1994(r)s 9(oot)k 2370(galle)s 6(y)k
+gsave
+1994 2967 translate
+240 fnt82 1927 0 0 0 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+1994 473 translate
+240 fnt82 1927 2494 0 2494 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s 1035(-)s 410 2000(A)m
+563(small)s 140 fnt35 170 1784(@Galle)m 2(y)k 160 fnt82
+743(*)s 904 1617 5 1545 160 180 40 853 275 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+10 10 5 5 160 180 40 0 1540 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(C) lfigpromotelabels
+grestore
+140 fnt35 170 173(@F)m 4(ootSect)k
+grestore
+gsave
+1994 0 translate
+240 fnt82 1927 473 170 237 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35
+170 201(@P)m 5(ageList 2)k
+grestore
+5055 2611(body)m 5490(te)s 4(xt)k
+gsave
+5055 1974 translate
+240 fnt82 1927 483 170 240 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1927 483 170 240 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 204(paragraph)m
+grestore
+(D) lfigpromotelabels
+grestore
+gsave
+5055 1524 translate
+240 fnt82 1927 450 170 207 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 171(of)m 351(te)s 2(xt.)k
+
+grestore
+gsave
+5055 1034 translate
+240 fnt82 1927 490 170 244 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt35 170 203(@Input)m
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@W lfigprevious /FROM lfigpointdef
+A@E lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ D@W lfigprevious /FROM lfigpointdef
+C@E lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 955(The)m 472(components)s 1724(of)s
+2039(the)s 2431(body)s 3009(te)s 3(xt)k 3468(g)s 1(alle)k 3(y)k
+4146(are)s 4537(lines,)s 5139(e)s 3(xcept)k 5864(for)s
+6246(the)s 6638(special)s 7400(recepti)s 6(v)k 3(e)k
+8366(symbol)s 220 fnt35 0 664(@Input)m 240 fnt82 759 667(which)m
+1393(is)s 1595(a)s 1753(placeholder)s 2920(for)s 3249(as)s
+3491(yet)s 3835(unread)s 4536(input)s 5080(\(Section)s 5924(5.4\).)s
+6459(The)s 6879(components)s 8079(of)s 8342(the)s 8681(root)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(26)s 4709(-)s 0 13251(g)m 1(alle)k 3(y)k
+646(are)s 1006(pages,)s 1671(e)s 3(xcept)k 2364(for)s
+2715(the)s 3076(concluding)s 4205(une)s 3(xpanded)k 5431(in)s 9(v)k 4(ocation)k
+6498(of)s 220 fnt35 6781 13248(@P)m 8(ageList)k 240 fnt82
+7845 13251(,)m 7965(which)s 8620(is)s 8843(an)s 0 12963(ine)m 3(xhaustible)k
+1328(source)s 2008(of)s 2279(more)s 2826(pages,)s 3478(e)s 3(xpanded)k
+4451(on)s 4748(demand.)s 480 12589(The)m 923(concrete)s 1804(data)s
+2277(structure)s 3184(used)s 3696(by)s 4006(Basser)s 4718(Lout)s
+5246(permits)s 6028(the)s 6392(g)s 1(alle)k 3(y)k
+7041(\210ushing)s 7882(algorithm)s 8887(to)s 0 12301(na)m 4(vig)k 1(ate)k
+861(the)s 1209(dynamic)s 2086(tree)s 2499(and)s 2903(\207nd)s
+3334(signi\207cant)s 4390(features)s 5196(quickly:)s gsave
+480 4942 translate
+200 fnt82 8081 7019 226 7019 200 288 50 LoutGraphic
+gsave
+grestore save gsave 100 dict begin lfigdict begin
+grestore
+980 7019 226 6704 200 288 50 0 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+980 585 226 270 200 288 50 0 6434 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 226(HEAD)m
+
+grestore
+(A) lfigpromotelabels
+grestore
+1927 588 226 273 200 288 50 1830 6431 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1631 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEIVING)m 1306(*)s
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 6431 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 5503 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEPTIVE)m
+
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 5503 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 0 0 0 200 288 50 1830 5163 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+0 0 0 0 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 5163 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 2494 0 2494 200 288 50 1830 2669 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s 1035(-)s 410 2000(A)m
+563(small)s 1587 1611 0 1545 160 180 40 170 275 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+572 132 0 66 160 180 40 0 1479 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 0 30(@Galle)m 2(y )k
+grestore
+(E) lfigpromotelabels
+grestore
+1587 105 0 39 160 180 40 170 170 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+731 105 0 39 160 180 40 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35
+0 3(@F)m 4(ootSect )k
+grestore
+(F) lfigpromotelabels
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 2669 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E B@E 0 B@E E@E lfigydistance lfigpadd E@E ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 2669 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E C@E 0 C@E F@E lfigydistance lfigpadd F@E ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 1741 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(GAP)m
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 1741 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 813 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 229(RECEPTIVE)m
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 813 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 473 170 237 200 288 50 1830 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 473 170 237 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 170 201(@P)m 5(ageList 2)k
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E C@E 0 C@E D@W 1.8 cm 0 lfigpadd lfigydistance lfigpadd D@W 1.8 cm 0 lfigpadd ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+980 7019 226 6704 200 288 50 4324 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+980 585 226 270 200 288 50 0 6434 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 226(HEAD)m
+grestore
+(A) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 5304 6704 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E lfigprevious /FROM lfigpointdef
+A@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 483 170 240 200 288 50 6154 6536 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 483 170 240 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 204(paragraph)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 6536 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 5608 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(GAP)m
+
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 5608 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 450 170 207 200 288 50 6154 4818 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 450 170 207 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 171(of)m 351(te)s 2(xt.)k
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 4818 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 3890 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 229(GAP)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 3890 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 2962 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEPTIVE)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 2962 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 471 170 235 200 288 50 6154 2151 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 471 170 235 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 170 199(@Input)m
+
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 2151 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 6154 2151 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E B@E 0 B@E C@W 1.2 cm 0 lfigpadd lfigydistance lfigpadd C@W 1.2 cm 0 lfigpadd ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 4491(Each)m 521(g)s 1(alle)k 3(y)k 1140(has)s
+1495(a)s 240 fnt83 1647 4493(HEAD)m 240 fnt82 2325 4491(node)m
+2832(whose)s 3485(children)s 4311(are)s 4643(its)s 4904(component)s
+6013(objects,)s 6783(separated)s 7728(by)s 240 fnt83 8007 4493(GAP)m
+240 fnt82 8516 4491(nodes)m 0 4203(recording)m 969(the)s 1317(inter)s 4(-component)k
+2953(g)s 1(aps.)k 480 3829(Each)m 1026(component)s 2161(is)s
+2383(preceded)s 3315(by)s 3621(zero)s 4096(or)s 4367(more)s
+240 fnt83 4925 3831(galle)m 7(y)k 5569(inde)s 4(x)k
+6155(nodes)s 240 fnt82 6780 3829(of)m 7063(v)s 6(arious)k
+7823(types.)s 8504(Ev)s 3(ery)k 0 3541(recepti)m 6(v)k 3(e)k
+922(symbol)s 1681(has)s 2051(a)s 240 fnt83 2216 3543(RECEPTIVE)m
+240 fnt82 3529 3541(inde)m 3(x)k 4112(pointing)s 4963(to)s
+5201(it,)s 5440(so)s 5705(that)s 6123(it)s 6314(can)s
+6703(be)s 6984(found)s 7601(without)s 8391(search)s 8998(-)s
+0 3253(ing)m 355(through)s 1152(its)s 1423(component.)s 2646(If)s
+2871(the)s 3215(symbol)s 3970(is)s 4175(currently)s 5086(the)s
+5429(tar)s 4(get)k 6023(of)s 6290(a)s 6451(g)s 1(alle)k 3(y)k 15(,)k
+7118(it)s 7305(has)s 7670(a)s 240 fnt83 7831 3255(RECEIVING)m
+240 fnt82 0 2965(inde)m 3(x)k 595(instead)s 1342(which)s
+1995(is)s 2217(also)s 2667(link)s 2(ed)k 3332(to)s
+3583(the)s 3942(incoming)s 4911(g)s 1(alle)k 3(y)k 15(.)k
+5652(Galle)s 3(ys)k 6441(that)s 6871(are)s 7229(currently)s
+8157(without)s 8960(a)s 0 2677(tar)m 4(get)k 586(are)s
+920(link)s 2(ed)k 1560(to)s 1786(the)s 2120(dynamic)s
+2984(tree)s 3383(by)s 240 fnt83 3664 2679(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 5215 2677(g)m 1(alle)k 3(y)k 5836(inde)s 3(x)k 3(es,)k
+6654(either)s 7244(just)s 7635(after)s 8118(their)s 8601(most)s
+0 2389(recent)m 643(tar)s 4(get)k 1242(if)s 1459(there)s
+1992(has)s 2362(been)s 2871(one,)s 3324(or)s 3583(else)s
+4010(at)s 4242(their)s 4739(point)s 5291(of)s 5562(in)s 9(v)k 4(ocation.)k
+480 2015(Each)m 1041(g)s 1(alle)k 3(y)k 1701(should)s
+2424(be)s 2732(thought)s 3550(of)s 3847(as)s 4123(a)s
+4315(concurrent)s 5423(process,)s 6273(although)s 7194(the)s 7569(implementation)s
+0 1727(in)m 268(C)s 506(uses)s 995(coroutines)s 2067(implemented)s
+3399(by)s 3719(procedures.)s 4957(A)s 5213(g)s 1(alle)k 3(y)k
+5873(may)s 6364(promote)s 7243(its)s 7545(\207rst)s 8002(component)s
+0 1439(only)m 499(if)s 735(it)s 946(has)s 1335(a)s
+1520(tar)s 4(get,)k 2185(suf\207cient)s 3153(space)s 3759(is)s
+3988(a)s 4(v)k 6(ailable)k 4915(at)s 5166(the)s
+5533(tar)s 4(get)k 6151(to)s 6409(recei)s 6(v)k 3(e)k
+7164(the)s 7531(component,)s 8722(and)s 0 1151(the)m 349(component)s
+1475(contains)s 2325(no)s 2620(recepti)s 6(v)k 3(e)k
+3544(symbols.)s 4508(This)s 4986(last)s 5379(condition)s 6342(seems)s
+6979(to)s 7220(be)s 7504(the)s 7854(k)s 2(e)k 3(y)k
+8251(to)s 8492(g)s 1(alle)k 3(y)k 0 863(synchronization:)m
+1722(it)s 1943(forces)s 2606(a)s 2801(bottom-up)s 3880(promotion)s
+4963(re)s 3(gime,)k 5759(pre)s 6(v)k 3(enting)k
+6855(pages)s 7480(from)s 8033(\210ushing)s 8887(to)s 0 575(output)m
+672(before)s 1338(te)s 3(xt)k 1753(\210ushes)s 2469(into)s
+2894(them,)s 3479(for)s 3817(e)s 3(xample.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(27)s 4707(-)s 480 13255(Each)m 1022(g)s 1(alle)k 3(y)k
+1663(contains)s 2519(a)s 2692(number)s 3490(of)s 3769(binary)s
+4441(semaphores,)s 5685(sho)s 6(wn)k 6369(as)s 6626(asterisks)s
+7507(in)s 7757(our)s 8144(snapshots)s 0 12967(when)m 583(set.)s
+1019(At)s 1325(an)s 3(y)k 1730(gi)s 6(v)k 3(en)k
+2317(moment,)s 3215(a)s 3389(g)s 1(alle)k 3(y)k
+4030(process)s 4805(is)s 5022(either)s 5633(running)s 6438(or)s
+6704(else)s 7139(is)s 7356(suspended)s 8419(on)s 8724(one)s
+0 12679(of)m 269(its)s 543(o)s 6(wn)k 1005(semaphores.)s
+2296(The)s 240 fnt83 2722 12681(HEAD)m 240 fnt82 3413 12679(node)m
+3933(contains)s 4779(a)s 4943(semaphore)s 6033(which)s 6673(is)s
+6881(set)s 7204(when)s 7778(the)s 8124(g)s 1(alle)k 3(y)k
+8756(has)s 0 12391(tried)m 499(to)s 742(\207nd)s 1177(a)s
+1347(tar)s 4(get)k 1950(and)s 2359(f)s 2(ailed.)k
+3068(Each)s 3607(recepti)s 6(v)k 3(e)k 4533(symbol)s
+5297(has)s 5671(a)s 5842(semaphore)s 6938(which)s 7584(is)s
+7798(set)s 8127(when)s 8708(that)s 0 12103(symbol)m 760(is)s
+970(pre)s 6(v)k 3(enting)k 2037(the)s 2385(\207rst)s
+2816(component)s 3940(from)s 4464(being)s 5049(promoted.)s 480 11729(F)m 3(or)k
+859(e)s 3(xample,)k 1762(in)s 1994(the)s 2331(snapshot)s
+3218(at)s 3439(the)s 3776(be)s 3(ginning)k 4773(of)s
+5033(this)s 5418(section,)s 6191(the)s 6528(root)s 6962(g)s 1(alle)k 3(y)k
+7585(is)s 7784(suspended)s 8829(on)s 0 11441(the)m 220 fnt35
+351 11438(@Galle)m 4(y)k 240 fnt82 1253 11441(symbol,)m 2069(b)s 4(ut)k
+2435(the)s 2787(te)s 3(xt)k 3205(g)s 1(alle)k 3(y)k
+3843(is)s 4057(running.)s 4970(It)s 5179(will)s 5608(suspend)s
+6442(on)s 6743(the)s 220 fnt35 7095 11438(@Input)m 240 fnt82
+7866 11441(symbol)m 8630(after)s 0 11153(the)m 348(\207rst)s 779(tw)s 2(o)k
+1189(components)s 2397(are)s 2744(promoted.)s 480 10779(Ev)m 3(ery)k
+1145(g)s 1(alle)k 3(y)k 240 fnt83 1822 10781(G)m
+240 fnt82 1995 10779(,)m 2145(be)s 2470(it)s 2705(a)s
+2914(list)s 3308(of)s 3623(pages,)s 4318(body)s 4895(te)s 3(xt,)k
+5400(a)s 5609(footnote,)s 6556(or)s 6858(whate)s 6(v)k 3(er)k 9(,)k
+7866(e)s 3(x)k 3(ecutes)k 8778(the)s 0 10491(follo)m 6(wing)k
+977(algorithm)s 1966(in)s 2209(parallel)s 2979(with)s 3461(e)s 6(v)k 3(ery)k
+4037(other)s 4588(g)s 1(alle)k 3(y:)k 0 9988(1.)m
+303(Initially)s 240 fnt83 1132 9990(G)m 240 fnt82 1384 9988(is)m
+1614(unattached.)s 2834(Search)s 3560(forw)s 2(ards)k 4478(or)s
+4756(backw)s 2(ards)k 5848(from)s 6392(its)s 240 fnt83
+6687 9990(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 8272 9988(inde)m 3(x)k 8876(as)s 0 9700(required,)m
+903(to)s 1142(\207nd)s 1573(a)s 1739(recepti)s 6(v)k 3(e)k
+2661(symbol)s 240 fnt83 3421 9702(S)m 240 fnt82 3602 9700(which)m
+4244(can)s 4633(e)s 3(xpand)k 5380(to)s 5619(re)s 6(v)k 3(eal)k
+6248(a)s 6414(tar)s 4(get)k 7013(for)s 240 fnt83
+7351 9702(G)m 240 fnt82 7524 9700(.)m 0 9197(2.)m 284(If)s
+514(no)s 240 fnt83 807 9199(S)m 240 fnt82 988 9197(can)m
+1377(be)s 1659(found,)s 2325(suspend)s 3155(on)s 3452(the)s
+3800(attachment)s 4908(semaphore.)s 6108(Resume)s 6935(later)s 7418(from)s
+7942(step)s 8380(1.)s 0 8694(3.)m 281(Expand)s 240 fnt83
+1068 8696(S)m 240 fnt82 1246 8694(to)m 1482(re)s 6(v)k 3(eal)k
+2107(the)s 2452(tar)s 4(get)k 3048(of)s 240 fnt83
+3316 8696(G)m 240 fnt82 3489 8694(.)m 3649(Preserv)s 3(e)k
+240 fnt83 4521 8696(S)m 240 fnt82 4642 8694(')m 13(s)k
+4849(semaphore)s 5938(by)s 6229(mo)s 3(ving)k 7007(it)s
+7196(to)s 7432(the)s 7777(\207rst)s 8204(recepti)s 6(v)k 3(e)k
+0 8406(symbol)m 760(within)s 1428(the)s 1776(e)s 3(xpansion)k
+2801(of)s 240 fnt83 3072 8408(S)m 240 fnt82 3193 8406(.)m
+0 7903(4.)m 295(Calculate)s 1264(the)s 1624(a)s 4(v)k 6(ailable)k
+2543(width)s 3156(and)s 3572(height)s 4241(at)s 4484(the)s
+4844(tar)s 4(get,)k 5501(and)s 5917(if)s 240 fnt83
+6145 7905(G)m 240 fnt82 6389 7903(is)m 6611(still)s 7034(a)s
+7211(pure)s 7704(parse)s 8275(tree,)s 8751(use)s 0 7615(the)m
+377(en)s 9(vironment)k 1667(attached)s 2550(to)s 240 fnt83
+2819 7617(G)m 240 fnt82 3081 7615(and)m 3515(the)s 3892(style)s
+4429(information)s 5643(from)s 6197(the)s 6574(tar)s 4(get)k
+7203(to)s 7471(e)s 6(v)k 6(aluate)k 240 fnt83
+8341 7617(G)m 240 fnt82 8603 7615(as)m 8883(in)s 0 7327(Section)m
+774(4.)s 0 6871(5.)m 284(Examine)s 1190(the)s 1538(components)s
+2746(of)s 240 fnt83 3017 6873(G)m 240 fnt82 3250 6871(one)m
+3652(by)s 3946(one.)s 4456(F)s 3(or)k 4845(each)s
+5340(component)s 6464(there)s 6997(are)s 7344(three)s 7877(possibilities:)s
+240 fnt83 480 6499(A)m 7(CCEPT)k 17(.)k 240 fnt82
+1513 6497(If)m 1756(the)s 2116(component)s 3253(\207ts)s 3609(into)s
+4046(the)s 4407(a)s 4(v)k 6(ailable)k 5328(space,)s
+5978(and)s 6395(has)s 6778(no)s 7083(other)s 7647(problems,)s
+8657(then)s 0 6209(promote)m 875(it)s 1090(into)s 1538(the)s
+1909(tar)s 4(get.)k 2635(If)s 2888(this)s 3306(is)s
+3539(the)s 3910(\207rst)s 4364(component)s 5511(promoted)s 6509(into)s
+6956(this)s 7375(tar)s 4(get,)k 8044(and)s 240 fnt83
+8471 6211(G)m 240 fnt82 8727 6209(is)m 8960(a)s 0 5921(forcing)m
+768(g)s 1(alle)k 3(y)k 1428(\(Section)s 2307(5.4\),)s
+2819(delete)s 3470(e)s 6(v)k 3(ery)k 4072(recepti)s 6(v)k 3(e)k
+5020(symbol)s 5806(preceding)s 6827(the)s 7201(tar)s 4(get)k
+7826(in)s 8095(the)s 8469(parent)s 0 5633(g)m 1(alle)k 3(y)k 15(.)k
+729(If)s 240 fnt83 959 5635(G)m 240 fnt82 1192 5633(is)m
+1402(the)s 1750(root)s 2195(g)s 1(alle)k 3(y)k 15(,)k
+2867(render)s 3537(the)s 3885(component)s 5009(on)s 5306(the)s
+5654(output)s 6326(\207le)s 6687(and)s 7091(dispose)s 7865(it;)s
+240 fnt83 480 5261(REJECT)m 17(.)k 240 fnt82 1490 5259(If)m
+1756(the)s 2140(component)s 3300(is)s 3546(too)s 3941(lar)s 4(ge)k
+4506(for)s 4880(the)s 5264(a)s 4(v)k 6(ailable)k
+6208(space,)s 6882(or)s 7177(a)s 240 fnt83 7379 5261(FOLLO)m 12(WS)k
+240 fnt82 8542 5259(inde)m 3(x)k 0 4971(\(described)m 1043(belo)s 6(w\))k
+1740(forbids)s 2458(its)s 2723(promotion)s 3767(into)s 4182(this)s
+4568(tar)s 4(get,)k 5203(then)s 5662(detach)s 240 fnt83
+6333 4973(G)m 240 fnt82 6556 4971(from)m 7069(the)s 7407(tar)s 4(get.)k
+8100(If)s 8320(this)s 8705(w)s 2(as)k 0 4683(the)m
+338(\207rst)s 758(component)s 1872(at)s 2093(this)s 2479(tar)s 4(get,)k
+240 fnt83 3114 4685(S)m 240 fnt82 3284 4683(has)m 3644(been)s
+4142(a)s 4298(complete)s 5219(f)s 2(ailure,)k 5936(so)s
+6191(undo)s 6713(step)s 7141(3)s 7294(\(Basser)s 8060(Lout)s
+8561(is)s 8760(not)s 0 4395(able)m 454(to)s 693(undo)s
+1226(step)s 1664(4\);)s 1975(otherwise)s 2960(delete)s 3586(the)s
+3934(tar)s 4(get.)k 4637(Return)s 5345(to)s 5584(step)s
+6022(1)s 6177(and)s 6581(continue)s 7461(immediately;)s 240 fnt83
+480 4023(SUSPEND.)m 240 fnt82 1685 4021(If)m 1928(the)s 2289(component)s
+3426(contains)s 4287(a)s 4466(recepti)s 6(v)k 3(e)k
+5402(symbol,)s 6227(it)s 6432(cannot)s 7143(be)s 7438(promoted)s
+8426(yet.)s 8896(If)s 0 3733(this)m 392(symbol)s 1148(is)s
+1354(the)s 1697(tar)s 4(get)k 2292(of)s 2559(a)s
+2720(g)s 1(alle)k 3(y)k 3350(that)s 3764(w)s 2(as)k
+4180(written)s 4909(to)s 5144(an)s 5423(auxiliary)s 6321(\207le)s
+6678(on)s 6971(a)s 7132(pre)s 6(vious)k 7997(run,)s
+8419(read)s 8883(in)s 0 3445(that)m 427(g)s 1(alle)k 3(y)k
+1071(and)s 1484(\210ush)s 2017(it.)s 2322(Otherwise)s 3370(suspend)s
+4209(on)s 4516(the)s 4873(recepti)s 6(v)k 3(e)k
+5805(symbol')s 13(s)k 6729(semaphore;)s 7887(resume)s 8643(later)s
+0 3157(from)m 524(step)s 962(4.)s 0 2653(6.)m 284(T)s 16(erminate)k
+1305(when)s 1881(the)s 2229(g)s 1(alle)k 3(y)k
+2863(is)s 3073(empty)s 15(.)k 0 2150(At)m 354(v)s 6(arious)k
+1158(points)s 1850(in)s 2148(this)s 2599(algorithm,)s 3691(recepti)s 6(v)k 3(e)k
+4668(symbols)s 5572(\(and)s 6111(their)s 6663(semaphores\))s 7975(are)s
+8378(deleted)s 0 1862(in)m 273(the)s 652(dynamic)s 1560(parent)s
+2247(g)s 1(alle)k 3(y)k 15(,)k 2950(possibly)s
+3833(permitting)s 4911(it)s 5134(to)s 5404(resume)s 6180(\210ushing.)s
+7147(When)s 7807(this)s 8234(happens,)s 0 1574(Basser)m 701(Lout)s
+1218(resumes)s 2057(the)s 2410(parent)s 3071(immediately)s 4324(after)s
+240 fnt83 4825 1576(G)m 240 fnt82 5063 1574(suspends)m 5983(or)s
+6247(terminates.)s 7410(Also,)s 7974(whene)s 6(v)k 3(er)k
+8960(a)s 0 1286(component)m 1140(is)s 1366(promoted,)s 2406(an)s 3(y)k
+2819(child)s 3371(g)s 1(alle)k 3(ys)k 4111(connected)s
+5156(to)s 5411(it)s 5619(by)s 240 fnt83 5929 1288(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 7510 1286(inde)m 3(x)k 3(es)k 8302(must)s
+8844(be)s 0 998(resumed,)m 918(since)s 1466(these)s 2014(g)s 1(alle)k 3(ys)k
+2739(may)s 3206(be)s 3490(able)s 3945(to)s 4185(\207nd)s
+4617(a)s 4784(tar)s 4(get)k 5384(no)s 6(w)k 15(.)k
+5942(A)s 6173(good)s 6712(e)s 3(xample)k 7576(of)s
+7848(this)s 8246(situation)s 0 710(occurs)m 664(when)s 1228(a)s
+1382(line)s 1785(of)s 2044(body)s 2566(te)s 3(xt)k
+2969(with)s 3440(one)s 3830(or)s 4077(more)s 4613(footnotes)s
+5542(is)s 5740(promoted)s 6703(onto)s 7171(a)s 7325(page.)s
+7929(Basser)s 8614(Lout)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(28)s 4706(-)s 0 13253(gi)m 6(v)k 3(es)k
+547(priority)s 1317(to)s 1556(such)s 2052(children,)s 2942(suspending)s
+240 fnt83 4073 13255(G)m 240 fnt82 4306 13253(while)m 4893(each)s
+5388(is)s 5598(gi)s 6(v)k 3(en)k 6178(a)s
+6344(chance)s 7064(to)s 7303(\210ush.)s 480 12879(Basser)m 1211(Lout)s
+1758(searches)s 2653(for)s 3025(the)s 3408(\207rst)s 3874(tar)s 4(get)k
+4507(of)s 240 fnt83 4813 12881(G)m 240 fnt82 5081 12879(only)m
+5595(in)s 5873(re)s 3(gions)k 6660(of)s 6965(the)s
+7348(dynamic)s 8260(tree)s 8708(that)s 0 12591(will)m 437(clearly)s
+1152(precede)s 1963(or)s 2233(follo)s 6(w)k 240 fnt83
+2917 12593(G)m 240 fnt82 3090 12591(')m 13(s)k 3312(in)s 9(v)k 4(ocation)k
+4378(point)s 4941(in)s 5196(the)s 5556(\207nal)s 6047(printed)s
+6794(document,)s 7857(whiche)s 6(v)k 3(er)k 8916(is)s
+0 12303(speci\207ed)m 904(in)s 1142(the)s 220 fnt35 1486 12300(into)m
+240 fnt82 1887 12303(clause;)m 2591(subsequent)s 3711(tar)s 4(gets)k
+4389(are)s 4731(sought)s 5426(later)s 5904(in)s 6142(the)s
+6486(same)s 7028(g)s 1(alle)k 3(y)k 7657(as)s
+7903(the)s 8246(\207rst.)s 8776(An)s 0 12015(e)m 3(xception)k
+982(to)s 1219(this)s 1613(rule,)s 2089(whose)s 2755(necessity)s
+3683(will)s 4107(be)s 4387(made)s 4959(clear)s 5480(later)s 9(,)k
+5999(is)s 6207(that)s 6623(a)s 6787(\207rst)s 220 fnt35
+7216 12012(f)m 6(ollo)k 3(wing)k 240 fnt82 8104 12015(tar)m 4(get)k
+8700(will)s 0 11727(be)m 282(sought)s 981(within)s 1649(a)s
+1815(dynamic)s 2692(sibling)s 3396(g)s 1(alle)k 3(y)k
+4030(preceding)s 240 fnt83 5026 11729(G)m 240 fnt82 5199 11727(')m 13(s)k
+5409(in)s 9(v)k 4(ocation)k 6463(point:)s gsave
+480 6741 translate
+200 fnt82 5379 4646 0 4646 200 288 50 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+200 fnt83
+0 4510(dynamic)m 722(par)s 7(ent)k gsave
+0 1353 translate
+200 fnt82 2039 3003 226 2777 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 171 0 86 200 288 50 226 2323 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+796 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(@XT)m 21(arget)k
+
+grestore
+(A) lfigpromotelabels
+grestore
+1587 136 0 47 200 288 50 226 1620 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1254 136 0 47 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+200 fnt83 0 3(UN)m 5(A)k 7(TT)k 10(A)k 6(CHED)k
+
+grestore
+(C) lfigpromotelabels
+grestore
+180 fnt35 226 752(@XT)m 21(arget)k
+grestore
+gsave
+2889 4135 translate
+200 fnt82 2490 171 0 86 200 288 50 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+2450 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(X into { @XT)m 21(arget&&f)k 5(ollo)k 2(wing })k
+
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 2720 translate
+200 fnt82 2039 1302 226 1076 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 226 492(@GT)m 21(arget)k
+grestore
+gsave
+2889 1982 translate
+200 fnt82 2490 171 0 86 200 288 50 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+2490 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(G into { @GT)m 21(arget&&f)k 5(ollo)k 2(wing })k
+
+grestore
+(D) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+200 fnt82 2039 1869 226 1643 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+gsave
+0 0 translate
+200 fnt82 0 0 0 0 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+gsave
+0 0 translate
+200 fnt82 0 0 0 0 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 D@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 6290(Here)m 240 fnt83 524 6292(G)m 240 fnt82 762 6290(will)m
+1193(\207nd)s 1629(the)s 220 fnt35 1982 6287(@GT)m 26(arget)k
+240 fnt82 3045 6290(tar)m 4(get)k 3649(within)s 240 fnt83
+4322 6292(X)m 240 fnt82 4478 6290(.)m 4647(This)s 5128(is)s
+5343(dangerous,)s 6439(since)s 6991(if)s 7213(the)s 7566(\207rst)s
+8002(component)s 0 6002(of)m 240 fnt83 303 6004(G)m 240 fnt82
+568 6002(is)m 811(then)s 1312(promoted)s 2320(via)s 240 fnt83
+2704 6004(X)m 240 fnt82 2952 6002(into)m 3410(the)s 3790(\207rst)s
+220 fnt35 4254 5999(@XT)m 26(arget)k 240 fnt82 5319 6002(rather)m
+5967(than)s 6469(into)s 6926(the)s 7307(second,)s 240 fnt83
+8111 6004(G)m 240 fnt82 8284 6002(')m 13(s)k 8527(tar)s 4(get)k
+0 5714(will)m 438(not)s 817(appear)s 1526(later)s 2022(in)s
+2277(the)s 2638(\207nal)s 3130(printed)s 3878(document)s 4894(than)s
+5376(its)s 5664(in)s 9(v)k 4(ocation)k 6731(point,)s
+7342(as)s 7605(required)s 8471(by)s 8778(the)s 220 fnt35
+0 5423(into)m 240 fnt82 406 5426(clause.)m 480 5052(Accordingly)m 15(,)k
+1753(when)s 2313(such)s 2794(a)s 2944(tar)s 4(get)k
+3528(is)s 3722(chosen,)s 4478(tw)s 2(o)k 4873(special)s
+5575(g)s 1(alle)k 3(y)k 6194(inde)s 3(x)k 3(es)k
+6954(are)s 7286(inserted)s 8084(and)s 8472(link)s 2(ed)k
+0 4764(together:)m 898(a)s 240 fnt83 1074 4766(PRECEDES)m 240 fnt82
+2327 4764(inde)m 3(x)k 2921(at)s 240 fnt83 3163 4766(G)m
+240 fnt82 3336 4764(')m 13(s)k 3555(in)s 9(v)k 4(ocation)k
+4619(point,)s 5227(and)s 5641(a)s 240 fnt83 5817 4766(FOLLO)m 12(WS)k
+240 fnt82 6952 4764(inde)m 3(x)k 7546(at)s 7787(the)s
+8145(\207rst)s 8586(com)s 8998(-)s 0 4476(ponent)m 720(of)s
+240 fnt83 1000 4478(G)m 240 fnt82 1173 4476(.)m 1346(The)s
+1783(algorithm)s 2781(checks)s 3492(before)s 4167(promoting)s 5226(an)s 3(y)k
+240 fnt83 5632 4478(FOLLO)m 12(WS)k 240 fnt82 6767 4476(inde)m 3(x)k
+7360(that)s 7787(its)s 8072(promotion)s 0 4188(w)m 2(ould)k
+661(not)s 1033(place)s 1600(it)s 1798(earlier)s 2472(than)s
+2948(the)s 3302(corresponding)s 240 fnt83 4730 4190(PRECEDES)m 240 fnt82
+5981 4188(inde)m 3(x)k 6571(in)s 6820(the)s 7175(same)s
+7728(g)s 1(alle)k 3(y)k 15(,)k 8406(and)s
+8817(re)s 8998(-)s 0 3900(jects)m 486(the)s 831(component)s
+1952(if)s 2166(it)s 2355(w)s 2(ould.)k 3113(Since)s
+240 fnt83 3697 3902(PRECEDES)m 240 fnt82 4939 3900(and)m 240 fnt83
+5340 3902(FOLLO)m 12(WS)k 240 fnt82 6463 3900(inde)m 3(x)k 3(es)k
+7236(are)s 7580(rarely)s 8187(used,)s 8730(this)s 0 3612(check)m
+619(can)s 1008(be)s 1290(implemented)s 2596(by)s 2890(linear)s
+3493(search.)s 480 3238(When)m 1114(tw)s 2(o)k 1529(components)s
+2742(are)s 3094(separated)s 4060(by)s 220 fnt35 4359 3235(/)m
+240 fnt82 4423 3238(,)m 4535(as)s 4790(opposed)s 5652(to)s
+5897(the)s 6250(more)s 6802(usual)s 220 fnt35 7367 3235(//)m
+240 fnt82 7492 3238(,)m 7604(each)s 8105(in\210uences)s 0 2950(the)m
+358(horizontal)s 1393(position)s 2232(of)s 2514(the)s 2872(other)s 13(.)k
+3525(Because)s 4389(of)s 4671(this,)s 5133(the)s 240 fnt83
+5492 2952(SUSPEND)m 240 fnt82 6596 2950(action)m 7248(is)s 7468(in)s
+7722(f)s 2(act)k 8148(tak)s 2(en)k 8732(if)s
+8960(a)s 0 2662(recepti)m 6(v)k 3(e)k 930(symbol)s
+1698(occurs)s 2382(in)s 2633(an)s 3(y)k 3039(component)s
+4171(separated)s 5140(from)s 5672(the)s 6028(\207rst)s 6468(by)s
+220 fnt35 6770 2659(/)m 240 fnt82 6903 2662(operators)m 7851(only)s 15(.)k
+8435(Ag)s 1(ain,)k 0 2374(linear)m 603(search)s 1270(forw)s 2(ards)k
+2168(to)s 2407(the)s 2755(\207rst)s 220 fnt35 3186 2371(//)m
+240 fnt82 3371 2374(suf\207ces)m 4152(for)s 4490(this)s 4886(check.)s
+480 2000(A)m 740(good)s 1308(illustration)s 2430(of)s 2731(these)s
+3308(unusual)s 4139(cases)s 4724(is)s 4964(af)s 6(forded)k
+5856(by)s 6180(the)s 220 fnt35 6558 1997(@Align)m 240 fnt82
+7344 2000(symbols)m 8223(from)s 8778(the)s 0 1712(standard)m 867(DocumentLayout)s
+2600(package.)s 3546(These)s 4171(are)s 4516(used)s 5012(to)s
+5249(produce)s 6074(displayed)s 7047(equations,)s 8069(aligned)s 8829(on)s
+0 1424(their)m 497(equals)s 1159(signs)s 1702(despite)s 2435(being)s
+3020(separated)s 3980(by)s 4274(arbitrary)s 5149(body)s 5683(te)s 3(xt.)k
+480 1050(The)m 220 fnt35 921 1047(@Align)m 240 fnt82 1689 1050(symbols)m
+2551(are)s 2911(packaged)s 3886(neatly)s 4537(for)s 4889(the)s
+5250(con)s 9(v)k 3(enience)k 6503(of)s 6787(the)s
+7148(non-e)s 3(xpert)k 8254(user)s 9(,)k 8764(b)s 4(ut)k
+0 762(we)m 335(will)s 761(sho)s 6(w)k 1315(just)s
+1720(the)s 2067(essence)s 2853(of)s 3124(the)s 3472(implementation)s
+5029(here.)s 5603(First,)s 6147(an)s 220 fnt35 6430 759(@AlignList)m
+240 fnt82 7536 762(g)m 1(alle)k 3(y)k 8170(is)s
+8379(created)s 0 474(which)m 642(contains)s 1490(an)s 1773(in\207nite)s
+2506(supply)s 3199(of)s 220 fnt35 3470 471(@AlignPlace)m 240 fnt82
+4779 474(recepti)m 6(v)k 3(e)k 5701(symbols)s 6550(separated)s
+7510(by)s 220 fnt35 7804 471(/)m 240 fnt82 7928 474(operators:)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(29)s 4708(-)s 4777 3207 0 3207 240 288 60 480 10207 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+240 fnt83 0 3044(body)m
+522(te)s 4(xt)k 926(galle)s 7(y)k gsave
+0 161 translate
+240 fnt82 2039 2720 226 2494 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 1418 0 1314 240 288 60 226 226 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+838 208 0 104 240 288 60 0 1210 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35
+0 47(@Galle)m 4(y)k
+grestore
+(A) lfigpromotelabels
+grestore
+
+grestore
+gsave
+2889 1638 translate
+240 fnt82 1888 209 0 105 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1046 209 0 105 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 0 48(@AlignList)m
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+240 fnt82 1888 1525 226 1195 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35
+226 1138(@AlignPlace)m 226 850(@AlignPlace)m 226 562(...)m 226 274(@EndAlignList)m
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 9756(Then)m
+549(equations)s 1517(lik)s 2(e)k 1471 214 393 105 240 288 60 480 9202 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1471 214 393 105 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1471 214 393 105 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+240 fnt83 0 53(f)m
+240 fnt78 113 45(\()m 240 fnt83 197 53(x)m 240 fnt78
+315 45(\))m 477(=)s 240 fnt83 690 53(g)m 240 fnt78
+816 45(\()m 240 fnt83 900 53(x)m 240 fnt78 1018 45(\))m
+1156(+)s 1357(2)s
+grestore
+
+grestore
+end end restore
+grestore
+0 8751(are)m 358(created)s 1117(and)s
+1532(sent)s 1989(to)s 220 fnt35 2239 8748(@AlignPlace&&f)m 6(ollo)k 3(wing)k
+240 fnt82 4690 8751(tar)m 4(gets.)k 5498(The)s 3(y)k
+6052(collect)s 6760(in)s 7014(the)s 220 fnt35 7374 8748(@AlignList)m
+240 fnt82 8492 8751(g)m 1(alle)k 3(y)k 0 8463(and)m
+404(are)s 751(aligned)s 1513(there:)s 5836 3212 0 3212 240 288 60 480 4911 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+240 fnt83 0 3049(body)m
+522(te)s 4(xt)k 926(galle)s 7(y)k gsave
+0 166 translate
+240 fnt82 2039 2720 226 2494 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 1418 0 1314 240 288 60 226 226 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+838 208 0 104 240 288 60 0 1210 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35
+0 47(@Galle)m 4(y)k
+grestore
+(A) lfigpromotelabels
+grestore
+
+grestore
+gsave
+2889 1643 translate
+240 fnt82 2947 209 0 105 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1046 209 0 105 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 0 48(@AlignList)m
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+240 fnt82 2947 1530 1285 1195 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2495 1078 1059 969 240 288 60 226 226 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark ysize lfigprevious /FROM lfigpointdef
+xmark 0 lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+240 fnt83
+666 917(f)m 240 fnt78 779 909(\()m 240 fnt83 863 917(x)m
+240 fnt78 981 909(\))m 1143(=)s 240 fnt83 1356 917(g)m
+240 fnt78 1482 909(\()m 240 fnt83 1566 917(x)m 240 fnt78
+1684 909(\))m 1822(+)s 2023(2)s 240 fnt83 0 629(f)m
+240 fnt78 113 621(\()m 240 fnt83 197 629(x)m 240 fnt78
+315 621(\))m 453(-)s 240 fnt83 653 629(g)m 240 fnt78
+779 621(\()m 240 fnt83 863 629(x)m 240 fnt78 981 621(\))m
+1143(=)s 1356(2)s 220 fnt35 1059 336(...)m 1059 48(@EndAlignList)m
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 4460(The)m 220 fnt35 450 4457(@AlignList)m 240 fnt82 1579 4460(g)m 1(alle)k 3(y)k
+2236(does)s 2749(not)s 3138(\210ush,)s 3734(because)s 4570(its)s
+4868(\207rst)s 5322(component)s 6469(is)s 6702(connected)s 7753(to)s
+8015(a)s 8204(recepti)s 6(v)k 3(e)k 0 4172(symbol)m
+760(by)s 220 fnt35 1054 4169(/)m 240 fnt82 1178 4172(operators.)m
+480 3798(After)m 1048(the)s 1402(last)s 1799(equation,)s 2736(an)s
+3025(empty)s 3683(forcing)s 4432(g)s 1(alle)k 3(y)k
+5072(is)s 5288(sent)s 5739(to)s 220 fnt35 5984 3795(@EndAlignList)m
+240 fnt82 7420 3798(,)m 7533(deleting)s 8362(the)s 8716(tw)s 2(o)k
+0 3510(remaining)m 1028(recepti)s 6(v)k 3(e)k 1957(symbols)s
+2813(from)s 3344(the)s 220 fnt35 3699 3507(@AlignList)m 240 fnt82
+4812 3510(g)m 1(alle)k 3(y)k 5452(and)s 5863(permitting)s
+6918(it)s 7117(to)s 7363(\210ush.)s 240 fnt83 8000 3512(FOLLO)m 12(WS)k
+240 fnt82 0 3222(inde)m 3(x)k 3(es)k 797(ensure)s
+1499(that)s 1939(each)s 2456(equation)s 3359(\207nds)s 3898(a)s
+4086(tar)s 4(get)k 4707(placed)s 5410(in)s 5675(the)s
+6045(body)s 6601(te)s 3(xt)k 7038(just)s 7465(after)s
+7983(its)s 8281(point)s 8855(of)s 0 2934(in)m 9(v)k 4(ocation,)k
+1090(so)s 1341(the)s 1675(equations)s 2628(return,)s 3290(aligned,)s
+4087(to)s 4311(approximately)s 5732(the)s 6065(points)s 6686(where)s
+7312(the)s 3(y)k 7760(were)s 8265(in)s 9(v)k 4(ok)k 2(ed.)k
+0 2646(Notice)m 703(that)s 1131(the)s 1489(\210ushing)s 2324(of)s
+2605(body)s 3149(te)s 3(xt)k 3574(is)s 3794(suspended)s
+4860(until)s 5363(the)s 5721(list)s 6082(of)s 6363(equations)s
+7341(is)s 7561(completed,)s 8674(as)s 8934(it)s 0 2358(must)m
+513(be,)s 833(since)s 1367(the)s 1702(horizontal)s 2713(position)s
+3528(of)s 3786(the)s 4121(\207rst)s 4539(equation)s 5407(cannot)s
+6092(be)s 6361(kno)s 6(wn)k 7052(until)s 7532(the)s
+7867(last)s 8245(equation)s 0 2070(is)m 210(added)s 840(to)s
+1079(the)s 1427(list.)s 480 1696(Layout)m 1262(quality)s 2025(can)s
+2459(occasionally)s 3753(be)s 4080(impro)s 3(v)k 3(ed)k
+5094(by)s 5433(rejecting)s 6366(a)s 6577(component)s 7746(that)s
+8209(could)s 8844(be)s 0 1408(promoted)m 978(\211)s 1161(for)s
+1502(e)s 3(xample,)k 2419(a)s 2588(component)s 3715(of)s
+3989(body)s 4526(te)s 3(xt)k 4944(that)s 5365(carries)s
+6054(a)s 6223(footnote)s 7079(too)s 7441(lar)s 4(ge)k
+7973(to)s 8215(\207t)s 8477(on)s 8778(the)s 0 1120(current)m
+747(page.)s 1374(Since)s 1972(Lout)s 2496(does)s 2997(not)s
+3374(specify)s 4130(ho)s 6(w)k 4602(breaking)s 5503(decisions)s
+6455(are)s 6814(made,)s 7450(be)s 3(yond)k 8222(the)s
+8582(basic)s 0 832(constraints)m 1089(imposed)s 1961(by)s 2258(a)s 4(v)k 6(ailable)k
+3169(space)s 3759(and)s 220 fnt35 4166 829(into)m 240 fnt82
+4575 832(clauses,)m 5375(in)s 5621(principle)s 6529(such)s 7028(high)s
+7514(quality)s 8236(breaking)s 0 544(could)m 592(be)s 877(added)s
+1510(to)s 1752(the)s 2102(implementation)s 3662(with)s 4147(no)s
+4443(change)s 5180(to)s 5421(the)s 5772(language.)s 6803(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7766(the)s 8117(generality)s 0 256(of)m 280(the)s 637(g)s 1(alle)k 3(y)k
+1280(\210ushing)s 2115(algorithm,)s 3160(and)s 3573(its)s 3859(already)s
+4625(considerable)s 5898(comple)s 3(xity)k 15(,)k 7073(mak)s 2(e)k
+7654(this)s 8059(a)s 8235(daunting)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(30)s 4710(-)s 0 13253(problem)m 890(in)s
+1167(practice,)s 2062(although)s 2991(a)s 3190(f)s 2(ascinating)k
+4323(one.)s 4866(T)s 5008 13205(E)m 5151 13253(X)m 5414([9],)s
+5832(with)s 6348(its)s 6657(unnested)s 7600(set)s 7958(of)s
+8263(`\210oating)s 0 12965(insertions')m 1041(clearly)s 1744(identi\207able)s 2875(as)s
+3125(each)s 3620(page)s 4128(is)s 4338(be)s 3(gun,)k
+5028(has)s 5398(the)s 5746(adv)s 6(antage)k 6766(in)s
+7009(this)s 7405(respect.)s 240 fnt84 0 12316(5.3.)m 471(Size)s
+938(constraints)s 2120(and)s 2561(size)s 2988(adjustments)s 240 fnt82
+480 11840(The)m 893(g)s 1(alle)k 3(y)k 1512(\210ushing)s
+2321(algorithm)s 3295(needs)s 3876(to)s 4099(kno)s 6(w)k
+4665(the)s 4998(a)s 4(v)k 6(ailable)k 5890(width)s
+6477(and)s 6866(height)s 7508(at)s 7725(each)s 8204(recepti)s 6(v)k 3(e)k
+0 11552(symbol.)m 869(These)s 1496(symbols)s 2346(may)s 2812(lie)s
+3106(within)s 3775(arbitrarily)s 4782(comple)s 3(x)k 5659(objects,)s
+6443(and)s 6847(the)s 3(y)k 7311(may)s 7777(compete)s
+8644(with)s 0 11264(each)m 492(other)s 1040(for)s 1375(a)s 4(v)k 6(ailable)k
+2280(space)s 2864(\(as)s 3189(body)s 3720(te)s 3(xt)k
+4132(and)s 4533(footnote)s 5383(tar)s 4(gets)k 6062(do\),)s
+6485(so)s 6748(this)s 7141(information)s 8323(must)s 8844(be)s
+0 10976(e)m 3(xtracted)k 930(from)s 1454(the)s 1802(tree)s
+2215(structure)s 3106(when)s 3682(required.)s 480 10602(F)m 3(or)k
+869(e)s 3(xample,)k 1783(consider)s 2653(the)s 3001(object)s
+220 fnt35 480 10101(5i @Wide { a / b })m 240 fnt82 0 9607(and)m 406(suppose)s
+1236(that)s 1656(the)s 2006(width)s 2610(of)s 220 fnt35
+2883 9604(a)m 240 fnt82 3062 9607(is)m 240 fnt78 3274 9601(1)m
+240 fnt83 3382 9609(i)m 240 fnt78 3459 9601(,)m 3572(2)s
+240 fnt83 3700 9609(i)m 240 fnt82 3825 9607(\()m 240 fnt78
+3898 9601(1)m 240 fnt83 4006 9609(i)m 240 fnt82 4131 9607(to)m
+4372(the)s 4722(left)s 5101(of)s 5374(the)s 5724(mark,)s
+240 fnt78 6324 9601(2)m 240 fnt83 6452 9609(i)m 240 fnt82
+6577 9607(to)m 6818(the)s 7168(right\).)s 7864(What)s 8444(then)s
+8916(is)s 0 9319(the)m 348(a)s 4(v)k 6(ailable)k
+1256(width)s 1858(at)s 220 fnt35 2090 9316(b)m 240 fnt82
+2204 9319(?)m 2423(If)s 2653(we)s 2988(let)s 3286(the)s
+3634(width)s 4236(of)s 220 fnt35 4507 9316(b)m 240 fnt82
+4681 9319(be)m 240 fnt83 4963 9321(l)m 240 fnt78 5041 9313(,)m
+240 fnt83 5148 9321(r)m 240 fnt82 5246 9319(,)m 5353(we)s
+5688(must)s 6213(ha)s 4(v)k 3(e)k 240 fnt78
+480 8771(\()m 564(1)s 240 fnt83 670 8779(i)m 240 fnt78
+817 8771(\255)m 240 fnt83 1038 8779(l)m 240 fnt78 1116 8771(\))m
+1254(+)s 1455(\()s 1539(2)s 240 fnt83 1665 8779(i)m
+240 fnt78 1812 8771(\255)m 240 fnt83 2033 8779(r)m 240 fnt78
+2143 8771(\))m 2293(\243)s 2503(5)s 240 fnt83 2622 8779(i)m
+240 fnt82 0 8226(with)m 482(the)s 240 fnt78 842 8220(\255)m
+240 fnt82 1051 8226(\(i.e.)m 1466(max\))s 2006(operations)s 3053(arising)s
+3756(from)s 4280(mark)s 4832(alignment.)s 5952(Eliminating)s 7133(them)s
+7671(gi)s 6(v)k 3(es)k 240 fnt78 480 7674(1)m
+240 fnt83 586 7682(i)m 240 fnt78 721 7674(+)m 922(2)s
+240 fnt83 1048 7682(i)m 240 fnt78 1207 7674(\243)m 1417(5)s
+240 fnt83 1536 7682(i)m 583 7387(l)m 240 fnt78 721 7379(+)m
+922(2)s 240 fnt83 1048 7387(i)m 240 fnt78 1207 7379(\243)m
+1417(5)s 240 fnt83 1536 7387(i)m 240 fnt78 571 7091(1)m
+240 fnt83 677 7099(i)m 240 fnt78 812 7091(+)m 240 fnt83
+1013 7099(r)m 240 fnt78 1207 7091(\243)m 1417(5)s 240 fnt83
+1536 7099(i)m 674 6804(l)m 240 fnt78 812 6796(+)m 240 fnt83
+1013 6804(r)m 240 fnt78 1207 6796(\243)m 1417(5)s 240 fnt83
+1536 6804(i)m 240 fnt82 0 6293(and)m 428(since)s 1000(we)s
+1359(assume)s 2144(that)s 220 fnt35 2587 6290(a)m 240 fnt82
+2788 6293(\207ts)m 3156(into)s 3606(the)s 3978(a)s 4(v)k 6(ailable)k
+4911(space,)s 5573(the)s 5946(\207rst)s 6402(inequality)s 7436(may)s
+7927(be)s 8234(dropped,)s 0 6005(lea)m 4(ving)k 240 fnt83
+851 5454(l)m 240 fnt78 1013 5446(\243)m 1223(3)s 240 fnt83
+1340 5454(i)m 480 5159(l)m 240 fnt78 618 5151(+)m 240 fnt83
+819 5159(r)m 240 fnt78 1013 5151(\243)m 1223(5)s 240 fnt83
+1342 5159(i)m 819 4871(r)m 240 fnt78 1013 4863(\243)m 1223(4)s
+240 fnt83 1348 4871(i)m 240 fnt82 0 4362(Object)m 220 fnt35
+697 4359(b)m 240 fnt82 871 4362(may)m 1337(ha)s 4(v)k 3(e)k
+1838(width)s 240 fnt83 2440 4364(l)m 240 fnt78 2518 4356(,)m
+240 fnt83 2625 4364(r)m 240 fnt82 2783 4362(for)m 3121(an)s 3(y)k
+240 fnt83 3518 4364(l)m 240 fnt82 3644 4362(and)m 240 fnt83
+4048 4364(r)m 240 fnt82 4206 4362(satisfying)m 5188(these)s 5735(inequalities,)s
+6943(and)s 7347(no)s 7640(others.)s 480 3988(Here)m 1000(is)s
+1210(another)s 1987(e)s 3(xample:)k 220 fnt35 480 3487(5i @High { a /2ix b })m
+240 fnt82 0 2986(Assuming)m 1024(that)s 220 fnt35 1442 2983(a)m
+240 fnt82 1619 2986(has)m 1989(height)s 240 fnt78 2647 2980(1)m
+240 fnt83 2753 2988(i)m 240 fnt78 2828 2980(,)m 2935(1)s
+240 fnt83 3041 2988(i)m 240 fnt82 3104 2986(,)m 3211(the)s
+3559(height)s 240 fnt83 4217 2988(l)m 240 fnt78 4295 2980(,)m
+240 fnt83 4402 2988(r)m 240 fnt82 4560 2986(of)m 220 fnt35
+4831 2983(b)m 240 fnt82 5005 2986(must)m 5530(satisfy)s 240 fnt78
+480 2428(1)m 240 fnt83 586 2436(i)m 240 fnt78 721 2428(+)m
+922(\()s 1006(\()s 1090(1)s 240 fnt83 1196 2436(i)m
+240 fnt78 1331 2428(+)m 240 fnt83 1532 2436(l)m 240 fnt78
+1610 2428(\))m 1760(\255)s 1981(2)s 240 fnt83 2107 2436(i)m
+240 fnt78 2182 2428(\))m 2320(+)s 240 fnt83 2521 2436(r)m
+240 fnt78 2703 2428(\243)m 2913(5)s 240 fnt83 3032 2436(i)m
+240 fnt82 0 1883(This)m 478(time)s 960(the)s 240 fnt78
+1325 1877(\255)m 240 fnt82 1539 1883(operation)m 2501(arises)s 3098(from)s
+3624(the)s 3975(mark-to-mark)s 5364(g)s 1(ap)k 5765(mode,)s
+6406(which)s 7050(will)s 7479(widen)s 8123(the)s 240 fnt78
+8474 1877(2)m 240 fnt83 8602 1885(i)m 240 fnt82 8728 1883(g)m 1(ap)k
+0 1595(if)m 217(necessary)s 1200(to)s 1439(pre)s 6(v)k 3(ent)k
+220 fnt35 2207 1592(a)m 240 fnt82 2384 1595(and)m 220 fnt35
+2788 1592(b)m 240 fnt82 2962 1595(from)m 3486(o)s 3(v)k 3(erlapping.)k
+4787(This)s 5263(inequality)s 6273(can)s 6662(be)s 6944(re)s 6(written)k
+7856(as)s 240 fnt83 851 1044(l)m 240 fnt78 1013 1036(\243)m
+288 fnt78 1223 1024(\245)m 240 fnt83 480 753(l)m 240 fnt78
+618 745(+)m 240 fnt83 819 753(r)m 240 fnt78 1013 745(\243)m
+1223(3)s 240 fnt83 1340 753(i)m 819 465(r)m 240 fnt78
+1013 457(\243)m 1223(2)s 240 fnt83 1349 465(i)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(31)s 4700(-)s 0 13253(In)m 263(general,)s
+1080(Lout)s 1599(is)s 1816(designed)s 2732(so)s 3005(that)s
+3430(the)s 3785(a)s 4(v)k 6(ailable)k 4700(width)s
+5309(or)s 5575(height)s 6240(at)s 6479(an)s 3(y)k
+6883(point)s 7442(can)s 7838(be)s 8128(e)s 3(xpressed)k
+0 12965(by)m 294(three)s 827(inequalities)s 1979(of)s 2250(the)s
+2598(form)s 240 fnt83 851 12414(l)m 240 fnt78 1013 12406(\243)m
+240 fnt83 1223 12414(x)m 480 12123(l)m 240 fnt78 618 12115(+)m
+240 fnt83 819 12123(r)m 240 fnt78 1013 12115(\243)m 240 fnt83
+1223 12123(y)m 819 11808(r)m 240 fnt78 1013 11800(\243)m 240 fnt83
+1223 11808(z)m 240 fnt82 0 11287(where)m 240 fnt83 641 11289(x)m
+240 fnt82 747 11287(,)m 240 fnt83 855 11289(y)m 240 fnt82
+1018 11287(and)m 240 fnt83 1423 11289(z)m 240 fnt82 1575 11287(may)m
+2042(be)s 288 fnt78 2325 11269(\245)m 240 fnt82 2523 11287(.)m
+2688(W)s 19(e)k 3058(abbre)s 6(viate)k 4104(these)s
+4652(three)s 5186(inequalities)s 6339(to)s 240 fnt83 6579 11289(l)m
+240 fnt78 6658 11281(,)m 240 fnt83 6768 11289(r)m 240 fnt78
+6953 11281(\243)m 240 fnt83 7166 11289(x)m 240 fnt78 7285 11281(,)m
+240 fnt83 7395 11289(y)m 240 fnt78 7510 11281(,)m 240 fnt83
+7620 11289(z)m 240 fnt82 7711 11287(,)m 7819(and)s 8224(we)s
+8560(call)s 240 fnt83 8960 11289(x)m 240 fnt78 0 10993(,)m
+240 fnt83 107 11001(y)m 240 fnt78 221 10993(,)m 240 fnt83
+328 11001(z)m 240 fnt82 479 10999(a)m 240 fnt83 645 11001(size)m
+1056(constr)s 3(aint)k 240 fnt82 2027 10999(.)m 480 10625(The)m
+920(tw)s 2(o)k 1343(e)s 3(xamples)k 2307(abo)s 3(v)k 3(e)k
+2942(sho)s 6(wed)k 3739(ho)s 6(w)k 4213(to)s
+4465(propag)s 1(ate)k 5475(the)s 5836(size)s 6276(constraint)s
+288 fnt78 7291 10607(\245)m 240 fnt78 7514 10619(,)m 7659(5)s
+240 fnt83 7791 10627(i)m 240 fnt78 7879 10619(,)m 288 fnt78
+8025 10607(\245)m 240 fnt82 8296 10625(for)m 220 fnt35 8647 10622(a / b)m
+240 fnt82 0 10337(do)m 6(wn)k 586(one)s 991(le)s 6(v)k 3(el)k
+1504(to)s 1746(the)s 2097(child)s 220 fnt35 2636 10334(b)m
+240 fnt82 2750 10337(.)m 2917(Basser)s 3617(Lout)s 4132(contains)s
+4982(a)s 5151(complete)s 6086(set)s 6414(of)s 6688(general)s
+7449(rules)s 7967(for)s 8308(all)s 8604(node)s 0 10049(types,)m
+627(too)s 1002(complicated)s 2244(to)s 2499(gi)s 6(v)k 3(e)k
+2974(here.)s 3565(Instead,)s 4378(we)s 4729(gi)s 6(v)k 3(e)k
+5203(just)s 5624(one)s 6042(e)s 3(xample)k 6921(of)s
+7208(ho)s 6(w)k 7685(these)s 8248(rules)s 8779(are)s
+0 9761(deri)m 6(v)k 3(ed,)k 815(using)s 1387(the)s
+1735(object)s 240 fnt83 480 9265(x)m 168 fnt78 586 9172(1)m
+220 fnt35 772 9260(/)m 240 fnt83 956 9265(x)m 168 fnt78
+1062 9172(2)m 220 fnt35 1262 9260(/)m 240 fnt83 1446 9265(.)m
+1552(.)s 1658(.)s 220 fnt35 1812 9260(/)m 240 fnt83
+1996 9265(x)m 168 fnt83 2102 9178(n)m 240 fnt82 0 8719(where)m
+240 fnt83 640 8721(x)m 168 fnt83 746 8634(j)m 240 fnt82
+852 8719(has)m 1222(width)s 240 fnt83 1824 8721(l)m 168 fnt83
+1890 8634(j)m 240 fnt78 1948 8713(,)m 240 fnt83 2055 8721(r)m
+168 fnt83 2127 8634(j)m 240 fnt82 2233 8719(for)m 2571(all)s
+240 fnt83 2864 8721(j)m 240 fnt82 2930 8719(.)m 480 8345(Suppose)m
+1345(the)s 1689(whole)s 2326(object)s 2966(has)s 3333(width)s
+3931(constraint)s 240 fnt83 4929 8347(X)m 240 fnt78 5097 8339(,)m
+240 fnt83 5204 8347(Y)m 240 fnt78 5367 8339(,)m 240 fnt83
+5474 8347(Z)m 240 fnt82 5619 8345(,)m 5722(and)s 6123(we)s
+6454(require)s 7182(the)s 7526(width)s 8124(constraint)s 0 8057(of)m
+240 fnt83 271 8059(x)m 168 fnt83 377 7972(i)m 240 fnt82
+421 8057(.)m 586(Let)s 240 fnt83 965 8059(L)m 240 fnt78
+1185 8051(=)m 240 fnt82 1401 8057(max)m 168 fnt83 1808 7972(j)m
+240 fnt83 1917 8059(l)m 168 fnt83 1983 7972(j)m 240 fnt82
+2090 8057(and)m 240 fnt83 2495 8059(R)m 240 fnt78 2723 8051(=)m
+240 fnt82 2939 8057(max)m 168 fnt83 3346 7972(j)m 240 fnt83
+3455 8059(r)m 168 fnt83 3527 7972(j)m 240 fnt82 3573 8057(,)m
+3681(so)s 3948(that)s 240 fnt83 4367 8059(L)m 240 fnt78
+4512 8051(,)m 240 fnt83 4619 8059(R)m 240 fnt82 4821 8057(is)m
+5032(the)s 5381(width)s 5984(of)s 6256(the)s 6605(whole)s
+7247(object.)s 7996(W)s 19(e)k 8366(assume)s 240 fnt83
+0 7746(L)m 240 fnt78 145 7738(,)m 240 fnt83 252 7746(R)m
+240 fnt78 477 7738(\243)m 240 fnt83 687 7746(X)m 240 fnt78
+855 7738(,)m 240 fnt83 962 7746(Y)m 240 fnt78 1125 7738(,)m
+240 fnt83 1232 7746(Z)m 240 fnt82 1377 7744(.)m 1541(Then)s
+240 fnt83 2090 7746(x)m 168 fnt83 2196 7659(i)m 240 fnt82
+2300 7744(can)m 2689(be)s 2971(enlar)s 4(ged)k 3848(to)s
+4087(an)s 3(y)k 4484(size)s 240 fnt83 4911 7746(l)m
+168 fnt83 4977 7659(i)m 240 fnt78 5081 7738(,)m 240 fnt83
+5188 7746(r)m 168 fnt83 5260 7659(i)m 240 fnt82 5364 7744(satisfying)m
+240 fnt78 480 7151(\()m 240 fnt83 564 7159(l)m 168 fnt83
+630 7072(i)m 240 fnt78 758 7151(\255)m 240 fnt83 979 7159(L)m
+240 fnt78 1124 7151(\))m 1202(,)s 1309(\()s 240 fnt83
+1393 7159(r)m 168 fnt83 1465 7072(i)m 240 fnt78 1593 7151(\255)m
+240 fnt83 1814 7159(R)m 240 fnt78 1967 7151(\))m 2117(\243)s
+240 fnt83 2327 7159(X)m 240 fnt78 2495 7151(,)m 240 fnt83
+2602 7159(Y)m 240 fnt78 2765 7151(,)m 240 fnt83 2872 7159(Z)m
+240 fnt82 0 6619(which)m 642(e)s 3(xpands)k 1475(to)s
+1714(eight)s 2252(inequalities:)s 240 fnt83 917 6068(l)m 168 fnt83
+983 5981(i)m 240 fnt78 1123 6060(\243)m 240 fnt83 1333 6068(X)m
+894 5704(L)m 240 fnt78 1123 5696(\243)m 240 fnt83 1333 5704(X)m
+528 5413(l)m 168 fnt83 594 5326(i)m 240 fnt78 710 5405(+)m
+240 fnt83 911 5413(r)m 168 fnt83 983 5326(i)m 240 fnt78
+1123 5405(\243)m 240 fnt83 1333 5413(Y)m 503 5041(l)m 168 fnt83
+569 4954(i)m 240 fnt78 685 5033(+)m 240 fnt83 886 5041(R)m
+240 fnt78 1123 5033(\243)m 240 fnt83 1333 5041(Y)m 505 4677(L)m
+240 fnt78 710 4669(+)m 240 fnt83 911 4677(r)m 168 fnt83
+983 4590(i)m 240 fnt78 1123 4669(\243)m 240 fnt83 1333 4677(Y)m
+480 4313(L)m 240 fnt78 685 4305(+)m 240 fnt83 886 4313(R)m
+240 fnt78 1123 4305(\243)m 240 fnt83 1333 4313(Y)m 911 4030(r)m
+168 fnt83 983 3943(i)m 240 fnt78 1123 4022(\243)m 240 fnt83
+1333 4030(Z)m 886 3666(R)m 240 fnt78 1123 3658(\243)m 240 fnt83
+1333 3666(Z)m 240 fnt82 0 3159(Three)m 613(are)s 960(already)s
+1717(kno)s 6(wn,)k 2471(and)s 2875(slightly)s 3646(rearranging)s
+4800(the)s 5148(others)s 5783(gi)s 6(v)k 3(es)k
+240 fnt83 869 2608(l)m 168 fnt83 935 2521(i)m 240 fnt78
+1075 2600(\243)m 240 fnt83 1285 2608(X)m 869 2236(l)m 168 fnt83
+935 2149(i)m 240 fnt78 1075 2228(\243)m 240 fnt83 1285 2236(Y)m
+240 fnt78 1508 2228(-)m 240 fnt83 1708 2236(R)m 480 1864(l)m
+168 fnt83 546 1777(i)m 240 fnt78 662 1856(+)m 240 fnt83
+863 1864(r)m 168 fnt83 935 1777(i)m 240 fnt78 1075 1856(\243)m
+240 fnt83 1285 1864(Y)m 863 1500(r)m 168 fnt83 935 1413(i)m
+240 fnt78 1075 1492(\243)m 240 fnt83 1285 1500(Z)m 863 1136(r)m
+168 fnt83 935 1049(i)m 240 fnt78 1075 1128(\243)m 240 fnt83
+1285 1136(Y)m 240 fnt78 1508 1128(-)m 240 fnt83 1708 1136(L)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(32)s 4710(-)s 0 13253(Therefore)m 997(the)s
+1345(width)s 1947(constraint)s 2949(of)s 240 fnt83 3220 13255(x)m
+168 fnt83 3326 13168(i)m 240 fnt82 3430 13253(is)m 480 12715(min)m
+240 fnt78 861 12709(\()m 240 fnt83 945 12717(X)m 240 fnt78
+1113 12709(,)m 240 fnt83 1220 12717(Y)m 240 fnt78 1443 12709(-)m
+240 fnt83 1643 12717(R)m 240 fnt78 1796 12709(\))m 1874(,)s
+240 fnt83 1981 12717(Y)m 240 fnt78 2144 12709(,)m 240 fnt82
+2251 12715(min)m 240 fnt78 2632 12709(\()m 240 fnt83 2716 12717(Z)m
+240 fnt78 2873 12709(,)m 240 fnt83 2980 12717(Y)m 240 fnt78
+3203 12709(-)m 240 fnt83 3403 12717(L)m 240 fnt78 3548 12709(\))m
+240 fnt82 0 12213(The)m 445(size)s 890(constraint)s 1909(of)s
+2198(an)s 3(y)k 2613(node)s 3152(can)s 3559(be)s
+3858(found)s 4493(by)s 4805(climbing)s 5725(the)s 6091(tree)s
+6521(to)s 6778(a)s 240 fnt83 6962 12215(WIDE)m 240 fnt82
+7641 12213(or)m 240 fnt83 7918 12215(HIGH)m 240 fnt82 8604 12213(node)m
+0 11925(where)m 636(the)s 980(constraint)s 1978(is)s 2184(tri)s 6(vial,)k
+2850(then)s 3315(propag)s 1(ating)k 4506(it)s 4694(back)s
+5203(do)s 6(wn)k 5783(to)s 6018(the)s 6362(node,)s
+6931(and)s 7331(this)s 7723(is)s 7929(the)s 8272(function)s
+0 11637(of)m 271(procedure)s 240 fnt83 1283 11639(Constr)m 3(ained)k
+240 fnt82 2530 11637(in)m 2773(Basser)s 3470(Lout.)s 480 11263(After)m
+1043(some)s 1604(components)s 2813(ha)s 4(v)k 3(e)k
+3314(been)s 3824(promoted)s 4799(into)s 5225(a)s 5391(tar)s 4(get,)k
+6038(the)s 6386(sizes)s 6902(stored)s 7544(in)s 7788(its)s
+8064(parent)s 8722(and)s 0 10975(higher)m 665(ancestors)s 1598(must)s
+2117(be)s 2392(adjusted)s 3241(to)s 3473(re\210ect)s 4122(the)s
+4464(increased)s 5417(size.)s 5946(This)s 6415(is)s 6618(done)s
+7134(by)s 7421(yet)s 7767(another)s 8537(set)s 8855(of)s
+0 10687(recursi)m 6(v)k 3(e)k 925(rules,)s 1500(upw)s 2(ard-mo)k 3(ving)k
+3081(this)s 3481(time,)s 4016(which)s 4662(cease)s 5239(as)s
+5492(soon)s 6006(as)s 6260(some)s 6825(ancestor')s 13(s)k
+7835(size)s 8266(does)s 8760(not)s 0 10399(change.)m 830(These)s
+1445(rules)s 1948(are)s 2283(embodied)s 3273(in)s 3504(procedure)s
+240 fnt83 4504 10401(AdjustSize)m 240 fnt82 5541 10399(of)m 5800(Basser)s
+6485(Lout.)s 7089(The)s 7505(adjustment)s 8601(must)s 0 10111(be)m
+282(done)s 804(before)s 1470(relinquishing)s 2785(control)s 3517(to)s
+3756(an)s 3(y)k 4153(other)s 4704(g)s 1(alle)k 3(y)k 15(,)k
+5376(b)s 4(ut)k 5738(not)s 6104(after)s 6600(e)s 6(v)k 3(ery)k
+7176(component.)s 240 fnt84 0 9462(5.4.)m 471(The)s 926(limited)s
+1696(lookahead)s 2802(pr)s 4(oblem)k 240 fnt82 480 8985(Basser)m
+1189(Lout)s 1714(assumes)s 2575(that)s 3006(there)s 3552(will)s
+3991(be)s 4286(enough)s 5062(internal)s 5859(memory)s 6723(to)s
+6975(hold)s 7472(the)s 7833(symbol)s 8606(table)s 0 8697(plus)m
+461(a)s 638(fe)s 6(w)k 1055(pages,)s 1719(b)s 4(ut)k
+2092(not)s 2469(an)s 2764(entire)s 3374(document.)s 4493(This)s
+4980(section)s 5726(describes)s 6677(the)s 7036(consequent)s 8185(problems)s
+0 8409(and)m 441(ho)s 6(w)k 940(the)s 3(y)k
+1441(were)s 1999(solv)s 3(ed.)k 2763(Other)s 3405(interpreters,)s
+4636(notably)s 5446(interacti)s 6(v)k 3(e)k 6538(editors)s
+7277(running)s 8113(on)s 8448(virtual)s 0 8121(memory)m 851(systems,)s
+1715(w)s 2(ould)k 2370(not)s 2736(necessarily)s 3851(need)s
+4361(this)s 4757(assumption.)s 480 7747(Although)m 1434(Basser)s 2122(Lout)s
+2625(can)s 3005(read)s 3466(and)s 3861(format)s 4548(an)s 3(y)k
+4936(le)s 3(g)k 1(al)k 5442(input,)s 6033(its)s
+6300(memory)s 7142(consumption)s 8427(will)s 8844(be)s 0 7459(optimized)m
+1004(when)s 1570(the)s 1908(b)s 4(ulk)k 2381(of)s
+2642(the)s 2980(document)s 3974(resides)s 4677(in)s 4910(g)s 1(alle)k 3(ys)k
+5624(whose)s 6282(tar)s 4(gets)k 6955(can)s 7334(be)s
+7606(identi\207ed)s 8557(at)s 8778(the)s 0 7171(moment)m 843(the)s 3(y)k
+1304(are)s 1650(encountered.)s 2981(Let)s 3358(us)s 3620(tak)s 2(e)k
+4071(the)s 4417(typical)s 5121(e)s 3(xample)k 5982(of)s
+6252(a)s 6416(root)s 6860(g)s 1(alle)k 3(y)k
+7492(which)s 8133(is)s 8341(a)s 8506(list)s 8855(of)s
+0 6883(pages,)m 652(a)s 220 fnt35 818 6880(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 1991 6883(g)m 1(alle)k 3(y)k 2625(tar)s 4(geted)k
+3448(into)s 3872(the)s 4220(pages,)s 220 fnt35 4872 6880(@Chapter)m
+240 fnt82 5934 6883(g)m 1(alle)k 3(ys)k 6658(tar)s 4(geted)k
+7481(into)s 220 fnt35 7905 6880(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 9019 6883(,)m 0 6595(and)m 220 fnt35 404 6592(@Section)m
+240 fnt82 1404 6595(g)m 1(alle)k 3(ys)k 2128(tar)s 4(geted)k
+2951(into)s 3376(the)s 220 fnt35 3724 6592(@Chapter)m 240 fnt82
+4787 6595(g)m 1(alle)k 3(ys:)k 220 fnt35 480 6094(@P)m 8(ageList)k
+480 5806(//)m 480 5518(@BodyT)m 26(e)k 6(xt)k 480 5230(//)m
+480 4942(@Chapter {)m 480 4654( @Section { ...)m 13( })k 480 4366( @Section { ...)m 13( })k
+480 4078( ...)m 480 3790( @Section { ...)m 13( })k 480 3502(})m 480 3214(@Chapter {)m
+480 2926( ...)m 480 2638(})m 240 fnt82 0 2144(Basser)m 702(Lout)s
+1220(is)s 1436(able)s 1896(to)s 2141(read)s 2616(and)s
+3026(process)s 3800(such)s 4302(g)s 1(alle)k 3(ys)k
+5032(one)s 5440(paragraph)s 6459(at)s 6697(a)s 6869(time)s
+7355(\(strictly)s 15(,)k 8194(from)s 8724(one)s 220 fnt35
+0 1853(//)m 240 fnt82 185 1856(at)m 417(the)s 765(outer)s
+1316(le)s 6(v)k 3(el)k 1826(of)s 2097(a)s
+2263(g)s 1(alle)k 3(y)k 2897(to)s 3136(the)s
+3484(ne)s 3(xt\),)k 4079(as)s 4329(we)s 4664(no)s 6(w)k
+5125(describe.)s 480 1482(When)m 1147(the)s 1534(parser)s 2215(encounters)s
+3341(the)s 3727(be)s 3(ginning)k 4774(of)s 5083(a)s
+5288(g)s 1(alle)k 3(y)k 15(,)k 5998(lik)s 2(e)k
+220 fnt35 6449 1479(@Chapter)m 240 fnt82 7550 1482(or)m 220 fnt35
+7848 1479(@Section)m 240 fnt82 8788 1482(,)m 8934(it)s 0 1194(initiates)m
+831(a)s 1023(ne)s 6(w)k 1495(g)s 1(alle)k 3(y)k
+2155(process.)s 3061(The)s 3515(special)s 4258(recepti)s 6(v)k 3(e)k
+5206(symbol)s 220 fnt35 5991 1191(@Input)m 240 fnt82 6784 1194(is)m
+7019(substituted)s 8139(for)s 8502(the)s 8876(as)s 0 906(yet)m
+357(unread)s 1071(right)s 1588(parameter)s 2607(of)s 2884(the)s
+3237(g)s 1(alle)k 3(y)k 15(.)k 3972(As)s
+4294(each)s 4795(paragraph)s 5813(of)s 6090(the)s 6443(right)s
+6960(parameter)s 7979(is)s 8195(read,)s 8718(it)s 8916(is)s
+0 618(deleted)m 763(from)s 1302(the)s 1665(parse)s 2240(tree)s
+2668(and)s 3087(injected)s 3916(into)s 4356(the)s 4719(g)s 1(alle)k 3(y')k 13(s)k
+220 fnt35 5524 615(@Input)m 240 fnt82 6231 618(.)m 6410(The)s
+6853(g)s 1(alle)k 3(y)k 7502(is)s 7727(then)s
+8212(resumed.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(33)s 4705(-)s 0 13253(The)m 429(parser)s
+1074(thus)s 1526(acts)s 1950(as)s 2202(an)s 2487(e)s 3(xtra)k
+3022(concurrent)s 4106(process;)s 4937(it)s 5131(has)s 5503(lo)s 6(w)k
+5912(priority)s 15(,)k 6721(so)s 6989(that)s 7409(input)s
+7963(is)s 8175(read)s 8646(only)s 0 12965(when)m 597(there)s
+1151(is)s 1382(nothing)s 2188(else)s 2636(to)s 2897(do.)s
+3322(Since)s 3930(g)s 1(alle)k 3(ys)k 4675(may)s
+5162(be)s 5465(nested,)s 6205(a)s 6392(stack)s 6965(of)s
+220 fnt35 7257 12962(@Input)m 240 fnt82 8045 12965(symbols)m 8916(is)s
+0 12677(needed,)m 781(each)s 1271(with)s 1749(its)s 2020(o)s 6(wn)k
+2480(en)s 9(vironment)k 3735(and)s 4135(style.)s 4745(If)s
+4971(a)s 5132(g)s 1(alle)k 3(y)k 5762(is)s
+5967(encountered)s 7190(for)s 7523(which)s 8161(a)s 8322(tar)s 4(get)k
+8916(is)s 0 12389(not)m 370(immediately)s 1622(identi\207able)s 2757(\(a)s
+3006(footnote,)s 3914(for)s 4257(e)s 3(xample\),)k 5254(it)s
+5450(is)s 5664(read)s 6137(in)s 6385(its)s 6665(entirety)s
+7452(and)s 7860(hung)s 8397(in)s 8645(pure)s 0 12101(parse)m
+551(tree)s 954(form)s 1468(from)s 1983(an)s 240 fnt83
+2256 12103(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 3811 12101(inde)m 3(x)k 4386(in)s 4619(the)s
+4957(usual)s 5508(w)s 2(ay)k 15(,)k 5987(with)s
+6459(an)s 6733(en)s 9(vironment)k 7983(b)s 4(ut)k
+8335(without)s 0 11813(a)m 166(style.)s 781(It)s 986(will)s
+1412(be)s 1694(\210ushed)s 2444(later)s 2927(when)s 3503(its)s
+3779(component)s 4903(is)s 5113(promoted.)s 480 11439(In)m 735(addition)s
+1575(to)s 1813(producing)s 2836(a)s 3001(steady)s 3665(\210o)s 6(w)k
+4138(of)s 4407(components)s 5614(from)s 6137(input,)s 6735(we)s
+7069(must)s 7593(also)s 8030(ensure)s 8708(that)s 0 11151(recepti)m 6(v)k 3(e)k
+928(symbols)s 1783(do)s 2083(not)s 2455(unduly)s 3182(block)s
+3781(their)s 4285(promotion.)s 5452(The)s 220 fnt35 5886 11148(@F)m 6(ootSect)k
+240 fnt82 7044 11151(symbol)m 7810(at)s 8049(the)s 8403(foot)s
+8855(of)s 0 10863(each)m 495(page)s 1003(is)s 1213(a)s
+1379(typical)s 2084(e)s 3(xample:)k 3057(until)s 3550(it)s
+3742(is)s 3952(deleted)s 4700(the)s 5048(page)s 5556(cannot)s
+6254(be)s 6536(printed.)s 480 10489(Recepti)m 6(v)k 3(e)k
+1501(symbols)s 2368(are)s 2733(e)s 3(xpanded)k 3724(only)s
+4222(on)s 4537(demand,)s 5421(so)s 220 fnt35 5705 10486(@F)m 6(ootSect)k
+240 fnt82 6874 10489(can)m 7281(be)s 7581(deleted)s 8347(as)s
+8616(soon)s 0 10201(as)m 250(we)s 585(can)s 974(pro)s 3(v)k 3(e)k
+1570(that)s 1988(it)s 2180(is)s 2390(not)s 2757(w)s 2(anted.)k
+3610(The)s 4038(symbol)s 4799(table)s 5319(can)s 5708(tell)s
+6067(us)s 6332(that)s 6750(only)s 220 fnt35 7230 10198(@F)m 6(ootNote)k
+240 fnt82 8402 10201(g)m 1(alle)k 3(ys)k 0 9913(\(with)m
+220 fnt35 555 9910(@F)m 6(ootPlace&&f)k 6(ollo)k 3(wing)k
+240 fnt82 2935 9913(tar)m 4(gets\))k 3688(w)s 2(ant)k
+4205(it,)s 4438(so)s 4697(it)s 4883(might)s 5494(be)s
+5770(possible)s 6604(to)s 6836(deduce)s 7564(that)s 220 fnt35
+7975 9910(@F)m 6(ootSect)k 240 fnt82 0 9625(may)m 466(be)s
+748(deleted)s 1496(as)s 1746(soon)s 2256(as)s 2506(body)s
+3040(te)s 3(xt)k 3455(enters)s 4076(the)s 4424(follo)s 6(wing)k
+5401(page.)s 480 9251(The)m 904(author)s 1571(w)s 2(as)k
+1987(unable)s 2677(to)s 2912(mak)s 2(e)k 3479(this)s
+3871(w)s 2(ork,)k 4463(so)s 4725(Basser)s 5418(Lout)s
+5925(requires)s 6741(the)s 7085(user)s 7538(to)s 7773(identify)s
+8565(those)s 0 8963(g)m 1(alle)k 3(ys)k 715(which)s
+1348(will)s 1764(carry)s 2299(the)s 2637(b)s 4(ulk)k
+3111(of)s 3372(the)s 3711(document)s 4705(\()s 220 fnt35
+4778 8960(@Chapter)m 240 fnt82 5781 8963(,)m 220 fnt35 5879 8960(@Section)m
+240 fnt82 6819 8963(,)m 220 fnt35 6916 8960(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 8030 8963(\))m 8149(as)s 240 fnt83 8389 8965(for)m 8(cing)k
+0 8677(galle)m 7(ys)k 240 fnt82 665 8675(,)m 792(by)s
+1107(writing)s 220 fnt35 1871 8672(f)m 6(orce into)k 240 fnt82
+2841 8675(instead)m 3596(of)s 220 fnt35 3888 8672(into)m 240 fnt82
+4315 8675(in)m 4579(their)s 5097(de\207nitions.)s 6291(As)s 6629(described)s
+7624(in)s 7888(the)s 8257(pre)s 6(vious)k 0 8387(section,)m
+790(when)s 1373(a)s 1546(forcing)s 2296(g)s 1(alle)k 3(y)k
+2937(attaches)s 3763(to)s 4009(a)s 4182(tar)s 4(get,)k
+4835(all)s 5135(recepti)s 6(v)k 3(e)k 6063(symbols)s
+6919(preceding)s 7922(the)s 8277(tar)s 4(get)k 8883(in)s
+0 8099(its)m 278(g)s 1(alle)k 3(y)k 914(are)s
+1263(deleted,)s 2062(remo)s 3(ving)k 3031(all)s 3326(impediments)s
+4614(to)s 4855(\210ushing.)s 5793(F)s 3(or)k 6184(e)s 3(xample,)k
+7100(when)s 7678(a)s 7846(forcing)s 8592(body)s 0 7811(te)m 3(xt)k
+421(g)s 1(alle)k 3(y)k 1062(enters)s 1690(a)s
+1863(ne)s 6(w)k 2317(page,)s 2882(the)s 220 fnt35
+3237 7808(@F)m 6(ootSect)k 240 fnt82 4395 7811(symbol)m 5162(on)s
+5466(the)s 5820(preceding)s 6823(page)s 7338(will)s 7771(be)s
+8060(deleted.)s 8921(It)s 0 7523(seems)m 629(lik)s 2(ely)k
+1219(that)s 1631(a)s 1791(system)s 2509(which)s 3145(could)s
+3729(af)s 6(ford)k 4358(to)s 4591(w)s 2(ait)k
+5054(until)s 5541(all)s 5828(input)s 6374(w)s 2(as)k
+6789(read)s 7252(before)s 7912(deleting)s 8729(an)s 3(y)k
+0 7235(recepti)m 6(v)k 3(e)k 922(symbols)s 1771(w)s 2(ould)k
+2426(not)s 2792(need)s 3302(forcing)s 4045(g)s 1(alle)k 3(ys.)k
+480 6861(Galle)m 3(ys)k 1258(whose)s 1925(tar)s 4(gets)k
+2607(are)s 2953(a)s 3118(long)s 3597(w)s 2(ay)k
+4047(from)s 4570(their)s 5066(in)s 9(v)k 4(ocation)k
+6119(points)s 6755(can)s 7143(be)s 7424(a)s 7589(problem.)s
+8549(If)s 8778(the)s 0 6573(direction)m 917(is)s 220 fnt35
+1139 6570(f)m 6(ollo)k 3(wing)k 240 fnt82 1969 6573(,)m
+2087(such)s 2595(g)s 1(alle)k 3(ys)k 3330(are)s
+3689(held)s 4170(in)s 4425(internal)s 5221(memory)s 6083(for)s
+6433(a)s 6610(long)s 7101(time,)s 7643(unless)s 8304(the)s 3(y)k
+8779(are)s 0 6285(to)m 248(be)s 539(sorted.)s 1296(If)s
+1535(the)s 1892(direction)s 2807(is)s 220 fnt35 3026 6282(preceding)m
+240 fnt82 3977 6285(,)m 4093(then)s 4571(either)s 5183(the)s
+5540(entire)s 6148(interv)s 3(ening)k 7296(document)s 8309(must)s
+8844(be)s 0 5997(held)m 466(in)s 704(memory)s 1551(\(pre)s 6(v)k 3(ented)k
+2617(by)s 2907(the)s 3250(tar)s 4(get)k 3844(from)s
+4364(\210ushing\),)s 5317(or)s 5572(else)s 5994(some)s 6551(forcing)s
+7289(g)s 1(alle)k 3(y)k 7918(prematurely)s 0 5709(deletes)m
+714(the)s 1062(tar)s 4(get,)k 1708(lea)s 4(ving)k
+2461(the)s 2809(g)s 1(alle)k 3(y)k 3443(bereft.)s
+480 5335(The)m 929(typical)s 1655(e)s 3(xample)k 2539(of)s
+2832(the)s 3201(latter)s 3771(case)s 4260(occurs)s 4956(when)s
+5553(the)s 5922(g)s 1(alle)k 3(y)k 6578(is)s
+6809(an)s 7113(entry)s 7680(in)s 7944(the)s 8313(table)s
+8855(of)s 0 5047(contents,)m 907(launched)s 1832(backw)s 2(ards)k
+2907(from)s 3435(the)s 3786(be)s 3(ginning)k 4797(of)s
+5071(a)s 5241(chapter)s 6007(or)s 6269(section.)s 7113(Its)s
+7406(tar)s 4(get)k 8008(in)s 8254(the)s 8606(table)s
+0 4759(of)m 286(contents)s 1150(will)s 1592(ha)s 4(v)k 3(e)k
+2108(been)s 2633(deleted)s 3397(long)s 3891(before,)s 4624(to)s
+4879(permit)s 5578(the)s 5941(rest)s 6361(of)s 6648(the)s
+7011(document)s 8031(to)s 8286(print,)s 8860(so)s 0 4471(the)m
+349(g)s 1(alle)k 3(y)k 985(ultimately)s 2009(emer)s 4(ges)k
+2854(as)s 3106(an)s 3391(unattached)s 4487(g)s 1(alle)k 3(y)k
+5122(promoted)s 6099(out)s 6467(of)s 6740(the)s 7090(root)s
+7537(g)s 1(alle)k 3(y)k 15(.)k 8268(All)s
+8630(such)s 0 4183(g)m 1(alle)k 3(ys)k 717(are)s
+1056(written)s 1781(to)s 2013(an)s 2288(auxiliary)s 3183(\207le,)s
+3588(inde)s 3(x)k 3(ed)k 4390(by)s 4676(the)s
+5016(missing)s 5806(tar)s 4(get.)k 6501(On)s 6843(the)s
+7184(ne)s 3(xt)k 7645(run,)s 8063(just)s 8460(before)s
+0 3895(that)m 418(tar)s 4(get)k 1017(is)s 1227(deleted,)s
+2024(the)s 2372(auxiliary)s 3275(\207le)s 3636(is)s 3846(check)s 2(ed)k
+4686(and)s 5090(an)s 3(y)k 5487(g)s 1(alle)k 3(ys)k
+6211(for)s 6549(it)s 6741(are)s 7088(read)s 7557(in)s
+7800(and)s 8204(\210ushed.)s 240 fnt84 0 3246(5.5.)m 471(Horizontal)s
+1628(galleys)s 240 fnt82 480 2769(There)m 1108(is)s 1333(a)s
+1514(strong)s 2180(analogy)s 3007(between)s 3876(breaking)s 4781(a)s
+4962(column)s 5752(of)s 6038(te)s 3(xt)k 6468(into)s
+6908(page-sized)s 8003(pieces,)s 8722(and)s 0 2481(breaking)m 912(a)s
+1101(paragraph)s 2137(into)s 2585(line-sized)s 3594(pieces.)s 4378(In)s
+4657(f)s 2(act,)k 5142(the)s 5513(tw)s 2(o)k
+5946(dif)s 6(fer)k 6552(only)s 7055(in)s 7321(direction:)s
+8359(v)s 3(ertical)k 0 2193(for)m 343(body)s 883(te)s 3(xt,)k
+1351(horizontal)s 2381(for)s 2724(paragraphs.)s 3943(In)s 4205(this)s
+4607(section)s 5347(we)s 5687(de\207ne)s 240 fnt83 6334 2195(horizontal)m
+7384(galle)s 7(ys)k 240 fnt82 8049 2193(,)m 8162(and)s
+8572(sho)s 6(w)k 0 1905(ho)m 6(w)k 493(the)s 3(y)k
+989(pro)s 3(vide)k 1806(an)s 2122(unlimited)s 3129(number)s
+3953(of)s 4257(paragraph)s 5302(breaking)s 6225(styles,)s 6909(as)s
+7192(well)s 7691(as)s 7974(solv)s 3(e)k 8565(some)s
+0 1617(other)m 587(problems.)s 1677(Re)s 3(grettably)k 15(,)k
+2917(lack)s 3412(of)s 3719(time)s 4235(has)s 4641(pre)s 6(v)k 3(ented)k
+5669(their)s 6202(incorporation)s 7583(into)s 8044(the)s 8429(Basser)s
+0 1329(Lout)m 512(interpreter)s 13(.)k 480 955(Imagine)m 1337(a)s
+1521(g)s 1(alle)k 3(y)k 2173(whose)s 2859(components)s
+4085(are)s 4450(separated)s 5428(by)s 5740(horizontal)s 6782(concatenation)s
+8186(operators)s 0 667(instead)m 725(of)s 986(v)s 3(ertical)k
+1742(ones,)s 2278(perhaps)s 3062(indicated)s 3986(by)s 4269(a)s
+220 fnt35 4425 664(hor)m -3(iz)k 3(ontally)k 5582(into)s
+240 fnt82 5977 667(clause.)m 6728(Then)s 7266(all)s 7549(object)s
+8182(breaking,)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(34)s 4710(-)s 0 13253(including)m 957(paragraph)s
+1970(breaking,)s 2914(could)s 3504(be)s 3786(replaced)s 4653(by)s
+4947(g)s 1(alle)k 3(y)k 5581(component)s 6705(promotion)s
+7759(lik)s 2(e)k 8171(this:)s 220 fnt35 480 12752(def @P)m 8(ar)k 2(ag)k 2(r)k 2(aph r)k -3(ight x)k
+480 12464({)m 480 12176( def @LinePlace { @Galle)m 4(y })k 480 11600( def @LineList)m 480 11312( {)m
+480 11024( @HExpand @LinePlace)m 480 10736( //1vx @LineList)m 480 10448( })m 480 9872( def @P)m 8(ar hor)k -3(iz)k 3(ontally into { @LinePlace&&preceding })k
+480 9584( r)m -3(ight x)k 480 9296( { x })m 480 8720( @LineList // @P)m 8(ar { 0.2i @Wide {} &0i x &1r)k -8(t })k
+480 8432(})m 240 fnt82 0 7938(The)m 220 fnt35 431 7935(@HExpand)m
+240 fnt82 1607 7938(operator)m 9(,)k 2504(which)s 3149(is)s
+3362(a)s 3531(primiti)s 6(v)k 3(e)k 4456(of)s
+4730(Basser)s 5430(Lout,)s 5992(horizontally)s 7204(e)s 3(xpands)k
+8040(the)s 8391(g)s 1(aps)k 8883(in)s 0 7650(its)m
+290(right)s 816(parameter)s 1844(until)s 2352(the)s 2715(result)s
+3319(\207lls)s 3743(the)s 4105(a)s 4(v)k 6(ailable)k
+5028(space,)s 5681(thus)s 6145(implementing)s 7541(line)s 7970(adjustment,)s
+0 7362(e)m 3(xcept)k 689(when)s 1274(the)s 1631(parameter)s
+2654(contains)s 3511(tab)s 4(ulation)k 4529(g)s 1(aps)k
+5027(lik)s 2(e)k 220 fnt35 5447 7359(&1r)m -8(t)k
+240 fnt82 5853 7362(,)m 5969(which)s 6620(cause)s 7216(the)s
+7573(parameter)s 8596(to)s 8844(be)s 0 7074(already)m 757(e)s 3(xpanded.)k
+1836(The)s 2264(result)s 2854(of)s 220 fnt35 480 6573(@P)m 8(ar)k 2(ag)k 2(r)k 2(aph { A shor)k -8(t par)k 2(ag)k 2(r)k 2(aph of te)k 6(xt.)k 13( })k
+240 fnt82 0 6074(w)m 2(ould)k 655(then)s 1124(be)s
+1406(something)s 2456(lik)s 2(e)k 768 5571(A)m 1073(short)s
+1687(paragraph)s 480 5283(of)m 751(te)s 3(xt.)k 0 4830(depending)m
+1061(on)s 1368(the)s 1726(a)s 4(v)k 6(ailable)k
+2645(horizontal)s 3679(space.)s 4384(An)s 4744(unlimited)s 5729(range)s
+6326(of)s 6607(paragraph)s 7630(breaking)s 8531(styles)s 0 4542(could)m
+590(be)s 872(de\207ned,)s 1684(including)s 2641(ragged)s 3350(right,)s
+3908(ragged)s 4617(left,)s 5041(break-and-center)s 9(,)k 6757(and)s
+7161(so)s 7427(on.)s 480 4168(In)m 765(Basser)s 1492(Lout,)s
+2081(indented)s 2992(paragraphs)s 4122(are)s 4499(produced)s 5477(by)s
+5801(preceding)s 6827(them)s 7394(with)s 7906(a)s 8102(horizontal)s
+0 3880(concatenation)m 1380(operator)s 9(,)k 2269(for)s 2602(e)s 3(xample)k
+220 fnt35 3459 3877(|0.5i)m 240 fnt82 3855 3880(.)m 4014(This)s
+4485(has)s 4849(the)s 5192(unfortunate)s 6345(ef)s 6(fect)k
+6935(of)s 7201(making)s 7967(an)s 8244(indented)s 0 3592(paragraph)m
+1007(into)s 1426(a)s 1586(single)s 2207(component)s 3325(of)s
+3590(the)s 3932(enclosing)s 4895(g)s 1(alle)k 3(y)k 15(,)k
+5561(so)s 5821(that)s 6233(it)s 6419(will)s 6839(al)s 2(w)k 2(ays)k
+7544(be)s 7820(k)s 2(ept)k 8283(together)s 0 3304(on)m
+297(one)s 699(page.)s 1315(Horizontal)s 2392(g)s 1(alle)k 3(ys)k
+3116(solv)s 3(e)k 3674(this)s 4070(problem)s 4927(with)s
+5409(a)s 5575(simple)s 6268(change)s 7002(to)s 220 fnt35
+7241 3301(@LineList)m 240 fnt82 8215 3304(:)m 220 fnt35 480 2803(def @LineList)m
+480 2515({)m 480 2227( |0.5i @HExpand @LinePlace)m 480 1939( //1vx @LineList)m 480 1651(})m 240 fnt82
+0 1157(sho)m 6(wing)k 860(the)s 1210(\210e)s 3(xibility)k
+2192(that)s 2611(comes)s 3275(from)s 3801(bringing)s 4666(the)s
+5016(full)s 5404(po)s 6(wer)k 6057(of)s 6330(the)s
+6680(Lout)s 7193(language)s 8115(to)s 8356(bear)s 8829(on)s
+0 869(paragraph)m 1013(layout.)s 1775(It)s 1980(is)s 2190(easy)s
+2669(to)s 2908(mak)s 2(e)k 3480(pro)s 3(vision)k
+4438(for)s 4776(a)s 4942(tag)s 5287(on)s 5584(the)s
+5932(\207rst)s 6363(line.)s 480 495(Although)m 1451(Basser)s 2158(Lout)s
+2679(permits)s 3456(recepti)s 6(v)k 3(e)k 4387(symbols)s
+5246(within)s 5923(paragraphs,)s 7089(the)s 3(y)k 7561(are)s
+7918(of)s 8198(little)s 8700(use,)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(35)s 4706(-)s 0 13250(because)m 835(their)s
+1355(a)s 4(v)k 6(ailable)k 2286(width)s 2911(is)s
+3144(calculated)s 4193(after)s 4711(paragraph)s 5747(breaking,)s 6714(and)s
+7141(the)s 7512(incoming)s 8492(g)s 1(alle)k 3(y)k
+0 12962(cannot)m 736(spread)s 1456(o)s 3(v)k 3(er)k
+1973(more)s 2558(than)s 3065(one)s 3505(line.)s 4066(W)s 9(ith)k
+4630(horizontal)s 5692(g)s 1(alle)k 3(ys,)k 6510(such)s
+7044(symbols)s 7931(w)s 2(ould)k 8625(ha)s 4(v)k 3(e)k
+0 12674(in\207nite)m 733(a)s 4(v)k 6(ailable)k 1641(width,)s
+2293(and)s 2697(we)s 3032(could)s 3622(easily)s 4233(produce)s
+5060(a)s 5226(\207lled)s 5775(paragraph)s 6788(of)s 7059(footnotes)s
+8000(lik)s 2(e)k 8412(this:)s 200 fnt82 480 12199(1)m
+240 fnt82 559 12104(See)m 987(Jones)s 1597(and)s 2028(Saunders)s
+2983(\(1982\).)s 200 fnt82 3932 12199(2)m 240 fnt82 4027 12104(Or)m
+4366(so)s 4659(Jacobsen)s 480 11804(\(1973\))m 1167(asserts.)s 200 fnt82
+2087 11899(3)m 240 fnt83 2174 11806(ibid)m 240 fnt82 2552 11804(,)m
+2659(p.)s 2883(327.)s 0 11301(based)m 603(on)s 900(an)s
+1183(in\207nite)s 1916(horizontal)s 2940(sequence)s 3873(of)s 220 fnt35
+4144 11298(@F)m 6(ootPlace)k 240 fnt82 5400 11301(symbols)m 6249(inside)s
+6876(a)s 7042(horizontal)s 8066(g)s 1(alle)k 3(y)k 15(.)k
+480 10927(When)m 1133(body)s 1692(te)s 3(xt)k 2132(is)s
+2367(placed)s 3074(on)s 3395(pages,)s 4072(the)s 4445(length)s
+5125(of)s 5421(each)s 5940(column)s 6740(v)s 6(aries)k
+7380(depending)s 8456(on)s 8778(the)s 0 10639(a)m 4(v)k 6(ailable)k
+914(v)s 3(ertical)k 1687(space.)s 2389(Horizontal)s 3472(g)s 1(alle)k 3(ys)k
+4203(could)s 4799(analogously)s 6017(produce)s 6850(lines)s 7359(of)s
+7636(v)s 6(arying)k 8421(length,)s 0 10351(and)m 404(so)s
+670(could)s 1260(\207ll)s 1580(non-rectangular)s 3153(shapes.)s 480 9977(An)m
+835(important)s 1829(theoretical)s 2896(bene\207t)s 3612(of)s 3888(horizontal)s
+4918(g)s 1(alle)k 3(ys)k 5647(is)s 5862(that)s
+6285(the)s 3(y)k 6753(w)s 2(ould)k 7413(permit)s
+8102(horizontal)s 0 9689(and)m 403(v)s 3(ertical)k 1168(to)s
+1405(be)s 1685(treated)s 2390(in)s 2631(a)s 2795(perfectly)s
+3695(symmetrical)s 4928(w)s 2(ay)k 15(,)k 5415(whereas)s
+6247(at)s 6477(present)s 7225(paragraph)s 8236(breaking)s 0 9401(is)m
+243(horizontal)s 1300(only)s 15(,)k 1851(and)s 2288(g)s 1(alle)k 3(y)k
+2955(breaking)s 3878(is)s 4121(v)s 3(ertical)k 4921(only)s 15(.)k
+5529(This)s 6038(must)s 6596(simplify)s 7479(the)s 7860(treatment)s
+8855(of)s 0 9113(non-European)m 1432(languages)s 2459(which)s 3121(\207ll)s
+3460(in)s 3722(unusual)s 4542(directions,)s 5610(although)s 6525(it)s
+6736(is)s 6965(not)s 7351(itself)s 7918(suf\207cient)s 8887(to)s
+0 8825(implement)m 1082(them.)s 480 8451(There)m 1132(are)s 1519(a)s
+1725(fe)s 6(w)k 2170(minor)s 2841(problems)s 3822(with)s
+4343(horizontal)s 5407(g)s 1(alle)k 3(ys.)k 6284(First,)s
+6867(the)s 7255(syntactic)s 8197(o)s 3(v)k 3(erhead)k
+0 8163(of)m 319(enclosing)s 1337(each)s 1880(paragraph)s 2941(in)s
+220 fnt35 3233 8160(@P)m 8(ar)k 2(ag)k 2(r)k 2(aph { ...)k 13( })k
+240 fnt82 5064 8163(or)m 5371(whate)s 6(v)k 3(er)k
+6346(is)s 6604(unacceptable.)s 8065(Permitting)s 0 7875(user)m 4(-de\207ned)k
+1234(operators)s 2172(to)s 2409(ha)s 4(v)k 3(e)k
+2908(lo)s 6(wer)k 3504(precedence)s 4633(than)s 5100(the)s
+5446(white)s 6031(space)s 6616(between)s 7468(tw)s 2(o)k
+7876(w)s 2(ords)k 8508(might)s 0 7587(help)m 450(here.)s
+1009(Second,)s 1805(the)s 2137(b)s 4(uilt-in)k 2877(paragraph)s
+3874(break)s 2(er)k 4632(includes)s 5464(h)s 1(yphenation,)k
+6738(and)s 7126(it)s 7302(permits)s 8053(line)s 8451(breaks)s
+0 7299(in)m 246(the)s 598(input)s 1153(to)s 1396(determine)s
+2410(line)s 2828(breaks)s 3506(in)s 3753(the)s 4105(output,)s
+4827(if)s 5048(desired.)s 5905(These)s 6536(features)s 7345(must)s
+7874(someho)s 6(w)k 8844(be)s 0 7011(preserv)m 3(ed.)k
+1081(Finally)s 15(,)k 1841(we)s 2167(ha)s 4(v)k 3(e)k
+2659(e)s 3(xplained)k 3634(ho)s 6(w)k 4086(the)s
+4425(Basser)s 5113(Lout)s 5616(interpreter)s 6659(assigns)s 7392(equal)s
+7956(width)s 8549(to)s 8778(the)s 0 6723(wider)m 607(columns)s
+1473(of)s 1748(tables)s 2359(\(Section)s 3216(2.5\).)s 3763(The)s
+4194(equi)s 6(v)k 6(alent)k 5242(situation)s 6126(in)s
+6372(v)s 3(ertical)k 7143(g)s 1(alle)k 3(ys)k
+7871(occurs)s 8550(when)s 0 6435(tw)m 2(o)k 416(recepti)s 6(v)k 3(e)k
+1345(symbols)s 2201(compete)s 3074(for)s 3419(v)s 3(ertical)k
+4193(space)s 4786(\(e.g.)s 220 fnt35 5262 6432(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 6487 6435(and)m 220 fnt35 6898 6432(@F)m 6(ootSect)k
+240 fnt82 7989 6435(\),)m 8182(and)s 8593(there)s 0 6147(it)m
+187(is)s 392(con)s 9(v)k 3(entional)k 1666(to)s
+1900(grant)s 2446(as)s 2691(much)s 3274(as)s 3519(required)s
+4368(to)s 4602(the)s 4945(\207rst)s 5371(arri)s 6(v)k 6(al.)k
+6140(It)s 6339(is)s 6544(not)s 6905(clear)s 7423(to)s
+7657(the)s 8000(author)s 8665(ho)s 6(w)k 0 5859(these)m
+547(dif)s 6(ferent)k 1422(approaches)s 2549(can)s 2938(be)s
+3220(reconciled.)s 240 fnt84 0 5066(6.)m 291(Cr)s 4(oss)k
+926(r)s 4(efer)k 4(ences)k 240 fnt82 480 4634(Cross)m
+1064(references,)s 2138(such)s 2622(as)s 2859(`see)s 3286(page)s
+3782(57')s 4121(and)s 4512(`see)s 4940(Figure)s 5607(5,)s 16(')k
+5871(are)s 6205(a)s 6358(useful)s 6985(b)s 4(ut)k
+7334(highly)s 7987(error)s 4(-prone)k 0 4346(feature)m 716(of)s
+985(documents.)s 2184(Scribe)s 2848([7])s 3163(introduced)s 4242(a)s
+4406(method)s 5180(of)s 5449(k)s 2(eeping)k 6256(them)s
+6792(up)s 7083(to)s 7320(date)s 7772(automatically)s 0 4058(as)m
+245(the)s 587(document)s 1585(changes:)s 2517(the)s 2859(user)s
+3311(gi)s 6(v)k 3(es)k 3852(each)s 4342(referenced)s
+5401(entity)s 5993(a)s 6153(tag,)s 6547(and)s 6945(operators)s
+7879(are)s 8220(pro)s 3(vided)k 0 3770(that)m 418(return)s
+1045(the)s 1393(page)s 1901(or)s 2160(sequence)s 3093(number)s
+3884(of)s 4155(the)s 4503(entity)s 5101(with)s 5583(a)s
+5749(gi)s 6(v)k 3(en)k 6329(tag.)s 480 3396(A)m
+712(cross)s 1256(reference)s 2201(tak)s 2(es)k 2743(an)s
+3028(object)s 3674(\(such)s 4251(as)s 4503(a)s 4671(page)s
+5181(number\))s 6042(from)s 6568(one)s 6972(point)s 7526(in)s
+7771(the)s 8122(document)s 0 3108(and)m 435(copies)s 1128(it)s
+1351(to)s 1621(another)s 9(,)k 2467(and)s 2902(this)s
+3329(generalization)s 4770(suggests)s 5663(other)s 6245(applications.)s 7595(F)s 3(or)k
+8015(e)s 3(xample,)k 8960(a)s 0 2820(running)m 831(header)s
+1562(is)s 1806(copied)s 2536(from)s 3094(the)s 3475(title)s
+3935(of)s 4240(a)s 4440(nearby)s 5179(chapter)s 9(,)k
+6013(and)s 6451(a)s 6651(reference)s 7628(is)s 7872(copied)s
+8602(from)s 0 2532(a)m 207(bibliographic)s 1576(database.)s 2604(Making)s
+3443(the)s 3832(unity)s 4419(of)s 4731(these)s 5319(applications)s
+6566(manifest)s 7489(is)s 7740(an)s 8065(interesting)s 0 2244(language)m
+920(design)s 1602(problem.)s 240 fnt84 0 1595(6.1.)m 471(The)s
+926(cr)s 4(oss)k 1494(r)s 4(efer)k 4(ence)k
+2496(abstraction)s 240 fnt82 480 1164(In)m 736(de)s 6(v)k 3(eloping)k
+1844(the)s 2192(cross)s 2734(reference)s 3677(abstraction,)s 4832(it)s
+5024(seemed)s 5799(best)s 6244(to)s 6483(be)s 3(gin)k
+7069(with)s 7551(the)s 7899(database)s 8779(ap)s 8998(-)s
+0 876(plication,)m 943(since)s 1490(it)s 1682(is)s 1892(the)s
+2240(simplest.)s 3200(Database)s 4132(relations)s 5005(are)s 5352(naturally)s
+6255(mapped)s 7071(into)s 7496(Lout)s 8008(de\207nitions:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(36)s 4709(-)s 220 fnt35 480 13253(def @Ref)m 6(erence)k
+480 12965( named @T)m 26(ag {})k 480 12677( named @A)m 6(uthor {})k 480 12389( named @Title {})m
+480 12101( named @Jour)m -5(nal {})k 480 11813({})m 240 fnt82 0 11319(The)m
+434(set)s 766(of)s 1043(all)s 1343(in)s 9(v)k 4(ocations)k
+2490(of)s 220 fnt35 2768 11316(@Ref)m 6(erence)k 240 fnt82
+4055 11319(is)m 4272(a)s 4444(relation)s 5237(whose)s 5911(attrib)s 4(utes)k
+6853(are)s 7206(the)s 7561(parameters,)s 8722(and)s 0 11031(whose)m
+659(tuples)s 1271(are)s 1608(the)s 1946(in)s 9(v)k 4(ocations.)k
+3191(T)s 19(o)k 3481(complete)s 4403(the)s 4741(correspondence,)s
+6339(we)s 6665(need)s 7165(only)s 7635(declare)s 8370(that)s
+8778(the)s 220 fnt35 0 10740(@T)m 26(ag)k 240 fnt82
+623 10743(parameter)m 1637(is)s 1847(special,)s 2617(serving)s 3374(as)s
+3624(the)s 3972(k)s 2(e)k 3(y)k 4367(attrib)s 4(ute.)k
+480 10369(F)m 3(ollo)k 6(wing)k 1508(the)s 1856(database)s
+2735(model,)s 3440(we)s 3775(ne)s 3(xt)k 4244(need)s
+4755(a)s 4921(notation)s 5762(for)s 6100(retrie)s 6(ving)k
+7075(the)s 7423(in)s 9(v)k 4(ocation)k 8477(with)s
+8960(a)s 0 10081(gi)m 6(v)k 3(en)k 580(tag:)s
+220 fnt35 480 9580(@Ref)m 6(erence&&kingston91)k 240 fnt82 0 9081(This)m
+240 fnt83 534 9083(cr)m 10(oss)k 1143(r)s 8(efer)k 8(ence)k
+240 fnt82 2141 9081(is)m 2410(lik)s 2(e)k 2881(an)s
+3223(arro)s 6(w)k 3887(pointing)s 4796(to)s 5094(the)s
+5501(in)s 9(v)k 4(ocation.)k 6721(T)s 19(o)k
+7080(access)s 7800(its)s 8135(attrib)s 4(utes,)k 0 8793(we)m
+335(write)s 220 fnt35 480 8341(@Ref)m 6(erence&&kingston91 @Open { @A)k 6(uthor)k 11(, @Title })k
+240 fnt82 0 7842(The)m 220 fnt35 484 7839(@Open)m 240 fnt82
+1347 7842(operator)m 2260(e)s 6(v)k 6(aluates)k 3245(its)s
+3578(right)s 4146(parameter)s 5217(in)s 5517(an)s 5857(en)s 9(vironment)k
+7174(which)s 7873(includes)s 8778(the)s 0 7554(e)m 3(xported)k
+892(parameters)s 1990(of)s 2261(its)s 2537(left.)s 480 7180(An)m
+829(in)s 9(v)k 4(ocation)k 1882(is)s 2091(chosen)s
+2812(to)s 3050(be)s 3331(a)s 3496(running)s 4293(header)s
+4989(because)s 5801(of)s 6071(its)s 6346(proximity)s 7342(to)s
+7580(the)s 7927(place)s 8486(where)s 0 6892(it)m 223(is)s
+465(used,)s 1043(rather)s 1691(than)s 2192(by)s 2517(its)s
+2825(tag.)s 3313(Such)s 3881(proximity)s 4910(is)s 5151(naturally)s
+6086(e)s 3(xpressed)k 7116(by)s 7442(tw)s 2(o)k
+7884(special)s 8634(tags,)s 220 fnt35 0 6601(preceding)m 240 fnt82
+1049 6604(and)m 220 fnt35 1491 6601(f)m 6(ollo)k 3(wing)k
+240 fnt82 2321 6604(;)m 2471(for)s 2848(e)s 3(xample,)k
+220 fnt35 3800 6601(@Sym&&f)m 6(ollo)k 3(wing)k 240 fnt82
+5682 6604(will)m 6146(point)s 6737(to)s 7014(the)s 7400(closest)s
+8149(follo)s 6(wing)k 0 6316(in)m 9(v)k 4(ocation)k
+1083(of)s 220 fnt35 1383 6313(@Sym)m 240 fnt82 2121 6316(in)m
+2393(the)s 2771(\207nal)s 3280(printed)s 4045(document.)s 5182(This)s
+5688(is)s 5927(much)s 6546(simpler)s 7351(conceptually)s 8657(than)s
+0 6028(reference)m 937(to)s 1169(the)s 1511(internal)s 2288(state)s
+2775(of)s 3039(the)s 3381(document)s 4378(formatter)s 5319(at)s
+5544(a)s 5704(critical)s 6413(moment,)s 7298(the)s 7639(usual)s
+8192(approach)s 0 5740(to)m 239(running)s 1037(headers.)s 480 5366(It)m
+691(turns)s 1227(out)s 1600(that)s 2025(the)s 2380(abo)s 3(v)k 3(e)k
+3009(design)s 3698(solv)s 3(es)k 4350(all)s 4650(the)s
+5005(cross)s 5554(referencing)s 6701(problems)s 7649(encountered)s 8883(in)s
+0 5078(practice)m 825(e)s 3(xcept)k 1521(one,)s 1988(which)s
+2645(may)s 3126(be)s 3422(typi\207ed)s 4226(by)s 4535(the)s
+4897(problem)s 5769(of)s 6054(\207nding)s 6801(the)s 7164(number)s
+7969(of)s 8255(the)s 8618(page)s 0 4790(on)m 303(which)s
+952(the)s 1306(chapter)s 2076(whose)s 2750(tag)s 3102(is)s
+220 fnt35 3318 4787(intro)m 240 fnt82 3804 4790(be)m 3(gins.)k
+4596(T)s 19(w)k 2(o)k 5074(cross)s 5622(referencing)s
+6769(steps)s 7304(are)s 7658(needed,)s 8449(\207rst)s 8887(to)s
+220 fnt35 0 4499(@Chapter&&intro)m 240 fnt82 1714 4502(,)m 1821(then)s
+2290(from)s 2814(there)s 3347(to)s 220 fnt35 3586 4499(@P)m 8(age&&preceding)k
+240 fnt82 5556 4502(,)m 5663(where)s 6303(the)s 6651(page)s
+7159(number)s 7950(is)s 8160(kno)s 6(wn.)k 480 4128(Gi)m 6(v)k 3(en)k
+1113(our)s 1492(success)s 2260(so)s 2526(f)s 2(ar)k 9(,)k
+2886(this)s 3282(last)s 3673(problem)s 4530(pro)s 3(v)k 3(es)k
+5213(to)s 5452(be)s 5734(surprisingly)s 6930(dif\207cult.)s 7850(W)s 19(e)k
+8219(\207rst)s 8650(try)s 220 fnt35 480 3627(@Chapter&&intro @Open {)m 480 3339( @P)m 8(age&&preceding @Open { @P)k 8(ageNum })k
+480 3051(})m 240 fnt82 0 2557(b)m 4(ut)k 363(this)s
+761(f)s 2(ails)k 1222(because)s 220 fnt35 2037 2554(@P)m 8(age&&preceding)k
+240 fnt82 4069 2557(is)m 4281(e)s 6(v)k 6(aluated)k
+5245(in)s 5490(the)s 5840(present)s 6592(conte)s 3(xt,)k
+7402(not)s 7770(in)s 8015(the)s 8365(conte)s 3(xt)k
+0 2269(of)m 220 fnt35 271 2266(@Chapter&&intro)m 240 fnt82 2045 2269(as)m
+2295(required.)s 3255(So)s 3561(our)s 3940(ne)s 3(xt)k
+4409(attempt)s 5185(is)s 220 fnt35 480 1768(def @Chapter)m 480 1480( named @P)m 8(ageNum { @P)k 8(age&&preceding @Open { @P)k 8(ageNum } })k
+480 1192( ...)m 240 fnt82 0 741(with)m 482(the)s 220 fnt35
+830 738(@P)m 8(age&&preceding)k 240 fnt82 2860 741(cross)m 3402(reference)s
+4345(attached)s 5199(to)s 5438(the)s 5786(chapter;)s 6601(we)s
+6936(write)s 220 fnt35 480 240(@Chapter&&intro @Open { @P)m 8(ageNum })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(37)s 4707(-)s 0 13253(This)m 604(also)s
+1170(f)s 2(ails,)k 1813(because)s 2754(parameters)s 3980(are)s
+4456(e)s 6(v)k 6(aluated)k 5546(after)s 6170(substitution,)s
+7521(so)s 7915(once)s 8552(ag)s 1(ain)k 220 fnt35
+0 12962(@P)m 8(age&&preceding)k 240 fnt82 2015 12965(is)m 2209(e)s 6(v)k 6(aluated)k
+3156(in)s 3383(the)s 3716(wrong)s 4365(conte)s 3(xt.)k
+5215(W)s 19(e)k 5568(could)s 6143(of)s 6398(course)s
+7063(de\207ne)s 7688(a)s 7839(ne)s 6(w)k 8270(operator)s
+0 12677(speci\207cally)m 1142(for)s 1480(this)s 1876(case:)s 220 fnt35
+480 12176(@P)m 8(age&&{ @Preceding @Chapter&&intro })k 240 fnt82 0 11677(or)m 267(some)s
+836(such.)s 1448(This)s 1932(is)s 2151(free)s 2585(of)s
+2864(the)s 3221(anno)s 2(ying)k 4172(conte)s 3(xt-sensiti)k 6(vity)k 15(,)k
+6029(b)s 4(ut)k 6399(it)s 6599(seems)s 7243(quite)s
+7785(comple)s 3(x,)k 8722(and)s 0 11389(the)m 348(e)s 3(xpected)k
+1253(cross)s 1795(reference)s 220 fnt35 2738 11386(@P)m 8(age&&preceding)k
+240 fnt82 4768 11389(does)m 5258(not)s 5624(appear)s 13(.)k
+480 11015(The)m 939(author)s 1642(w)s 2(as)k 2095(lost)s
+2532(in)s 2806(these)s 3385(obscurities)s 4503(for)s 4873(some)s
+5465(time,)s 6028(and)s 6464(ultimately)s 7518(rescued)s 8338(himself)s
+0 10727(by)m 306(looking)s 1103(ahead)s 1731(to)s 1982(the)s
+2342(implementation)s 3912(of)s 4195(the)s 220 fnt35 4555 10724(preceding)m
+240 fnt82 5578 10727(and)m 220 fnt35 5994 10724(f)m 6(ollo)k 3(wing)k
+240 fnt82 6897 10727(tags,)m 7401(to)s 7652(see)s 8025(if)s
+8254(a)s 8433(simple)s 0 10439(e)m 3(xtension)k 971(of)s
+1242(it)s 1434(w)s 2(ould)k 2089(solv)s 3(e)k
+2647(the)s 2995(problem.)s 3956(This)s 4432(led)s 4782(to)s
+5021(the)s 220 fnt35 5369 10436(@T)m 26(agged)k 240 fnt82
+6358 10439(operator:)m 220 fnt35 480 9938(@P)m 8(age&&preceding @T)k 26(agged intro)k
+240 fnt82 0 9439(placed)m 686(at)s 922(the)s 1274(be)s 3(ginning)k
+2286(of)s 2562(the)s 2914(body)s 3452(of)s 3727(the)s
+4079(chapter)s 4847(will)s 5277(attach)s 220 fnt35 5908 9436(intro)m
+240 fnt82 6391 9439(as)m 6645(an)s 6933(e)s 3(xtra)k
+7471(tag)s 7820(to)s 8063(the)s 8416(closest)s 0 9151(preceding)m
+996(in)s 9(v)k 4(ocation)k 2050(of)s 220 fnt35
+2321 9148(@P)m 8(age)k 240 fnt82 3040 9151(,)m 3147(so)s
+3413(that)s 220 fnt35 480 8650(@P)m 8(age&&intro @Open { @P)k 8(ageNum })k
+240 fnt82 0 8151(yields)m 635(the)s 996(desired)s 1758(page)s
+2279(number)s 13(.)k 3174(There)s 3801(is)s 4024(something)s
+5087(lo)s 6(w-le)k 6(v)k 3(el)k 6043(and)s
+6460(ad)s 6757(hoc)s 7170(about)s 7775(the)s 220 fnt35
+8137 8148(@T)m 26(agged)k 240 fnt82 0 7863(operator)m 9(,)k
+894(b)s 4(ut)k 1256(the)s 1604(tw)s 2(o)k
+2014(cross)s 2556(references)s 3587(do)s 3880(appear)s 4577(naturally)s 15(,)k
+5518(and)s 5922(it)s 6114(w)s 2(orks.)k 240 fnt84
+0 7214(6.2.)m 471(Implementation)s 2159(of)s 2431(cr)s 4(oss)k
+2999(r)s 4(efer)k 4(ences)k 240 fnt82 480 6737(Before)m
+1185(an)s 1466(object)s 2109(can)s 2496(be)s 2777(sized)s
+3324(and)s 3727(printed,)s 4509(the)s 4855(v)s 6(alues)k
+5510(of)s 5779(an)s 3(y)k 6175(cross)s 6715(references)s
+7745(within)s 8411(it)s 8601(must)s 0 6449(be)m 279(kno)s 6(wn.)k
+1086(If)s 1312(the)s 3(y)k 1772(refer)s 2277(to)s
+2512(in)s 9(v)k 4(ocations)k 3650(that)s 4064(ha)s 4(v)k 3(e)k
+4561(not)s 4924(yet)s 5272(been)s 5777(read,)s 6292(there)s
+6821(is)s 7027(a)s 7190(problem.)s 8147(Scribe)s 8809([7])s
+0 6161(solv)m 3(es)k 649(it)s 844(by)s 1141(capitalizing)s
+2311(on)s 2611(the)s 2962(f)s 2(act)k 3381(that)s
+3802(documents)s 4893(are)s 5243(formatted)s 6232(repeatedly)s 7284(during)s
+7965(the)s 8317(drafting)s 0 5873(process.)m 868(All)s 1214(tagged)s
+1897(in)s 9(v)k 4(ocations)k 3024(are)s 3358(copied)s
+4040(to)s 4266(an)s 4535(auxiliary)s 5425(\207le)s 5772(during)s
+6437(the)s 6771(\207rst)s 7189(run,)s 7601(and)s 7992(inde)s 3(x)k 3(ed)k
+8788(for)s 0 5585(quick)m 593(retrie)s 6(v)k 6(al)k
+1429(on)s 1725(the)s 2072(second.)s 2901(A)s 3130(ne)s 6(w)k
+3576(auxiliary)s 4478(\207le)s 4839(is)s 5048(written)s 5780(during)s
+6457(the)s 6805(second)s 7527(run,)s 7952(for)s 8289(retrie)s 6(v)k 6(al)k
+0 5297(on)m 301(the)s 654(third,)s 1217(and)s 1625(so)s
+1896(on.)s 2305(Cross)s 2906(references)s 3941(al)s 2(w)k 2(ays)k
+4657(lag)s 5007(one)s 5413(run)s 5794(behind)s 6509(the)s
+6862(rest)s 7270(of)s 7546(the)s 7899(document;)s 8960(a)s
+0 5009(perfect)m 711(cop)s 2(y)k 1217(may)s 1671(be)s
+1942(produced)s 2879(by)s 3161(formatting)s 4210(the)s 4547(same)s
+5082(v)s 3(ersion)k 5828(twice,)s 6440(e)s 3(xcept)k
+7110(in)s 7341(a)s 7495(fe)s 6(w)k 7889(pathological)s
+0 4721(cases)m 555(that)s 973(f)s 2(ail)k 1343(to)s
+1582(con)s 9(v)k 3(er)k 4(ge.)k 480 4347(Cross)m
+1123(referencing)s 2310(in)s 2600(Lout)s 3159(is)s 3416(implemented)s
+4769(on)s 5113(top)s 5519(of)s 5837(a)s 6050(simple)s
+6790(database)s 7716(system.)s 8591(Each)s 0 4059(database)m 879(is)s
+1089(either)s 1692(writable)s 2530(or)s 2790(readable)s 3655(b)s 4(ut)k
+4017(not)s 4383(both)s 4867(at)s 5099(once,)s 5658(and)s
+6062(holds)s 6633(a)s 6799(set)s 7124(of)s 7395(k)s 2(e)k 3(y-v)k 6(alue)k
+8384(entries:)s 0 3771(the)m 348(k)s 2(e)k 3(ys)k
+833(are)s 1180(ASCII)s 1861(strings,)s 2605(and)s 3009(the)s
+3358(v)s 6(alues)k 4014(are)s 4361(Lout)s 4873(objects,)s
+5658(possibly)s 6510(with)s 6992(en)s 9(vironments,)k 8393(written)s
+0 3483(in)m 290(Lout)s 850(source.)s 1685(Operations)s 2833(are)s
+3227(pro)s 3(vided)k 4181(for)s 4566(writing)s 5357(an)s
+5687(entry)s 15(,)k 6318(con)s 9(v)k 3(erting)k
+7429(from)s 8001(writable)s 8887(to)s 0 3195(readable,)m 916(retrie)s 6(v)k 6(al)k
+1753(by)s 2047(k)s 2(e)k 3(y)k 15(,)k
+2480(and)s 2884(sequential)s 3908(retrie)s 6(v)k 6(al)k
+4745(in)s 4988(k)s 2(e)k 3(y)k 5383(order)s 13(.)k
+480 2821(The)m 905(implementation,)s 2509(which)s 3148(is)s 3354(quite)s
+3885(unsophisticated,)s 5477(emplo)s 2(ys)k 6334(one)s 6732(or)s
+6988(more)s 7532(ASCII)s 240 fnt83 8208 2823(database)m 0 2535(\207les)m
+240 fnt82 380 2533(,)m 485(containing)s 1545(the)s 1891(v)s 6(alues,)k
+2600(and)s 3001(one)s 3401(ASCII)s 240 fnt83 4078 2535(inde)m 4(x)k
+4650(\207le)s 240 fnt82 4992 2533(per)m 5354(database,)s 6282(containing)s
+7342(the)s 7688(k)s 2(e)k 3(ys.)k 8283(T)s 19(o)k
+8580(write)s 0 2245(an)m 283(entry)s 15(,)k 866(the)s
+1214(v)s 6(alue)k 1782(is)s 1992(\207rst)s 2423(appended)s
+3399(to)s 3638(a)s 3804(database)s 4683(\207le,)s 5095(then)s
+5564(a)s 5730(line)s 6144(lik)s 2(e)k 220 fnt35
+480 1744(@Chapter&&intro ch1.ld 57)m 240 fnt82 0 1248(is)m 204(appended)s 1174(to)s
+1406(the)s 1748(inde)s 3(x)k 2326(\207le,)s 2731(gi)s 6(ving)k
+3384(the)s 3725(\207le)s 4080(and)s 4478(of)s 6(fset)k
+5068(where)s 5702(the)s 6043(v)s 6(alue)k 6605(is)s
+6809(stored.)s 7550(T)s 19(o)k 7844(con)s 9(v)k 3(ert)k
+8602(from)s 0 960(writable)m 831(to)s 1062(readable,)s 1971(the)s
+2311(inde)s 3(x)k 2887(\207le)s 3241(is)s 3443(sorted.)s
+4183(Then)s 4725(retrie)s 6(v)k 6(al)k 5554(by)s
+5840(k)s 2(e)k 3(y)k 6228(requires)s 7040(a)s
+7198(binary)s 7856(search)s 8515(of)s 8778(the)s 0 672(inde)m 3(x)k
+584(\207le)s 945(and)s 1349(one)s 1751(seek)s 2237(into)s
+2662(a)s 2828(database)s 3707(\207le,)s 4119(and)s 4523(sequential)s
+5547(retrie)s 6(v)k 6(al)k 6384(by)s 6678(k)s 2(e)k 3(y)k
+7073(is)s 7283(tri)s 6(vial.)k 480 298(This)m 945(database)s
+1813(system)s 2526(is)s 2725(used)s 3211(in)s 3443(se)s 6(v)k 3(eral)k
+4154(w)s 2(ays.)k 4797(F)s 3(or)k 5175(an)s
+5447(e)s 3(xternal)k 6257(database,)s 7176(say)s 7538(of)s
+7798(bibliographic)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(38)s 4706(-)s 0 13253(references,)m 1093(the)s
+1447(user)s 1912(creates)s 2631(the)s 2985(database)s 3871(\207le)s
+4238(of)s 4516(v)s 6(alues)k 5178(\(without)s 6054(en)s 9(vironments\),)k
+7540(Lout)s 8058(creates)s 8778(the)s 0 12965(inde)m 3(x)k
+587(\207le)s 951(whene)s 6(v)k 3(er)k 1935(it)s
+2130(cannot)s 2831(\207nd)s 3265(one,)s 3721(and)s 4128(retrie)s 6(v)k 6(als)k
+5057(by)s 5354(k)s 2(e)k 3(y)k 5752(proceed)s
+6570(as)s 6823(usual.)s 7495(Cross)s 8095(references)s 0 12677(with)m
+476(tags)s 906(other)s 1451(than)s 220 fnt35 1913 12674(preceding)m
+240 fnt82 2918 12677(and)m 220 fnt35 3316 12674(f)m 6(ollo)k 3(wing)k
+240 fnt82 4200 12677(are)m 4540(treated)s 5241(as)s 5485(described)s
+6453(abo)s 3(v)k 3(e,)k 7119(by)s 7407(writing)s
+8144(all)s 8430(tagged)s 0 12389(in)m 9(v)k 4(ocations)k
+1131(\(with)s 1681(en)s 9(vironments\))k 3092(to)s 3320(a)s
+3475(single)s 4092(database,)s 5011(which)s 5643(is)s 5842(con)s 9(v)k 3(erted)k
+6820(to)s 7049(readable)s 7903(at)s 8125(the)s 8462(end)s
+8855(of)s 0 12101(the)m 334(run)s 695(for)s 1018(retrie)s 6(v)k 6(als)k
+1930(on)s 2212(the)s 2545(ne)s 3(xt)k 3000(run.)s
+3468(Sorted)s 4135(g)s 1(alle)k 3(ys,)k 4900(such)s
+5382(as)s 5617(inde)s 3(x)k 6186(entries,)s 6915(are)s
+7247(written)s 7965(out)s 8316(inde)s 3(x)k 3(ed)k
+0 11813(by)m 307(tar)s 4(get)k 920(and)s 1337(k)s 2(e)k 3(y)k
+1746(and)s 2163(retrie)s 6(v)k 3(ed)k 3074(sequentially)s
+4297(on)s 4607(the)s 4969(ne)s 3(xt)k 5451(run.)s
+5948(Unsorted)s 6896(g)s 1(alle)k 3(ys)k 7634(with)s
+8130(preceding)s 0 11525(tar)m 4(gets)k 684(which)s 1327(pop)s
+1741(of)s 6(f)k 2086(the)s 2435(top)s 2795(of)s
+3067(the)s 3416(root)s 3863(g)s 1(alle)k 3(y)k
+4498(without)s 5290(\207nding)s 6023(a)s 6190(tar)s 4(get,)k
+6837(such)s 7334(as)s 7585(entries)s 8273(in)s 8518(tables)s
+0 11237(of)m 274(contents,)s 1181(are)s 1532(treated)s 2242(similarly)s 15(,)k
+3186(e)s 3(xcept)k 3870(that)s 4291(the)s 3(y)k
+4758(are)s 5108(inde)s 3(x)k 3(ed)k 5922(by)s
+6219(tar)s 4(get)k 6821(and)s 7229(a)s 7398(sequence)s
+8335(number)s 0 10949(that)m 418(preserv)s 3(es)k 1368(their)s
+1865(relati)s 6(v)k 3(e)k 2627(order)s 3191(during)s
+3869(the)s 4217(sort.)s 480 10575(When)m 1107(Lout)s 1617(processes)s
+2581(a)s 2745(multi-\207le)s 3687(document,)s 4735(one)s 5135(cross)s
+5674(reference)s 6615(database)s 7492(\207le)s 7850(is)s 8058(written)s
+8788(for)s 0 10287(each)m 504(input)s 1065(\207le,)s 1486(b)s 4(ut)k
+1858(the)s 3(y)k 2330(share)s 2899(a)s 3074(common)s
+3979(inde)s 3(x)k 4572(\207le.)s 5050(At)s 5358(end)s
+5772(of)s 6052(run,)s 6487(the)s 6844(ne)s 6(w)k
+7301(inde)s 3(x)k 7894(\207le)s 8264(is)s 8484(sorted)s
+0 9999(and)m 404(mer)s 4(ged)k 1176(with)s 1658(the)s
+2007(old)s 2371(one)s 2774(in)s 3017(such)s 3514(a)s
+3680(w)s 2(ay)k 4132(as)s 4383(to)s 4622(preserv)s 3(e)k
+5485(entries)s 6172(relating)s 6955(to)s 7194(\207les)s 7644(not)s
+8010(read)s 8480(on)s 8778(the)s 0 9711(current)m 737(run.)s
+1221(This)s 1699(pro)s 3(vides)k 2572(some)s 3135(support)s
+3914(for)s 4254(piecemeal)s 5278(formatting,)s 6395(b)s 4(ut)k
+6758(e)s 6(v)k 3(entually)k 7801(the)s 8150(\207les)s
+8601(must)s 0 9423(all)m 293(be)s 575(formatted)s 1561(together)s 13(.)k
+480 9049(When)m 1120(a)s 220 fnt35 1297 9046(preceding)m 240 fnt82
+2319 9049(or)m 220 fnt35 2590 9046(f)m 6(ollo)k 3(wing)k
+240 fnt82 3491 9049(cross)m 4044(reference)s 4998(is)s 5220(found,)s
+5897(it)s 6100(is)s 6321(attached)s 7187(to)s 7437(a)s
+7614(g)s 1(alle)k 3(y)k 8259(inde)s 3(x)k
+8855(of)s 0 8761(type)m 240 fnt83 474 8763(CR)m 9(OSS_PREC)k
+240 fnt82 1973 8761(or)m 240 fnt83 2238 8763(CR)m 9(OSS_FOLL)k
+240 fnt82 3653 8761(,)m 3766(together)s 4615(with)s 5103(an)s
+5392(automatically)s 6752(generated)s 7745(tag)s 8097(composed)s 0 8473(of)m
+258(the)s 593(current)s 1316(\207le)s 1663(name)s 2224(and)s
+2615(a)s 2767(sequence)s 3687(number)s 13(.)k 4556(When)s
+5172(a)s 5324(tagged)s 6007(in)s 9(v)k 4(ocation)k
+7048(is)s 7244(found,)s 7897(it)s 8076(is)s 8272(attached)s
+0 8185(to)m 237(a)s 240 fnt83 401 8187(CR)m 9(OSS_T)k 12(ARG)k
+240 fnt82 1875 8185(inde)m 3(x.)k 2565(These)s 3190(g)s 1(alle)k 3(y)k
+3822(inde)s 3(x)k 3(es)k 4595(are)s 4940(carried)s
+5658(along)s 6241(through)s 7040(the)s 7386(dynamic)s 8261(tree,)s
+8722(and)s 0 7897(e)m 6(v)k 3(entually)k 1049(pop)s
+1470(of)s 6(f)k 1822(the)s 2178(top)s 2545(of)s
+2824(the)s 3180(root)s 3633(g)s 1(alle)k 3(y)k 15(,)k
+4313(at)s 4553(which)s 5203(point)s 5763(it)s 5963(is)s
+6181(easy)s 6668(to)s 6915(determine)s 7934(which)s 8584(cross)s
+0 7609(references)m 1029(refer)s 1536(to)s 1773(which)s 2413(in)s 9(v)k 4(ocations,)k
+3608(since)s 4153(the)s 4499(inde)s 3(x)k 3(es)k
+5273(are)s 5618(no)s 6(w)k 6077(in)s 6318(\207nal)s
+6796(printed)s 7529(document)s 8531(order)s 13(.)k 0 7321(Each)m
+541(referenced)s 1613(in)s 9(v)k 4(ocation)k 2674(is)s
+2891(then)s 3367(written)s 4107(to)s 4353(the)s 4708(cross)s
+5257(reference)s 6207(database,)s 7144(multiply)s 8015(inde)s 3(x)k 3(ed)k
+8832(by)s 0 7033(the)m 344(generated)s 1327(tags)s 1758(of)s
+2025(the)s 2369(associated)s 3404(cross)s 3942(references.)s 5082(On)s
+5427(the)s 5771(ne)s 3(xt)k 6236(run,)s 6657(when)s
+7229(the)s 7573(same)s 220 fnt35 8115 7030(preceding)m 240 fnt82
+0 6745(and)m 220 fnt35 408 6742(f)m 6(ollo)k 3(wing)k
+240 fnt82 1302 6745(cross)m 1848(references)s 2883(are)s 3234(found,)s
+3904(chances)s 4716(are)s 5067(good)s 5609(that)s 6031(the)s
+6383(same)s 6934(tags)s 7374(will)s 7804(be)s 8090(generated,)s
+0 6457(and)m 404(the)s 752(appropriate)s 1896(v)s 6(alues)k
+2552(can)s 2941(be)s 3223(retrie)s 6(v)k 3(ed)k
+4120(from)s 4644(the)s 4992(database)s 5871(immediately)s 15(.)k
+480 6083(This)m 982(approach)s 1942(w)s 2(as)k 2389(the)s
+2763(genesis)s 3544(of)s 3842(the)s 220 fnt35 4216 6080(@T)m 26(agged)k
+240 fnt82 5231 6083(operator)m 9(,)k 6151(whose)s 6845(implementation)s
+8428(is)s 8665(no)s 6(w)k 0 5795(immediate:)m 1106(for)s
+1436(each)s 220 fnt35 1923 5792(@T)m 26(agged)k 240 fnt82
+2903 5795(operator)m 3751(we)s 4078(produce)s 4897(one)s 240 fnt83
+5290 5797(CR)m 9(OSS_PREC)k 240 fnt82 6775 5795(or)m 240 fnt83
+7026 5797(CR)m 9(OSS_FOLL)k 240 fnt82 8492 5795(g)m 1(alle)k 3(y)k
+0 5507(inde)m 3(x,)k 645(replacing)s 1596(the)s 1953(generated)s
+2949(tag)s 3304(with)s 3795(the)s 4152(right)s 4672(parameter)s
+5696(of)s 5976(the)s 220 fnt35 6333 5504(@T)m 26(agged)k
+240 fnt82 7331 5507(operator)m 13(.)k 8288(Nothing)s 0 5219(more)m
+547(is)s 757(required.)s 240 fnt84 0 4426(7.)m 291(Conclusion)s
+240 fnt82 480 3994(Since)m 1054(its)s 1316(public)s 1953(release)s
+2657(in)s 2886(October)s 3702(1991,)s 4275(the)s 4609(Basser)s
+5292(Lout)s 5790(interpreter)s 6829(has)s 7185(been)s 7680(ported)s
+8335(without)s 0 3706(incident)m 819(to)s 1047(a)s 1202(wide)s
+1712(v)s 6(ariety)k 2412(of)s 2672(Unix)s 3195(systems)s
+3992(and)s 4385(hardw)s 2(are.)k 5425(It)s 5619(w)s 2(as)k
+6029(tested)s 6633(e)s 3(xtensi)k 6(v)k 3(ely)k
+7753(before)s 8408(release)s 0 3418(on)m 293(its)s 565(o)s 6(wn)k
+1025(documentation,)s 2549(and)s 2949(the)s 3293(fe)s 6(w)k
+3695(minor)s 4321(b)s 4(ugs)k 4817(which)s 5455(ha)s 4(v)k 3(e)k
+5952(emer)s 4(ged)k 6824(since)s 7367(then)s 7832(ha)s 4(v)k 3(e)k
+8329(all)s 8617(been)s 0 3130(\207x)m 3(ed)k 534(in)s
+777(the)s 1125(second)s 1848(release,)s 2617(scheduled)s 3632(to)s
+3871(appear)s 4568(in)s 4811(mid-1992.)s 480 2756(Se)m 6(v)k 3(en)k
+1105(substantial)s 2173(packages)s 3093(of)s 3355(de\207nitions)s 4407(are)s
+4746(distrib)s 4(uted)k 5813(with)s 6286(Basser)s 6975(Lout.)s
+7582(The)s 8001(Document)s 8998(-)s 0 2468(Layout)m 748(package,)s
+1649(and)s 2063(its)s 2349(v)s 6(ariants)k 3160(ReportLayout)s
+4560(and)s 4974(BookLayout,)s 6289(pro)s 3(vide)k 7083(the)s
+7441(standard)s 8320(features)s 0 2180(that)m 411(all)s 696(documents)s
+1776(require:)s 2610(pages,)s 3254(columns,)s 4165(paragraphs,)s 5313(headings,)s
+6263(footnotes,)s 7252(\210oating)s 8028(\207gures)s 8722(and)s 0 1892(tables,)m
+683(chapters)s 1550(and)s 1973(sections,)s 2870(displays)s 3724(and)s
+4148(lists,)s 4658(access)s 5339(to)s 5597(bibliographic)s 6945(databases,)s
+7987(cross)s 8549(refer)s 8998(-)s 0 1604(ences,)m 623(and)s
+1012(so)s 1263(on)s 1545([11].)s 2092(The)s 2505(BookLayout)s
+3748(package)s 4572(has)s 4927(e)s 3(xtra)k 5446(features)s
+6237(needed)s 6958(by)s 7237(books,)s 7902(including)s 8843(an)s
+0 1316(automatically)m 1355(generated)s 2343(table)s 2864(of)s 3136(contents,)s
+4041(Roman)s 4791(page)s 5300(numbers)s 6176(for)s 6515(the)s
+6864(pref)s 2(atory)k 7792(material,)s 8682(run)s 8998(-)s
+0 1028(ning)m 468(page)s 965(headers,)s 1790(odd)s 2197(and)s
+2589(e)s 6(v)k 3(en)k 3078(page)s 3574(layouts,)s
+4361(and)s 4754(a)s 4908(sorted)s 5539(inde)s 3(x.)k
+6220(The)s 6637(Eq)s 6949(package)s 7778(formats)s 8546(equa)s
+8998(-)s 0 740(tions,)m 572(and)s 976(P)s 3(as)k
+1356(formats)s 2136(P)s 3(ascal)k 2798(programs)s 3752([10];)s
+4262(T)s 19(ab)k 4668(formats)s 5448(tables)s 6056([12];)s
+6566(and)s 6970(Fig)s 7342(dra)s 3(ws)k 7961(\207gures)s
+8663([6].)s 480 366(The)m 899(non-e)s 3(xpert)k 1983(user)s
+2431(who)s 2888(uses)s 3341(these)s 3879(packages)s 4797(percei)s 6(v)k 3(es)k
+5732(a)s 5889(system)s 6603(of)s 6865(a)s 7021(standard)s
+7880(quite)s 8404(similar)s 0 78(to)m 246(other)s 804(fully)s
+1317(de)s 6(v)k 3(eloped)k 2357(batch)s 2940(formatters,)s
+4034(although)s 4936(the)s 5292(interf)s 2(ace)k 6187(is)s
+6405(considerably)s 7688(more)s 8243(coherent)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(39)s 4708(-)s 0 13251(than,)m 525(say)s 15(,)k
+942(the)s 1297(trof)s 6(f)k 1792(f)s 2(amily')k 13(s)k
+2630([8].)s 3078(The)s 3512(e)s 3(xpert)k 4173(user)s
+4637(percei)s 6(v)k 3(es)k 5588(a)s 5760(system)s
+6490(which)s 7139(is)s 7355(radically)s 8251(dif)s 6(ferent)k
+0 12963(from)m 547(pre)s 6(vious)k 1440(ones,)s 2009(in)s
+2276(which)s 2941(a)s 3131(great)s 3691(deal)s 4168(can)s
+4580(be)s 4886(achie)s 6(v)k 3(ed)k 5808(v)s 3(ery)k
+6308(quickly)s 15(.)k 7198(T)s 19(o)k 7522(tak)s 2(e)k
+7997(an)s 8304(e)s 3(xtreme)k 0 12675(e)m 3(xample,)k
+936(P)s 3(as)k 1338(w)s 2(as)k 1781(designed,)s
+2761(implemented,)s 4138(tested,)s 4825(and)s 5251(documented)s 6501(in)s
+6766(one)s 7190(afternoon.)s 8292(Eq)s 8639(took)s 0 12387(about)m
+587(a)s 747(week,)s 1353(b)s 4(ut)k 1709(most)s
+2229(of)s 2494(that)s 2906(time)s 3380(w)s 2(as)k
+3796(spent)s 4355(in)s 4592(marshalling)s 5767(the)s 6110(v)s 6(ast)k
+6543(repertoire)s 7520(of)s 7785(mathematical)s 0 12099(symbols,)m 934(and)s
+1367(\207ne-tuning)s 2499(the)s 2876(spacing.)s 3800(Most)s 4381(of)s
+4681(the)s 5059(ef)s 6(fort)k 5671(seems)s 6335(to)s
+6603(go)s 6925(into)s 7379(designing)s 8392(a)s 8588(good)s
+0 11811(interf)m 2(ace;)k 944(most)s 1469(symbols)s 2318(are)s
+2665(implemented)s 3971(in)s 4214(just)s 4619(one)s 5021(or)s
+5280(a)s 5446(fe)s 6(w)k 5852(lines)s 6354(of)s
+6625(Lout.)s 480 11437(A)m 698(group)s 1297(of)s 1556(about)s
+2135(20)s 2418(satis\207ed)s 3246(non-e)s 3(xpert)k 4327(users)s
+4856(has)s 5214(gro)s 6(wn)k 5864(up)s 6145(within)s
+6800(the)s 7136(author')s 13(s)k 7944(department,)s 0 11149(mainly)m
+703(Honours)s 1563(students)s 2383(with)s 2849(no)s 3127(in)s 9(v)k 3(estment)k
+4208(in)s 4436(older)s 4971(systems)s 5764(to)s 5987(hold)s
+6456(them)s 6978(back.)s 7579(Basser)s 8260(Lout)s 8756(has)s
+0 10861(been)m 511(adv)s 3(ertised)k 1550(on)s 1849(the)s
+2199(Internet)s 3003(ne)s 6(ws)k 3542(as)s 3794(a)s 4(v)k 6(ailable)k
+4704(via)s 5058(anon)s 3(ymous)k 240 fnt83 6213 10863(ftp)m
+240 fnt82 6458 10861(,)m 6567(so)s 6835(the)s 7185(e)s 3(xtent)k
+7828(of)s 8101(its)s 8379(outside)s 0 10573(user)m 469(community)s
+1624(is)s 1845(hard)s 2339(to)s 2589(g)s 1(auge.)k
+3335(About)s 4005(50)s 4311(people)s 5016(ha)s 4(v)k 3(e)k
+5528(mailed)s 6247(comments)s 7292(or)s 7562(questions)s 8528(to)s
+8778(the)s 0 10285(author;)m 733(man)s 3(y)k 1327(of)s
+1608(these)s 2166(people)s 2871(ha)s 4(v)k 3(e)k
+3382(ported)s 4062(the)s 4420(program,)s 5348(written)s 6092(small)s
+6674(de\207nitions,)s 7802(and)s 8217(modi\207ed)s 0 9997(the)m 348(standard)s
+1216(packages.)s 480 9623(Future)m 1160(w)s 2(ork)k 1711(could)s
+2301(usefully)s 3125(be)s 3(gin)k 3711(with)s 4194(the)s
+4542(impro)s 3(v)k 3(ements)k 5955(suggested)s 6957(in)s
+7200(this)s 7596(paper:)s 8294(o)s 3(v)k 3(erlap)k
+8998(-)s 0 9335(ping)m 489(spanning)s 1418(columns,)s 2346(better)s
+2960(semantics)s 3964(for)s 4312(a)s 4(v)k 6(ailable)k
+5231(space,)s 5880(and)s 6294(especially)s 7314(horizontal)s 8349(g)s 1(alle)k 3(ys.)k
+0 9047(Support)m 814(for)s 1147(non-)s 1575(European)s 2544(languages)s
+3547(is)s 3752(also)s 4185(needed.)s 5022(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5977(the)s 6320(main)s 6850(task)s 7291(is)s 7496(the)s
+7839(de)s 6(v)k 3(elopment)k 0 8759(of)m 271(an)s
+553(interacti)s 6(v)k 3(e)k 1607(document)s 2610(editor)s
+3227(based)s 3829(on)s 4126(Lout.)s 4741(A)s 4971(structure)s
+5861(editor)s 6478(similar)s 7199(to)s 7438(Lilac)s 7980([13],)s
+8484(which)s 0 8471(already)m 753(has)s 1119(objects)s 1843(and)s
+2243(user)s 4(-)k 2705(de\207ned)s 3463(symbols,)s 4364(is)s
+4570(en)s 9(visaged;)k 5626(since)s 6168(cross)s 6706(references)s
+7733(are)s 8076(easy)s 8550(when)s 0 8183(the)m 343(whole)s
+979(document)s 1978(is)s 2182(a)s 4(v)k 6(ailable,)k
+3136(the)s 3479(only)s 3954(major)s 4565(ne)s 6(w)k
+5007(problem)s 5859(is)s 6064(the)s 6406(treatment)s 7362(of)s
+7628(g)s 1(alle)k 3(ys,)k 8402(includ)s 8998(-)s
+0 7895(ing)m 359(the)s 707(e)s 3(xpansion)k 1732(and)s
+2136(retraction)s 3107(of)s 3378(recepti)s 6(v)k 3(e)k
+4300(symbols.)s 240 fnt84 0 7146(Note.)m 240 fnt82 657 7147(Since)m
+1253(the)s 1610(abo)s 3(v)k 3(e)k 2240(w)s 2(as)k
+2670(written)s 3412(the)s 3768(author)s 4448(has)s 4827(completed)s
+5889(a)s 6064(re)s 6(vised)k 6815(v)s 3(ersion)k
+7581(of)s 7861(Basser)s 8567(Lout,)s 0 6859(in)m 243(which)s
+885(the)s 1233(problem)s 2090(concerning)s 3206(a)s 4(v)k 6(ailable)k
+4114(space)s 4701(mentioned)s 5769(in)s 6012(Section)s 6786(2.5)s
+7132(has)s 7502(been)s 8011(resolv)s 3(ed.)k 240 fnt84
+0 6110(Ackno)m 2(wledgment.)k 240 fnt82 2027 6111(The)m 2534(author)s
+3283(gratefully)s 4344(ackno)s 6(wledges)k 5824(man)s 3(y)k
+6485(v)s 6(aluable)k 7424(discussions)s 8644(with)s 0 5823(Douglas)m
+862(W)s 22(.)k 1183(Jones,)s 1835(especially)s 2857(during)s
+3548(the)s 3909(de)s 6(v)k 3(elopment)k 5209(of)s
+5493(the)s 5854(g)s 1(alle)k 3(y)k 6501(abstraction;)s
+7674(and)s 8091(also)s 8543(man)s 3(y)k 0 5535(helpful)m
+732(comments)s 1766(on)s 2063(presentation)s 3288(by)s 3582(the)s
+3930(anon)s 3(ymous)k 5083(referee.)s 240 fnt84 0 4742(Refer)m 4(ences)k
+240 fnt82 0 4288(1.)m 480(Kingston,)s 1501(Jef)s 6(fre)k 3(y)k
+2244(H..)s 2677(Document)s 3770(F)s 3(ormatting)k 4918(with)s
+5436(Lout)s 5888(.)s 6088(T)s 16(ech.)k 6690(Rep.)s
+7216(408)s 7659(\(1991\))s 8286(,)s 8429(Basser)s 480 4000(Department)m
+1668(of)s 1939(Computer)s 2956(Science,)s 3806(The)s 4234(Uni)s 6(v)k 3(ersity)k
+5288(of)s 5559(Sydne)s 3(y)k 15(,)k 6367(Australia)s
+7242(.)s 0 3497(2.)m 480(Kingston,)s 1492(Jef)s 6(fre)k 3(y)k
+2227(H..)s 2652(A)s 2910(ne)s 6(w)k 3385(approach)s
+4347(to)s 4613(document)s 5645(formatting)s 6646(.)s 6838(T)s 16(ech.)k
+7432(Rep.)s 7950(412)s 8392(\(1991\))s 9019(,)s 480 3209(Basser)m
+1177(Department)s 2365(of)s 2636(Computer)s 3653(Science,)s 4503(The)s
+4931(Uni)s 6(v)k 3(ersity)k 5985(of)s 6256(Sydne)s 3(y)k 15(,)k
+7064(Australia)s 7939(.)s 0 2706(3.)m 480(Kingston,)s 1491(Jef)s 6(fre)k 3(y)k
+2224(H..)s 2647(The)s 3101(Basser)s 3824(Lout)s 4362(Document)s
+5445(F)s 3(ormatter)k 6383(,)s 6516(1991)s 6971(.)s
+7161(Computer)s 8204(program;)s 480 2418(V)m 26(ersion)k 1287(2)s
+1480(publicly)s 2337(a)s 4(v)k 6(ailable)k 3264(in)s
+3526(the)s 240 fnt83 3893 2420(pub)m 240 fnt82 4326 2418(subdirectory)m
+5595(of)s 5885(the)s 6252(home)s 6859(directory)s 7794(of)s
+240 fnt83 8084 2420(ftp)m 240 fnt82 8408 2418(to)m 8667(host)s
+240 fnt83 480 2132(ftp.cs.su.oz.au)m 240 fnt82 1924 2130(with)m 2439(login)s
+3021(name)s 240 fnt83 3628 2132(anonymous)m 240 fnt82 4808 2130(and)m
+5246(no)s 5572(passw)s 2(ord.)k 6671(Distrib)s 4(ution)k
+7912(via)s 8297(email)s 8916(is)s 480 1842(a)m 4(v)k 6(ailable)k
+1388(for)s 1726(non-)s 240 fnt83 2154 1844(ftp)m 240 fnt82
+2459 1842(sites.)m 3047(All)s 3407(enquiries)s 4334(to)s 4573(jef)s 6(f@cs.su.oz.au.)k
+0 1339(4.)m 480(Furuta,)s 1211(Richard,)s 2075(Sco\207eld,)s 2965(Jef)s 6(fre)k 3(y)k 15(,)k
+3710(and)s 4113(Sha)s 3(w)k 15(,)k 4734(Alan.)s
+5363(Document)s 6419(formatting)s 7480(systems:)s 8402(surv)s 3(e)k 3(y)k 15(,)k
+480 1051(concepts,)m 1424(and)s 1828(issues)s 2390(.)s 240 fnt83
+2554 1053(Computing)m 3673(Surve)s 7(ys)k 240 fnt84 4465 1050(14)m
+240 fnt82 4699 1051(,)m 4806(417\211472)s 5700(\(1982\))s 6327(.)s
+0 546(5.)m 480(K)s 6(ernighan,)k 1645(Brian)s 2287(W)s 22(.)k
+2649(and)s 3107(Cherry)s 15(,)k 3917(Lorinda)s 4789(L..)s
+5213(A)s 5497(system)s 6275(for)s 6667(typesetting)s 7824(mathematics)s
+9022(.)s 240 fnt83 480 260(Communications)m 2158(of)s 2439(the)s
+2784(A)s 7(CM)k 240 fnt84 3351 257(18)m 240 fnt82
+3585 258(,)m 3692(182\211193)s 4576(\(1975\))s 5203(.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 40 41
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(40)s 4710(-)s 0 13252(6.)m 480(Kingston,)s
+1488(Jef)s 6(fre)k 3(y)k 2218(H..)s 2638(Fig)s
+3033(\211)s 3236(a)s 3425(Lout)s 3961(package)s 4824(for)s
+5185(dra)s 3(wing)k 6042(\207gures)s 6684(.)s 6871(T)s 16(ech.)k
+7460(Rep.)s 7973(411)s 8392(\(1991\))s 9019(,)s 480 12964(Basser)m
+1177(Department)s 2365(of)s 2636(Computer)s 3653(Science,)s 4503(The)s
+4931(Uni)s 6(v)k 3(ersity)k 5985(of)s 6256(Sydne)s 3(y)k 15(,)k
+7064(Australia)s 7939(.)s 0 12459(7.)m 480(Reid,)s 1042(Brian)s
+1633(K..)s 2033(A)s 2266(High-)s 2813(Le)s 6(v)k 3(el)k
+3406(Approach)s 4410(to)s 4652(Computer)s 5672(Document)s 6732(Production)s
+7779(.)s 7946(In)s 240 fnt83 8205 12461(Pr)m 10(oceed)k
+240 fnt82 8998 12459(-)m 240 fnt83 480 12173(ings)m 935(of)s
+1217(the)s 1564(7th)s 1926(Symposium)s 3074(on)s 3370(the)s
+3716(Principles)s 4755(of)s 5037(Pr)s 10(o)k 2(gr)k 3(amming)k
+6421(Langua)s 2(g)k 2(es)k 7526(\(POPL\),)s 8376(Las)s
+8779(V)s 26(e)k 240 fnt82 8998 12171(-)m 240 fnt83
+480 11885(gas)m 868(NV)s 240 fnt82 1192 11883(,)m 1299(pages)s
+1895(24\21131)s 2470(,)s 2577(1980)s 3052(.)s 0 11378(8.)m
+480(Joseph)s 1207(F)s 19(.)k 1443(Ossanna.)s 2436(Nrof)s 6(f/T)k 8(rof)k 6(f)k
+3605(User')s 13(s)k 4284(Manual)s 5010(.)s 5193(T)s 16(ech.)k
+5777(Rep.)s 6285(54)s 6597(\(1976\))s 7224(,)s 7349(Bell)s
+7821(Laboratories)s 9019(,)s 480 11090(Murray)m 1251(Hill,)s 1729(NJ)s
+2051(07974)s 2645(.)s 0 10585(9.)m 480(Knuth,)s 1186(Donald)s
+1949(E..)s 240 fnt83 2319 10587(The)m 2731(T)s 2882 10539(E)m
+3033 10587(XBook)m 240 fnt82 3675 10585(.)m 3839(Addison-W)s 19(esle)k 3(y)k
+5419(,)s 5526(1984)s 6000(.)s 0 10082(10.)m 480(Kingston,)s
+1485(Jef)s 6(fre)k 3(y)k 2212(H..)s 2629(Eq)s
+2973(\211)s 3173(a)s 3359(Lout)s 3892(package)s 4752(for)s
+5110(typesetting)s 6232(mathematics)s 7430(.)s 7614(T)s 16(ech.)k
+8200(Rep.)s 8711(410)s 480 9794(\(1991\))m 1107(,)s 1248(Basser)s
+1980(Department)s 3203(of)s 3509(Computer)s 4561(Science,)s 5446(The)s
+5909(Uni)s 6(v)k 3(ersity)k 6998(of)s 7304(Sydne)s 3(y)k 15(,)k
+8147(Australia)s 9022(.)s 480 9506(\(Contains)m 1461(an)s 1744(appendix)s
+2677(describing)s 3726(the)s 4074(P)s 3(as)k 4454(P)s 3(ascal)k
+5116(formatter)s 13(.\))k 0 9003(11.)m 480(Kingston,)s 1478(Jef)s 6(fre)k 3(y)k
+2198(H..)s 2608(A)s 2851(be)s 3(ginners')k 3903(guide)s
+4504(to)s 4756(Lout)s 5208(.)s 5385(T)s 16(ech.)k
+5964(Rep.)s 6467(409)s 6891(\(1991\))s 7518(,)s 7638(Basser)s
+8348(Depart)s 8998(-)s 480 8715(ment)m 1018(of)s 1289(Computer)s
+2306(Science,)s 3156(The)s 3584(Uni)s 6(v)k 3(ersity)k
+4638(of)s 4909(Sydne)s 3(y)k 15(,)k 5717(Australia)s
+6592(.)s 0 8212(12.)m 480(Kingston,)s 1475(Jef)s 6(fre)k 3(y)k
+2193(H..)s 2600(T)s 19(ab)k 3017(\211)s 3207(a)s
+3384(Lout)s 3907(package)s 4757(for)s 5106(formatting)s 6177(tables)s
+6725(.)s 6900(T)s 16(ech.)k 7476(Rep.)s 7977(413)s
+8392(\(1991\))s 9019(,)s 480 7924(Basser)m 1177(Department)s 2365(of)s
+2636(Computer)s 3653(Science,)s 4503(The)s 4931(Uni)s 6(v)k 3(ersity)k
+5985(of)s 6256(Sydne)s 3(y)k 15(,)k 7064(Australia)s
+7939(.)s 0 7421(13.)m 480(Brooks,)s 1279(K)s 6(enneth)k
+2141(P)s 26(..)k 2472(Lilac:)s 3068(a)s 3234(tw)s 2(o-vie)k 6(w)k
+4183(document)s 5187(editor)s 5744(.)s 240 fnt83 5908 7423(IEEE)m
+6490(Computer)s 240 fnt82 7453 7421(,)m 7560(7\21119)s 8091(\(1991\))s
+8718(.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 41
+%%EOF
diff --git a/doc/design/s1_0 b/doc/design/s1_0
new file mode 100644
index 0000000..ca487ba
--- /dev/null
+++ b/doc/design/s1_0
@@ -0,0 +1,45 @@
+@Section
+ @Title { Introduction }
+@Begin
+@PP
+Lout [1, 2] is a high-level language
+for document formatting, designed and implemented by the author. The
+implementation, known as Basser Lout, is a fully operational production
+version written in C for the Unix operating system,
+@FootNote { Unix is a trademark of "AT&T" Bell Laboratories. }
+which translates Lout source code into PostScript,
+@FootNote { PostScript is a trademark of Adobe Systems, Incorporated. }
+a device-independent graphics rendering language accepted by many
+high-resolution output devices, including most laser printers. Basser
+Lout is available free of charge [3]. It includes
+installation instructions, C source, seven standard packages, and complete
+documentation in the form of six technical reports and a manual page.
+@PP
+The Lout project arose out of the author's desire to bring to document
+formatting languages the elegance of expression found in programming
+languages like Algol-60 and Pascal. This emphasis on expressiveness
+has produced an order of magnitude reduction in the cost of developing
+document formatting applications. For example, an equation formatting
+application, which may be difficult or impossible to add to other
+systems, can be written in Lout in a few days.
+@PP
+When expert users can implement such applications quickly, non-experts
+benefit. Although Lout itself provides only a small kernel of carefully
+chosen primitives, packages written in Lout and distributed with Basser
+Lout provide an unprecedented array of advanced features in a form
+accessible to non-expert users. The features include rotation and scaling,
+fonts, paragraph and page breaking, displays and lists, floating figures
+and tables, footnotes, chapters and sections (automatically numbered),
+running page headers and footers, odd-even page layouts, automatically
+generated tables of contents, sorted indexes and reference lists,
+bibliographic and other databases (including databases of formats for
+printing references), equations, tables, diagrams, formatting of
+Pascal programs, and automatically maintained cross references.
+@PP
+This paper charts the evolution of Lout from conception in mid-1984 to the
+public release of Basser Lout in October 1991. Lout is organized around
+four key concepts -- objects, definitions, galleys, and cross references --
+and they were developed in the order listed, so this paper will treat each
+in turn, discussing its design, implementation, problems, and
+prospects for further improvement.
+@End @Section
diff --git a/doc/design/s2_0 b/doc/design/s2_0
new file mode 100644
index 0000000..ef4bea7
--- /dev/null
+++ b/doc/design/s2_0
@@ -0,0 +1,14 @@
+@Section
+ @Title { Objects }
+@Begin
+@PP
+The essence of any move to a higher level is the introduction of some
+abstraction which serves to organize the low-level operations,
+resulting in a more succinct expression of their
+common combinations at the cost of some loss of detailed control. The
+early part of the Lout project was spent in the development of such an
+abstraction for the building blocks of documents, one which could
+explain, not just the simple phenomena of words, lines, and paragraphs,
+but also the alignment of columns in tables, and the complex nested
+structures of equations.
+@BeginSubSections
diff --git a/doc/design/s2_1 b/doc/design/s2_1
new file mode 100644
index 0000000..4ee4c31
--- /dev/null
+++ b/doc/design/s2_1
@@ -0,0 +1,87 @@
+@SubSection
+ @Tag { genesis }
+ @Title { The genesis of the object abstraction }
+@Begin
+@PP
+When one examines previous document formatting systems [4]
+looking for ideas for abstractions, as the author did in 1984, the Eqn
+formatting language [5] stands out like a beacon. In
+Eqn, a mathematical formula such as
+@ID @Eq { { x sup 2 + 1 } over 4 }
+is produced by typing
+@ID @Code "{ x sup 2 + 1 } over 4"
+in the input file; @Code sup and @Code over are binary operators, and
+braces are used for grouping. This is document formatting at a very
+high level, close to the language of mathematics itself, with all
+reference to font changes and spacing suppressed.
+@PP
+Eqn provides a single data type (let us call it the {@I expression}),
+built up recursively in context-free style: where one expression may appear,
+any expression may appear. This approach is common in algebra and
+programming languages, where its simplicity and expressiveness have long
+been appreciated; but Eqn was the first language to demonstrate its
+utility in document formatting.
+@PP
+Each expression is treated by Eqn as a rectangle with a
+{@I {horizontal axis}}, used for alignment with adjacent expressions:
+@ID @ShowMarks marks { horizontal } @Eq { { x sup 2 + 1 } over 4 }
+The size and rendering of the expression on the printed page are
+known only to the implementation, never explicitly calculated or
+accessed by the user. This prohibition is
+crucial to the maintenance of the context-free property in practice. In
+Lout, for example, equations, figures, tables, and arbitrary objects may
+be mixed together freely. This would be impossible if size information
+was hidden from the implementation in user calculations.
+@PP
+The object abstraction of Lout is a direct descendant of the Eqn
+expression. It employs the same context-free recursive style of construction,
+and each object is treated by Lout as a rectangle:
+@ID @Fig {
+@ShowMarks { 1c @Wide ^| 2c @Wide 0.45c @High ^/ 0.35c @High }
+}
+The horizontal axis, called a @I { row mark } in Lout, has a
+vertical analogue called a {@I {column mark}}, creating a valuable
+symmetry between horizontal and vertical. Multiple column and row marks
+are permitted:
+@ID @OneRow @Fig {
+A:: @Box margin { 0c } paint { grey } { 1.2c @Wide 0.8c @High }
+|1c
+B:: @Box margin { 0c } paint { grey } { 1c @Wide 0.8c @High }
+/0.5c
+C:: @Box margin { 0c } paint { grey } { 0.7c @Wide 0.8c @High }
+|1c
+D:: @Box margin { 0c } paint { grey } { 1.3c @Wide 0.8c @High }
+// @Line linestyle { dashed }
+ from { A@W -- { 0.3 cm 0 } }
+ to { B@W ++ { 1.6 cm 0 } }
+// @Line linestyle { dashed }
+ from { C@W -- { 0.3 cm 0 } }
+ to { D@W ++ { 1.6 cm 0 } }
+// @Line linestyle { dashed }
+ from { A@NW ++ { 0 0.3 cm } }
+ to { C@SW -- { 0 0.3 cm } }
+// @Line linestyle { dashed }
+ from { B@NW ++ { 0.3 cm 0.3 cm } }
+ to { D@SW ++ { 0.3 cm -0.3 cm } }
+}
+so that objects are able to represent tables.
+@PP
+This abstraction has some limitations, the most obvious being the restriction
+of size calculations to rectangular bounding boxes. Non-rectangular and
+disconnected shapes arise naturally in figures and in the characters of
+fonts; the extension to them is conceptually straightforward and might
+help to explain some fine points of layout such as kerning. However,
+there are implementation and language design problems, particularly
+when filling non-rectangular shapes with text, and so the author chose
+to keep to Eqn's rectangles.
+@PP
+A more fundamental limitation of the object abstraction arises from the
+inability of recursive data types to describe cross-linked structures,
+which seem to require some means of naming the multiply referenced
+parts. Lout is obliged to introduce additional abstractions to cope
+with cross linking: galleys for inserting text into pages
+(Section {@NumberOf galleys}), cross references (Section {@NumberOf cross}),
+and labelled points in figure drawing [6]. An
+abstraction closer to hypertext might form a more unified basis for
+these features.
+@End @SubSection
diff --git a/doc/design/s2_2 b/doc/design/s2_2
new file mode 100644
index 0000000..f4a3818
--- /dev/null
+++ b/doc/design/s2_2
@@ -0,0 +1,79 @@
+@SubSection
+ @Tag { lexical }
+ @Title { Grammatical and lexical structure }
+@Begin
+@PP
+If objects are to be constructed like mathematical expressions, the
+natural notation is a functional language based on operators, as in
+Eqn. The grammar of Lout objects is accordingly
+@ID @OneRow @Eq {
+matrix {
+object
+nextcol
+--> above --> above --> above --> above --> above --> above --> above -->
+nextcol
+{ object ``` infixop ``` object }
+labove gap { "1fx" }
+{ prefixop ``` object }
+labove gap { "1fx" }
+{ object ``` postfixop }
+labove gap { "1fx" }
+{ noparsop }
+labove gap { "1fx" }
+{ literalword }
+labove gap { "1fx" }
+{ @Code "{" ``` object ``` @Code "}" }
+labove gap { "1fx" }
+{ object ``` object }
+labove gap { "1fx" }
+}
+}
+where {@Eq {infixop}}, {@Eq {prefixop}}, {@Eq {postfixop}}, and
+{@Eq {noparsop}} are identifiers naming operators which take 0, 1
+or 2 parameters, as shown, and @Eq {literalword} is a sequence of
+non-space characters, or an arbitrary sequence of characters
+enclosed in double quotes. Ambiguities are resolved by precedence
+and associativity.
+@PP
+The last production allows a meaning for expressions such as
+{@Code "{}"}, in which an object is missing. The value of this
+@I {empty object} is a rectangle of size 0 by 0, with one column
+mark and one row mark, that prints as nothing.
+@PP
+The second-last production generates sequences of arbitrary objects
+separated by white space, called {@I paragraphs}. Ignoring
+paragraph breaking for now, the natural meaning is that the two
+objects should appear side by side, and Lout's parser accordingly
+interpolates an infix horizontal concatenation operator (see below)
+between them. This operator is associative, so the grammatical
+ambiguity does no harm. However, the Algol-60 rule that white space
+should be significant only as a separator is necessarily broken by
+Lout in just this one place.
+@PP
+Algol-like languages distinguish literal strings from identifiers by
+enclosing them in quotes, but literals are far too frequent in document
+formatting for this to be viable. The conventional solution is to
+begin identifiers with a special character, and Lout follows Scribe
+[7] in using "`@'" rather than the "`\\'" of troff
+[8] and @TeX [9].
+@PP
+However, Lout takes the unusual step of making an initial "`@'"
+optional. The designers of Eqn apparently considered such
+characters disfiguring in fine-grained input like equations, and
+this author agrees. The implementation is straightforward: "`@'" is
+classed as just another letter, and every word is searched for in
+the symbol table. If it is found, it is an identifier, otherwise it
+is a literal. A warning message is printed when a literal beginning
+with "`@'" is found, since it is probably a mis-spelt identifier. No
+such safety net is possible for identifiers without "`@'".
+@PP
+Equation formatting also demands symbols made from punctuation
+characters, such as @Code "+" and {@Code "<="}. It is traditional to
+allow such symbols to be juxtaposed, which means that the input
+@ID @Code "<=++"
+for example must be interpreted within the lexical analyser by searching
+the symbol table for its prefixes in the order {@Code "<=++"},
+{@Code "<=+"}, {@Code "<="}. Although this takes quadratic time, in
+practice such sequences are too short to make a more sophisticated
+linear method like tries worthwhile.
+@End @SubSection
diff --git a/doc/design/s2_3 b/doc/design/s2_3
new file mode 100644
index 0000000..341ea74
--- /dev/null
+++ b/doc/design/s2_3
@@ -0,0 +1,326 @@
+@SubSection
+ @Tag { objects }
+ @Title { Basic structural operators }
+@Begin
+@PP
+A programming language may be considered complete when it attains the
+power of a Turing machine, but no such criterion seems relevant to
+document formatting. Instead, as the language develops and new
+applications are attempted, deficiencies are exposed and the operator set is
+revised to overcome them.
+@PP
+Lout has a repertoire of 23 primitive operators
+(Figure {@NumberOf primitives}),
+
+@Figure
+ @Caption { The 23 primitive operators of Lout, in order of
+increasing precedence. }
+ @Tag { primitives }
+@Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @I A ! @Col B }
+{
+@Rowa
+ A { object {@Code "/"}gap object }
+ B { Vertical concatenation with mark alignment }
+@Rowa
+ A { object {@Code "//"}gap object }
+ B { Vertical concatenation with left justification }
+@Rowa
+ A { object {@Code "|"}gap object }
+ B { Horizontal concatenation with mark alignment }
+@Rowa
+ A { object {@Code "||"}gap object }
+ B { Horizontal concatenation with top-justification }
+@Rowa
+ A { object {@Code "&"}gap object }
+ B { Horizontal concatenation within paragraphs }
+@Rowa
+ A { {@Code "@OneCol"} object }
+ B { Hide all but one column mark of @I object }
+@Rowa
+ A { {@Code "@OneRow"} object }
+ B { Hide all but one row mark of @I object }
+@Rowa
+ A { font @Code "@Font" object }
+ B { Render @I object in nominated font }
+@Rowa
+ A { breakstyle @Code "@Break" object}
+ B { Break paragraphs of @I object in nominated style }
+@Rowa
+ A { spacestyle @Code "@Space" object }
+ B { Render spaces between words in nominated style }
+@Rowa
+ A { length {@Code "@Wide"} object }
+ B { Render @I object to width @I length }
+@Rowa
+ A { length {@Code "@High"} object }
+ B { Render @I object to height @I length }
+@Rowa
+ A { {@Code "@HExpand"} object}
+ B { Expand horizontal gaps to fill available space }
+@Rowa
+ A { {@Code "@VExpand"} object}
+ B { Expand vertical gaps to fill available space }
+@Rowa
+ A { {@Code "@HScale"} object }
+ B { Horizontal geometrical scaling to fill available space }
+@Rowa
+ A { {@Code "@VScale"} object }
+ B { Vertical geometrical scaling to fill available space }
+@Rowa
+ A { angle {@Code "@Rotate"} object }
+ B { Rotate @I object by @I angle }
+@Rowa
+ A { PostScript {@Code "@Graphic"} object }
+ B { Escape to graphics language }
+@Rowa
+ A { @Code "@Next" object }
+ B { Add 1 to an object denoting a number }
+@Rowa
+ A { object @Code "@Case" alternatives }
+ B { Select from a set of alternative objects }
+@Rowa
+ A { identifier @Code "&&" object }
+ B { Cross reference }
+@Rowa
+ A { cross-reference @Code "@Open" object }
+ B { Retrieve value from cross reference }
+@Rowa
+ A { cross-reference @Code "@Tagged" object}
+ B { Attach cross referencing tag to object }
+}
+
+which has proven adequate for a wide variety of features, including equations,
+tables, and page layout, and so seems to be reasonably complete in this
+pragmatic sense. In this section we introduce the eight concatenation and
+mark-hiding operators. To them falls the basic task of assembling complex
+objects from simple ones, and they were the first
+to be designed and implemented.
+@PP
+Many of the operators of Eqn can be viewed as building small tables. A
+built-up fraction, for example, has one column and three rows
+(numerator, line, and denominator). Numerous investigations of this
+kind convinced the author that operators capable of assembling the rows
+and columns of tables would suffice for building all kinds of objects.
+@PP
+The simplest objects are empty objects and literal words like
+{@Code metempsychosis}, which have one column mark and one row mark:
+@ID {
+@ShowMarks metempsychosis
+}
+To place two arbitrary objects side by side, we use the infix
+operator {@Code "|"}, denoting horizontal concatenation. For
+example,
+@ID {
+@Code "USA |0.2i Australia"
+}
+produces the object
+@ID {
+@ShowMarks USA |0.2i @ShowMarks Australia
+}
+The row marks are merged into one, fixing the vertical position of
+the objects relative to each other; their horizontal separation is
+determined by the @I gap attached to the operator, in this case 0.2
+inches. We think of the gap as part of the operator, although
+strictly it is a third parameter. It may be omitted, defaulting to
+{@Code "0i"}.
+@PP
+@I {Vertical concatenation} & , denoted by the infix operator {@Code "/"},
+is the same apart from the change of direction:
+@ID {
+@Code "Australia /0.1i USA"
+}
+produces the object
+@ID {
+@ShowMarks Australia /0.1i
+@ShowMarks USA
+}
+with column marks merged and a 0.1 inch gap.
+@PP
+Consider now what happens when horizontal and vertical are combined:
+@ID @OneRow @Code {
+ |1m "{" USA |1m "|0.2i" |1m Australia "}"
+/1vx "/0.1i" | "{" Washington | "|" | Canberra "}"
+}
+The two parameters of @Code "/" now have two column marks each, and
+they will be merged with the corresponding marks in the other
+parameter, yielding the object
+
+@ID @OneRow {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @ShowMarks USA &
+ { 0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke }
+ @Graphic {1c @Wide }
+ |0.2i @ShowMarks Australia
+/0.1i @ShowMarks Washington | @ShowMarks Canberra
+ }
+ PDF @Yield {
+ @ShowMarks USA &
+ { [ __mul(3, __pt) ] 0 d 0 __ymark m __add(__xsize, __mul(10, __pt)) __ymark l S }
+ @Graphic {1c @Wide }
+ |0.2i @ShowMarks Australia
+/0.1i @ShowMarks Washington | @ShowMarks Canberra
+ }
+ }
+}
+The @Code "0.2i" gap separates columns, not individual items in
+columns, so a gap attached to the second @Code "|" would serve no
+purpose; any such gap is ignored. If the number of marks to be merged
+differs, empty columns are added at the right to equalize the number. The
+four marks protruding from the result are all available for merging
+with neighbouring marks by other concatenation operators. The precedence
+of @Code "|" is higher than the precedence of {@Code "/"}, so the braces
+could be omitted.
+@PP
+When lines of text are concatenated, it is conventional to measure
+their separation from baseline to baseline (mark to mark in Lout),
+rather than from edge to edge as above. This idea of different
+reference points for measurement evolved over the years into a
+system of six @I {gap modes} (Figure {@NumberOf gapmodes}), expressed
+by appending a letter to the length. For example, @Code "|0.2i" is
+an abbreviation for {@Code "|0.2ie"}, meaning 0.2 inches measured
+from edge to edge; @Code "|0.3ix"
+produces a 0.3 inch gap measured from mark to mark and widened if
+necessary to prevent overstriking; and @Code "|2.5it" places its right
+parameter 2.5 inches from the current left margin, irrespective of
+the position of the left parameter. There is also a choice of
+eleven units of measurement (inches, centimetres, multiples of the
+current font size, etc.), the most interesting being
+the @Code r unit: one @Code r is the column width minus the width of
+the following object, so that @Code "|1rt" produces sufficient space
+to right justify the following object, and @Code "|0.5rt" to center
+it. These features implement spacings needed in practice rather
+than suggested by theory. They work with all five concatenation
+operators, horizontal and vertical.
+
+@Figure
+ @Tag { gapmodes }
+ @Caption { The six gap modes (@I length is any length). Hyphenation
+mode has an extra property not shown here. }
+@Fig {
+{ /2.5vx Edge-to-edge |0.3i {@Code "|"} &1p {@I length} &1p {@Code e}
+ /4.2vx Hyphenation |0.3i {@Code "|"} &1p {@I length} &1p {@Code h}
+ /4.2vx Overstrike |0.3i {@Code "|"} &1p {@I length} &1p {@Code o}
+ /4.2vx Mark-to-mark |0.3i {@Code "|"} &1p {@I length} &1p {@Code x}
+ /4.2vx Kerning |0.3i {@Code "|"} &1p {@I length} &1p {@Code k}
+ /4.2vx Tabulation |0.3i {@Code "|"} &1p {@I length} &1p {@Code t}
+}
+||0.5i
+@Box margin { 0c } 6c @Wide 14.5c @High 9p @Font
+{
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 2.2c @Wide 1.4c @High } @Put { @DoubleArrow 1.8c }
+ @At { 2.2c @Wide 1.6c @High } @Put { 1.8c @Wide { &0.5rt @I length } }
+ }
+ //4vx
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 2.2c @Wide 1.4c @High } @Put { @DoubleArrow 1.8c }
+ @At { 2.2c @Wide 1.6c @High } @Put { 1.8c @Wide { &0.5rt @I length } }
+ }
+ //4vx
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 1.2c @Wide 1.5c @High } @Put { @DoubleArrow 3.3c }
+ @At { 1.2c @Wide 1.7c @High } @Put { 3.3c @Wide { &0.5rt @I length } }
+ }
+ //4vx
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 1.2c @Wide 1.5c @High } @Put { @DoubleArrow 3.3c }
+ @At { 1.2c @Wide 1.7c @High }
+ @Put 3.3c @Wide { |0.5rt @Eq { max(length, a+b) } }
+ @At { 1.2c @Wide 0.4c @High } @Put { @DoubleArrow 1.0c }
+ @At { 1.2c @Wide 0.2c @High } @Put { 1.0c @Wide { &0.5rt @I a } }
+ @At { 4c @Wide 0.4c @High } @Put { @DoubleArrow 0.5c }
+ @At { 4c @Wide 0.2c @High } @Put { 0.5c @Wide { &0.5rt @I b } }
+ }
+ //4.5vx
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 1.2c @Wide 1.5c @High } @Put { @DoubleArrow 3.3c }
+ @At { 1.2c @Wide 1.7c @High }
+ @Put { 3.3c @Wide { |0.5rt @Eq { max(length, a, b) } } }
+ @At { 1.2c @Wide 0.4c @High } @Put { @DoubleArrow 1.0c }
+ @At { 1.2c @Wide 0.2c @High } @Put { 1.0c @Wide { &0.5rt @I a } }
+ @At { 4c @Wide 0.4c @High } @Put { @DoubleArrow 0.5c }
+ @At { 4c @Wide 0.2c @High } @Put { 0.5c @Wide { &0.5rt @I b } }
+ }
+ //4vx
+ @OneRow {
+ @At { 1c @Wide 0.5c @High } @Put { @LBox 0.2co }
+ @At { 4c @Wide 0.5c @High } @Put { @LBox 0.5co }
+ @At { 0.0c @Wide 1.6c @High } @Put { @DoubleArrow 4.0c }
+ @At { 2.8c @Wide 1.8c @High } @Put { @I length }
+ }
+ //5vx
+ @DoubleArrow 6c
+ //0.1c |0.5rt @I { current bound }
+}
+}
+
+@PP
+When we construct a built-up fraction, the result has three row marks, but
+only the second should be visible outside the object:
+@ID @Eq { @ShowMarks { X over Y } }
+This is a common problem, and accordingly a @Code "@OneRow" operator was
+introduced for hiding all but one of the row marks of its
+parameter. Normally, the first mark is the survivor, but a later mark can
+be chosen by prefixing @Code "^" to the preceding concatenation operator:
+@ID @Code "@OneRow { X ^/2p @HLine /2p Y }"
+has the desired result, where {@Code "2p"} is two points and @Code "@HLine"
+is an easy combination of Lout's graphics operators. A similar operator,
+{@Code "@OneCol"}, hides column marks.
+@PP
+A variant of @Code "/" called @Code "//" is provided which performs
+vertical concatenation but ignores all column marks and simply
+left-justifies its two parameters:
+@ID @OneRow @Code {
+"Heading //0.1i"
+"A |0.2i B /0.1i"
+"C | D"
+}
+has result
+@ID { Heading //0.1i A |0.2i B /0.1i C | D }
+showing that spanning columns in tables motivate the inclusion of this
+operator. There is an analogous @Code "||" operator. The author
+would have preferred to leave out these operators, since they
+complicate the implementation, and it is interesting to examine the
+prospects of doing so.
+@PP
+The @Code "//" operator is formally redundant, because in general
+the expression @Code "x // y" can be replaced by
+@ID @OneRow @Code {
+"@OneCol { | x } /"
+"@OneCol { | y }"
+}
+for any objects {@Code x} and {@Code y}. By concatenating an empty
+object at the left of @Code x and hiding all but that empty object's
+column mark, we effectively shift {@Code x}'s column mark to its left
+edge. The same goes for {@Code y}, so the @Code "/" operator has just
+one column mark to merge, at the extreme left, and its effect is
+indistinguishable from {@Code "//"}.
+@PP
+Unfortunately, if @Code y consists of two rows separated by {@Code "/"},
+as in the example above, both rows must be placed inside the
+{@Code "@OneCol"}, and the table cannot be entered in the simple
+row-by-row manner that non-expert users naturally expect. Another
+advantage of @Code "//" is that its left parameter can be printed
+before its right parameter is known; this is important when the left
+parameter is an entire page.
+@PP
+The fifth and final concatenation operator, {@Code "&"}, is an explicit
+version of the horizontal concatenation operator interpolated when
+objects are separated by white space. It is formally identical to
+@Code "|" except for taking higher precedence and being subject to
+replacement by @Code "//1vx" during paragraph breaking
+(Section {@NumberOf style}).
+@End @SubSection
diff --git a/doc/design/s2_4 b/doc/design/s2_4
new file mode 100644
index 0000000..38d25e7
--- /dev/null
+++ b/doc/design/s2_4
@@ -0,0 +1,345 @@
+@SubSection
+ @Tag { objects.impl }
+ @Title { Implementation of objects and concatenation }
+@Begin
+@PP
+In this section we discuss the implementation of objects and concatenation,
+and especially mark alignment. The first step is to use an operator
+precedence parser to convert input such as
+@ID @Code "a |0.5i b /0.2i c | d"
+into parse trees such as
+@ID @Eq {
+@Fig {
+@Tree {
+@Node @FCircle fraction
+@FirstSub {
+ @Node @FCircle bar
+ @FirstSub { @Node @FCircle a }
+ @NextSub { @Node @FEllipse 0.5i }
+ @NextSub { @Node @FCircle b }
+}
+@NextSub { @Node @FEllipse 0.2i }
+@NextSub {
+ @Node @FCircle bar
+ @FirstSub { @Node @FCircle c }
+ @NextSub { @Node @FCircle }
+ @NextSub { @Node @FCircle d }
+}
+}
+}
+}
+Missing objects are replaced by empty objects, and sequences of
+concatenation operators are consolidated:
+@ID @Eq {
+@Fig {
+@Tree {
+@Node @FCircle bar
+@FirstSub { @Node @FCircle a }
+@NextSub { @Node @FEllipse 0.2i }
+@NextSub {
+ @Node @FCircle bar
+ @FirstSub { @Node @FCircle c }
+ @NextSub { @Node @FEllipse 0.3i }
+ @NextSub { @Node @FCircle d }
+}
+}
+}
+&2m ==> &2m
+@Fig {
+@Tree {
+@Node @FCircle bar
+@FirstSub { @Node @FCircle a }
+@NextSub { @Node @FEllipse 0.2i }
+@NextSub { @Node @FCircle c }
+@NextSub { @Node @FEllipse 0.3i }
+@NextSub { @Node @FCircle d }
+}
+}
+}
+to make manifest their associativity and reduce the depth of the tree
+for efficiency later.
+@PP
+The required semantic information is the size of each subobject,
+consisting of four integers: width to left and right of the
+distinguished column mark, and height above and below the distinguished
+row mark. These numbers are always non-negative in Basser Lout, but
+this restriction is unnecessary and should be dropped.
+@PP
+For the leaves, which are simple words, the numbers are obtained from
+font tables. For the higher levels we apply recursive rules. Suppose
+that @Eq { hgap(x, g, y) } returns the desired distance between the
+column marks of objects @Eq { x } and @Eq { y } when they are separated by
+gap @Eq { g }: @Eq { right(x) + length(g) + left(y) } when the gap mode is
+edge-to-edge, the larger of @Eq { length(g) } and
+@Eq { right(x) + left(y) } when the mode is mark-to-mark, and so on. Given
+an object
+@ID @Eq {
+X = x sub 1 ````` bar g sub 1 ````` ... ````` { "-2p" @Font "^"}bar g sub i-1
+````` x sub i ````` ... ````` bar g sub n-1 ````` x sub n
+}
+we may calculate its size as follows:
+@ID @Eq {
+left(X) ^= left( x sub 1 ) + hgap( x sub 1 , g sub 1 , x sub 2 )
++ ... + hgap( x sub i-1 , g sub i-1 , x sub i )
+/1.4vx
+right(X) ^= hgap( x sub i , g sub i , x sub i+1 )
++ ... + hgap( x sub n-1 , g sub n-1 , x sub n ) + right( x sub n )
+/1.4vx
+"above"(X) ^= "above"(x sub 1 ) up ... up "above"(x sub n )
+/1.4vx
+"below"(X) ^= "below"(x sub 1 ) up ... up "below"(x sub n )
+}
+where @Eq { non up } returns the larger of its two parameters. Similar
+formulas are easily derived for the other operators.
+@PP
+For purposes of exposition we will now make the simplifying
+assumptions that all gaps are {@Code "0i"}, all column marks lie at
+the left edge, and all row marks lie at the top edge. Then the size
+of each object can be expressed by just two numbers, width and
+height, and the four formulas reduce to
+@ID @Eq {
+width( x sub 1 rel bar ... rel bar x sub n ) ^=
+width( x sub 1 ) + ... + width( x sub n )
+/1.4vx
+height( x sub 1 rel bar ... rel bar x sub n ) ^=
+height( x sub 1 ) up ... up height( x sub n )
+}
+The corresponding formulas for vertical concatenation are
+@ID @Eq {
+width( x sub 1 rel "/" ... rel "/" x sub n ) ^=
+width( x sub 1 ) up ... up width( x sub n )
+/1.4vx
+height( x sub 1 rel "/" ... rel "/" x sub n ) ^=
+height( x sub 1 ) + ... + height( x sub n )
+}
+According to these formulas, the height of
+@ID @Eq { @Fig { @Tree {
+@Node @FCircle fraction
+@LeftSub {
+ @Node @FCircle bar
+ @LeftSub { @Node @FCircle a }
+ @RightSub { @Node @FCircle b }
+}
+@RightSub {
+ @Node @FCircle bar
+ @LeftSub { @Node @FCircle c }
+ @RightSub { @Node @FCircle d }
+}
+}}}
+is
+@ID @Eq {
+[ height(a) up height(b)] + [ height(c) up height(d)]
+}
+which is correct, but for width they yield
+@ID @Eq {
+[ width(a) + width(b)] up [ width(c) + width(d)]
+}
+which is not, since it does not take the merging of column marks into
+account. The asymmetry between horizontal and vertical has come
+about because the row entries, such as @Eq {a} and {@Eq {b}}, are
+adjacent in the tree, but the column entries, such as @Eq {a} and
+{@Eq {c}}, are not. It would be possible to solve this cross-linking
+problem by augmenting the size information stored in each node to
+record the number of marks and the size of each, but the author has
+preferred the following method which makes structural changes to the
+tree instead.
+@PP
+If @Eq { a } and @Eq { c } share a column mark, they each might as well
+have width { @Eq {width(a) up width(c) }}, since all width calculations
+apply to entire columns. Accordingly, we introduce a new operator,
+@Eq {COL}, defined by
+@ID @Eq { width( x sub 1 bin COL ... bin COL x sub n ) =
+width( x sub 1 ) up ... up width( x sub n )
+}
+and replace both @Eq { a } and @Eq { c } by {@Eq { a bin COL c }}. To
+prevent @Eq { COL } operators from disturbing height calculations, we
+define a binary operator called @Eq { SPLIT } by
+@ID @Eq { width( x bin SPLIT y) ^= width(x)
+/1.4vx
+height( x bin SPLIT y) ^= height(y) }
+which switches height and width calculations onto different
+subtrees. Then the transformation
+@ID @Eq {
+@Fig { @Tree {
+ @Node @FCircle a
+}}
+&2m ==> &2m
+@Fig { @Tree {
+ @Node @FEllipse SPLIT
+ @LeftSub {
+ @Node @FEllipse COL
+ @LeftSub { @Node @FCircle a }
+ @RightSub { @Node @FCircle c }
+ }
+ @RightSub { @Node @FCircle a }
+}}
+}
+# where @Eq { S } denotes a @Eq { SPLIT } node and @Eq { C } denotes a
+# @Eq { COL } node,
+widens @Eq { a } to @Eq {width(a) up width(c) } without affecting its height;
+it is applied to every object that shares its column mark with at least
+one other object. A similar transformation involving a @Eq { ROW } operator
+deals with shared row marks. The effect on our little table is to replace
+@ID @Eq { @Fig { @Tree {
+@Node @FCircle fraction
+@LeftSub {
+ @Node @FCircle bar
+ @LeftSub { @Node @FCircle a }
+ @RightSub { @Node @FCircle b }
+}
+@RightSub {
+ @Node @FCircle bar
+ @LeftSub { @Node @FCircle c }
+ @RightSub { @Node @FCircle d }
+}
+}}}
+by
+@ID @Eq { @Fig maxlabels { "70" } { @Tree hmargin { "0.1c" } {
+@Node @FCircle fraction
+@FirstSub {
+ @Node @FCircle bar
+ @FirstSub {
+ @Node @FEllipse SPLIT
+ @FirstSub {
+ @Node @FEllipse COL
+ @FirstSub { @Node @FCircle a }
+ @NextSub { @Node @FCircle c }
+ }
+ @NextSub {
+ @Node @FEllipse ROW
+ @FirstSub { @Node @FCircle a }
+ @NextSub { @Node @FCircle b }
+ }
+ }
+ @NextSub {
+ @Node @FEllipse SPLIT
+ @FirstSub {
+ @Node @FEllipse COL
+ @FirstSub { @Node @FCircle b }
+ @NextSub { @Node @FCircle d }
+ }
+ @NextSub {
+ @Node @FEllipse ROW
+ @FirstSub { @Node @FCircle a }
+ @NextSub { @Node @FCircle b }
+ }
+ }
+}
+@NextSub {
+ @Node @FCircle bar
+ @FirstSub {
+ @Node @FEllipse SPLIT
+ @FirstSub {
+ @Node @FEllipse COL
+ @FirstSub { @Node @FCircle a }
+ @NextSub { @Node @FCircle c }
+ }
+ @NextSub {
+ @Node @FEllipse ROW
+ @FirstSub { @Node @FCircle c }
+ @NextSub { @Node @FCircle d }
+ }
+ }
+ @NextSub {
+ @Node @FEllipse SPLIT
+ @FirstSub {
+ @Node @FEllipse COL
+ @FirstSub { @Node @FCircle b }
+ @NextSub { @Node @FCircle d }
+ }
+ @NextSub {
+ @Node @FEllipse ROW
+ @FirstSub { @Node @FCircle c }
+ @NextSub { @Node @FCircle d }
+ }
+ }
+}
+}}}
+In fact, common subexpressions are identified (trivially) and the result
+is a directed acyclic graph; each affected leaf has two parents, one for
+width and one for height; and each @Eq { COL } or @Eq { ROW } node has
+one parent and one child for each object lying on the corresponding
+mark. The data structure roughly doubles in size, and this occurs only
+rarely in practice.
+@PP
+This method can cope with any legal input, including
+@ID @OneRow @Code {
+"{ a // c | d } | { b / e }"
+"/ { f / i } | { g | h // j }"
+}
+which produces overlapping spanning columns:
+@ID @I @Fig {
+ @FBox margin { 0.2c } width { 1.6c } 1.2f @Font a |
+ @FBox margin { 0.2c } width { 0.6c } 1.2f @Font b |
+// @FBox margin { 0.2c } width { 0.6c } 1.2f @Font c |
+ @FBox margin { 0.2c } width { 0.6c } 1.2f @Font d |
+ @FBox margin { 0.2c } width { 0.6c } 1.2f @Font e |
+// @FBox margin { 0.2c } width { 0.6c } 1.2f @Font f |
+ @FBox margin { 0.2c } width { 0.6c } 1.2f @Font g |
+ @FBox margin { 0.2c } width { 0.6c } 1.2f @Font h |
+// @FBox margin { 0.2c } width { 0.6c } 1.2f @Font i |
+ @FBox margin { 0.2c } width { 1.6c } 1.2f @Font j |
+}
+The boxes have been added to clarify the structure. The width of this
+object is formally
+@ID @Eq { ((width(a) up (x + y)) + z) up (x + ((y + z) up width(j))) }
+where
+@IL
+@ListItem @Eq { x = width(c) up width(`f`) up width(i) }
+@ListItem @Eq { y = width(d`) up width(g) }
+@ListItem @Eq { z = width(b) up width(e) up width(h) }
+@EL
+It seems clear that @Eq { y } at least must appear twice in any
+expression for the width of this object made out of simple addition
+and maxing operations, showing that an ordinary tree
+structure is insufficient for overlapping spanning columns. The Basser
+Lout interpreter actually rejects such structures, owing to the author's
+doubts about the implementability of @I Constrained and @I AdjustSize
+(Section {@NumberOf constraints}) on them; but with hindsight this caution
+was unnecessary.
+@PP
+The directed acyclic graph is ordered in the sense that the order of
+the edges entering and leaving each node matters. The structure is
+highly dynamic, and traversals both with and against the arrows are
+required. After a few ad-hoc attempts to extend the usual tree
+representation had failed, the author developed a representation based
+on doubly linked lists of records denoting links, whose flexibility more
+than compensated for the somewhat excessive memory consumption. For example,
+@ID @Eq { @Fig {
+ A:: @FCircle a |2c |2c B:: @FCircle b
+/1.5c C:: @FCircle c | D:: @FCircle d
+// A @JoinFigures arrow { forward } C
+// A @JoinFigures arrow { forward } D
+// B @JoinFigures arrow { forward } D
+}}
+is represented by
+@CD @Eq { @Fig maxlabels { "300" } {
+A:: @DagBox mid { @BlackDot } base { a } |2c |2c |2c |2c
+B:: @DagBox mid { @BlackDot } base { b }
+/1c L:: @DagBox top { @BlackDot } mid { @BlackDot } base { LK }
+| M:: @DagBox top { @BlackDot } mid { @BlackDot } base { LK }
+| | N:: @DagBox top { @BlackDot } mid { @BlackDot } base { LK }
+/1c
+C:: @DagBox top { @BlackDot } base { c } | |
+D:: @DagBox top { @BlackDot } base { d }
+// @TVShape nw { A@MID@CTR } ne { A@MID@CTR } sw {L@MID@CTR } se { M@MID@CTR }
+// @TVShape nw { L@TOP@CTR } ne { L@TOP@CTR } sw {C@TOP@CTR } se { C@TOP@CTR }
+// @TVShape nw { M@TOP@CTR } ne { N@TOP@CTR } sw {D@TOP@CTR } se { D@TOP@CTR }
+// @TVShape nw { B@MID@CTR } ne { B@MID@CTR } sw {N@MID@CTR } se { N@MID@CTR }
+}}
+where @Eq { LK } tags a record representing a link. The first list
+in any node contains all the incoming links, the second contains the
+outgoing ones. The node serves as the header for both lists. The
+required operations reduce to simple appends, deletes, and traversals
+of doubly linked lists, all having small constant cost. There is a
+highly tuned memory allocator, and care is taken to dispose of each node
+when the last incoming link is deleted, so that there is no need for
+garbage collection.
+@PP
+In normal use the number of nodes at higher levels of the dag is small
+in comparison with the leaves and their incoming links, so we may
+estimate the space complexity at about 60 bytes per input word (20 bytes
+per link, 40 per leaf node). Careful optimization could easily halve
+this, but since memory is reclaimed after printing each page there is
+little need.
+@End @SubSection
diff --git a/doc/design/s2_5 b/doc/design/s2_5
new file mode 100644
index 0000000..87d826b
--- /dev/null
+++ b/doc/design/s2_5
@@ -0,0 +1,90 @@
+@SubSection
+ @Tag { style }
+ @Title { Context-sensitive attributes of objects }
+@Begin
+@PP
+Although we are free to place any object in any context, the context
+must influence the appearance of the object, since otherwise
+@ID @Code "A short paragraph of text."
+could not appear in a variety of fonts, column widths, etc. This
+influence cannot take the purely static form that block-structured
+languages use to associate values with identifiers, for then an operator
+could not influence the appearance of its parameters; and a state
+variable solution is not compatible with the overall functional design.
+@PP
+The information needed from the context seems quite limited, comprising
+the font family, face, and size to use, the style of paragraph breaking
+required, how much space to substitute between the words of paragraphs,
+and how much horizontal and vertical space is available to receive the
+object. These four items constitute the so-called `style information'
+of Lout. As graphics rendering hardware improves, the style information
+will probably grow to include colour and texture information.
+@PP
+The way to deal with fonts at least is very clear:
+@ID @Code "{ Times Slope 12p } @Font { Hello, world }"
+should have result
+@ID { { Times Slope 12p } @Font { Hello, world } }
+Lout also provides @Code "@Break" and @Code "@Space" symbols for
+controlling the paragraph breaking and space styles mentioned
+above. These work in the same way, returning their right
+parameters in the style of their left. The implementation is very
+simple: one merely broadcasts the style information down into the parse
+tree of the right parameter. A font, for example, is converted to an
+8-bit internal name and stored in each leaf, while a breaking style is
+stored in the root node of each paragraph.
+@PP
+The same language design can be used for available width and height,
+only here the implementation is much more demanding:
+@ID @Code {
+"2i @Wide {"
+"(1) |0.1i An example"
+"containing a small"
+"paragraph of filled text."
+"}"
+}
+is guaranteed to be two inches wide:
+@ID {
+2i @Wide {
+(1) |0.1i An example
+containing a small
+paragraph of filled text.
+}
+}
+One must calculate that 1.9 inches minus the width of @Code "(1)" is
+available
+to the paragraph, and break it accordingly; Basser Lout does this in two
+stages. In the first, upward-moving stage, widths are calculated using the
+formulae of Section {@NumberOf objects}, which assume that available
+space is infinite. If the upward movement reaches a @Eq { WIDE }
+node, corresponding to a @Code "@Wide" operator, and
+the calculated width exceeds that allowed, a second, downward-moving stage
+is initiated which attempts to reduce the width by finding and breaking
+paragraphs. This second stage is quite routine except at @Code "|" nodes,
+whose children are the columns of a table. It is necessary to apportion
+the available width (minus inter-column gaps) among the columns. Basser
+Lout leaves narrow columns unbroken and breaks the remaining columns to
+equal width, using up all of the available space.
+@PP
+The size of an object is not clearly determined when the upward-moving
+size is less than the downward-moving available space, and the object
+contains constructs that depend on available space (e.g. right
+justification). For example, in
+@ID @Code "2i @Wide { Heading // a |1rt b }"
+it seems natural to assign a width of two inches to the subobject
+@Code "a |1rt b" because of the right justification, but it would be
+equally plausible if the width of @Code Heading was assigned to the
+subobject instead. The author is conscious of having failed to resolve
+this matter properly; an extra operator for controlling available space
+is probably necessary.
+@PP
+The actual paragraph breaking is just a simple transformation on the
+parse tree; the real issue is how to describe the various styles: ragged
+right, adjusted, outdented, and so on. Their diversity suggests that
+they should somehow be defined using more basic features; but then there
+are algorithms for high-quality paragraph breaking, which presumably
+must be built-in. This dilemma was not clearly grasped by the author in
+1985, and he included a built-in paragraph breaker, with the @Code
+"@Break" operator selecting from a fixed set of styles. A much better
+solution based on galleys will be given in Section {@NumberOf horizontal},
+but, regrettably, it is not implemented.
+@End @SubSection
diff --git a/doc/design/s2_9 b/doc/design/s2_9
new file mode 100644
index 0000000..648a1b6
--- /dev/null
+++ b/doc/design/s2_9
@@ -0,0 +1,2 @@
+@EndSubSections
+@End @Section
diff --git a/doc/design/s3_0 b/doc/design/s3_0
new file mode 100644
index 0000000..3f42ff5
--- /dev/null
+++ b/doc/design/s3_0
@@ -0,0 +1,10 @@
+@Section
+ @Title { Definitions }
+@Begin
+@PP
+The need to provide a means of packaging useful pieces of code for easy
+repeated use was recognised in the very earliest programming
+languages. This need is even more acute in document formatting, if that
+is possible, because the majority of users are not programmers and do
+not understand the code they invoke.
+@BeginSubSections
diff --git a/doc/design/s3_1 b/doc/design/s3_1
new file mode 100644
index 0000000..2fb44c6
--- /dev/null
+++ b/doc/design/s3_1
@@ -0,0 +1,76 @@
+@SubSection
+ @Tag { operators }
+ @Title { Operators }
+@Begin
+@PP
+It is evident from the example of Eqn that user-defined operators are
+needed that mimic the primitive ones in taking objects as parameters
+and returning objects as results. For example, to define a superscript
+operator so that
+@ID @Code "2 sup n"
+appears as {@Eq {2 sup @R n}}, the following operator definition may
+be used:
+@ID @OneRow @Code {
+"def sup"
+" precedence 50"
+" associativity right"
+" left x"
+" right y"
+"{"
+" @OneRow { | {-2p @Font y} ^/0.5fk x }"
+"}"
+}
+The @Code "sup" operator has precedence 50, is right associative, takes
+two objects as parameters passed on the left and right, and returns the
+object between braces as result. This object has the structure
+@ID @I +2p @Font {
+| @ShowMarks @Code y / @ShowMarks @Code x
+}
+but with the first row mark hidden by the @Code "@OneRow" operator,
+and @Code y two points smaller than it would otherwise have been. The
+length @Code "0.5f" specifies half the current font size; Figure
+{@NumberOf gapmodes} describes the @Code k gap mode. In the Eq equation
+formatting package [10] the equation as a whole is
+set in italic font, and @Code 2 is an identifier whose body contains
+a font change back to Roman. The digits @Code 0 to @Code 9 are classed
+as punctuation characters, permitting @Code 234 for example to be
+interpreted as a sequence of three identifiers.
+@PP
+These definitions are easily implemented by a standard symbol table
+and an operator precedence parser. Algol block structure with the
+usual scope rules was adopted as a matter of course.
+@PP
+Operators are limited to at most two parameters, left and
+right, and the parameters cannot be given default values. @I Named
+parameters solve both problems:
+@ID @OneRow @Code {
+"def @Preface"
+" named @Tag {}"
+" named @Title { Preface }"
+" right @Body"
+"{"
+" Bold @Font @Title"
+" //0.3v @Body"
+"}"
+}
+The default value appears just after the parameter's declaration,
+between braces. Invocations have a natural syntax:
+@ID @OneRow @Code {
+"@Preface"
+" @Title { About this book }"
+"{"
+" Few observers would have supposed in 1984, that ..."
+"}"
+}
+with the actual named parameters following directly after the
+operator, before any right parameter. In this example, @Code "@Tag"
+will receive its default value, and a less expert user could safely
+omit the @Code "@Title" parameter as well.
+@PP
+Lout permits named parameters to have parameters, a feature with
+applications to bibliographic databases, running headers, and other
+places where a format has to be supplied before content is
+known. One could go further and provide a complete lambda calculus,
+with functions as first-class objects, provided care was taken not
+to intimidate the non-expert user.
+@End @SubSection
diff --git a/doc/design/s3_2 b/doc/design/s3_2
new file mode 100644
index 0000000..0c5fd70
--- /dev/null
+++ b/doc/design/s3_2
@@ -0,0 +1,113 @@
+@SubSection
+ @Tag { recursion }
+ @Title { Recursion and page layout }
+@Begin
+@PP
+Design and implementation should proceed together in exploratory projects,
+since otherwise the design too easily becomes unrealistic. Sometimes the
+implementation does more than its designer intended. The author wrote the
+following purely as a testing scaffold:
+@ID @OneRow @Code {
+"def @Page right x"
+"{"
+" 8i @Wide 11i @High"
+" {"
+" //1i ||1i x ||1i"
+" //1i"
+" }"
+"}"
+}
+Only afterwards did he realize its significance: the concept of a page
+had been defined outside the implementation, removing the need for
+commands for setting page width and height, margins, and so on.
+@PP
+Defining a sequence of pages is harder, since their number is not known
+in advance. A simple version of this same problem is afforded by the
+leaders found in tables of contents:
+@ID {
+4i @Wide { Chapter 7 @Leaders 53 }
+}
+This seemed to require recursion, specifically the definition
+@ID @Code {
+"def @Leaders { .. @Leaders }"
+}
+Note that both @Code ".." and @Code "@Leaders" are objects, so the two
+spaces separating them are significant. No base case is given, and indeed
+we have no boolean or conditional operators with which to express it;
+but we can adopt the implicit base `if space is not sufficient, delete
+{@Code "@Leaders"} and any preceding space'. Then the expression
+@ID @Code "4i @Wide { Chapter 7 @Leaders 53 }"
+will produce the object shown above. It is hard to see how this base
+could be made explicit, without violating the general principle of
+keeping all size information internal. In the implementation,
+@Code "@Leaders" remains unexpanded while sizes are being
+calculated; then it is treated similarly to a receptive symbol, with
+its body as an incoming galley (Section {@NumberOf flushing}).
+@PP
+With this settled, it is now clear how to define a document which is a
+numbered sequence of pages. Let @Code "@Next" be a prefix operator
+which returns its parameter plus one. Then
+@ID @OneRow @Code {
+"def @PageList"
+" right @PageNum"
+"{"
+" @Page {"
+" |0.5rt - @PageNum -"
+" //1v @TextPlace"
+" //1rt @FootSect"
+" }"
+" //"
+" @PageList @Next @PageNum"
+"}"
+}
+when invoked in the expression {@Code "@PageList 1"}, has for its result
+the potentially infinite object
+@ID @OneRow {
+@LittlePage {
+|0.5rt - 1 -
+//1.2vx @Code "@TextPlace"
+//1rt @Code "@FootSect"
+}
+//
+@LittlePage {
+|0.5rt - 2 -
+//1.2vx @Code "@TextPlace"
+//1rt @Code "@FootSect"
+}
+//0.2c
+8p @Font @Code "@PageList 3"
+}
+Similarly, we may define @Code "@FootSect" like this:
+@ID @OneRow @Code {
+"def @FootSect"
+"{"
+" def @FootList"
+" right @Num"
+" {"
+" @FootPlace"
+" //1v"
+" @FootList @Next @Num"
+" }"
+""
+" 1i @Wide @HLine"
+" //1v"
+" @FootList 1"
+"}"
+}
+so that an invocation of @Code "@FootSect" produces
+@ID @OneRow @Code {
+1i @Wide @HLine
+"@FootPlace"
+"@FootPlace"
+"@FootPlace"
+"..."
+}
+The expansion process is very similar to a BNF derivation, and would be
+attempted only on demand.
+@PP
+Clearly, deciding which expansions to take and replacing @Code "@TextPlace"
+and {@Code "@FootPlace"} by the appropriate actual text will not be easy;
+this is the subject of Section {@NumberOf galleys}. The important point
+for now is that we have here a very simple and flexible method of specifying
+the layout of pages, which requires no specialized language features.
+@End @SubSection
diff --git a/doc/design/s3_3 b/doc/design/s3_3
new file mode 100644
index 0000000..d04a8db
--- /dev/null
+++ b/doc/design/s3_3
@@ -0,0 +1,143 @@
+@SubSection
+ @Tag { modules }
+ @Title { Modules }
+@Begin
+@PP
+It is well accepted that the visibility of symbols is not adequately
+controlled by Algol block structure. The author is aware of several
+major problems of this kind in document formatting.
+@PP
+One problem is that some symbols should be visible only within
+restricted parts of a document. For example, we naturally expect
+equation formatting to be accomplished like this:
+@ID @OneRow @Code {
+"surrounding text"
+"@Eq { {x sup 2 + 1} over 4 }"
+"surrounding text"
+}
+with the symbols {@Code "sup"}, {@Code "over"}, etc., visible only within
+the equation, not in the surrounding text.
+@PP
+It seems natural to define these symbols within {@Code "@Eq"}, since
+they are local to equations. It only remains then to decree that
+symbols local to @Code "@Eq" are to be visible within its actual right
+parameter, and this is done by replacing the right formal parameter with a
+@I body parameter:
+@ID @OneRow @Code {
+"export sup over"
+"def @Eq"
+" body @Body"
+"{"
+" def sup ..."
+" def over ..."
+""
+" Slope @Font @Body"
+"}"
+}
+The @Code export clause lists the identifiers which are permitted to be
+visible outside their usual range, the body of {@Code "@Eq"}; and the
+@Code body declaration imports them into (makes them visible within)
+the actual right parameter of each invocation of {@Code "@Eq"}. This
+arrangement has proven very convenient for defining a variety of
+special-purpose packages.
+@PP
+Another problem arises when global symbols, such as the ones used for
+headings and paragraph separators, call on values that the non-expert
+user will need to modify, such as the initial font or paragraph
+indent. These values are like parameters of the document as a whole, so
+it is natural to try this:
+@ID @OneRow @Code {
+"export @Heading @PP ..."
+"def @BookLayout"
+" named @InitialFont { Times Base 12p }"
+" named @InitialBreak { adjust 14p }"
+" named @ColumnWidth { 6i }"
+" ..."
+"{"
+" def @Heading ..."
+" def @PP ..."
+"}"
+}
+Now @Code "@Heading" and @Code "@PP" may invoke @Code "@InitialFont"
+and the other parameters. To make @Code "@Heading" and @Code "@PP"
+visible throughout the document, we need only add a body parameter to
+@Code "@BookLayout" and present the entire document as
+@ID @OneRow @Code {
+"@BookLayout"
+" @InitialFont { Helvetica Base 10p }"
+" @InitialBreak { adjust 12p }"
+"{"
+" The document."
+"}"
+}
+but for practical reasons given below we prefer not to enclose the
+entire document in braces. Instead, we write
+@ID @OneRow @Code {
+"@Use { @BookLayout"
+" @InitialFont { Helvetica Base 10p }"
+" @InitialBreak { adjust 12p }"
+"}"
+"The document."
+}
+which has the same effect: @Code "@Use" makes the exported symbols of
+@Code "@BookLayout" visible for the remainder of the document, and is
+permitted only at the beginning.
+@PP
+The third feature that affects visibility, and which will prove useful
+for cross referencing (Section {@NumberOf cross}), is the @Code "@Open"
+symbol. It makes the exported symbols of its left parameter visible
+within its right parameter, and is therefore similar to the Pascal @Code
+with statement.
+@PP
+It could be argued that Lout is over-supplied with these visibility modifying
+features: the body parameter, @Code "@Use" and @Code "@Open" do not seem
+sufficiently different from each another. The @Code "@Open" symbol is
+the most general, being capable of replacing the other two. For
+example,
+@ID @OneRow @Code {
+"@Use { x }"
+"@Use { y }"
+"Body of document"
+}
+can be replaced by
+@ID @OneRow @Code {
+"x @Open {"
+"y @Open {"
+"Body of document"
+"}}"
+}
+and, taking the @Code "@Eq" symbol above as example, we could eliminate
+its body parameter, add
+@ID @Code "def @Body right x { Slope @Font x }"
+to the exported definitions of {@Code "@Eq"}, and replace
+@ID @Code "@Eq { object }"
+by
+@ID @Code "@Eq @Open { @Body { object } }"
+If @Code "@Eq" is a galley (Section {@NumberOf galleys}), @Code "@Body"
+must take over that function. But one would not want to write these
+clumsy expressions in practice, and the enclosure of large quantities
+of input in extra braces could cause Basser Lout to run out of memory
+(Section {@NumberOf lookahead}).
+@PP
+A quite separate kind of visibility problem arises when expert
+users wish to define an object or operator for repeated use within, say,
+equations:
+@ID @Code "def isum { sum from i=1 to n }"
+As it stands this can only be placed within the @Code "@Eq" package itself,
+where @Code "sum" and the other symbols are visible, but it is not desirable
+to modify the source code of a standard package. Lout provides an
+@Code "import" clause to solve this problem:
+@ID @OneRow @Code {
+"import @Eq"
+"def isum { sum from i=1 to n }"
+}
+may appear after @Code "@Eq" is defined, and it will make the exported symbols
+of @Code "@Eq" visible within the body of {@Code "isum"}. This feature
+complicates the treatment of environments (Section {@NumberOf defs.impl}),
+and even introduces an insecurity, when @Code isum is invoked outside an
+equation. A simpler approach would be to allow only one symbol in an
+@Code import clause, and treat the following definition exactly like a
+local definition of that symbol; but then it would not be possible
+to define symbols using the resources of more than one of the standard
+packages.
+@End @SubSection
diff --git a/doc/design/s3_4 b/doc/design/s3_4
new file mode 100644
index 0000000..7b0f5bc
--- /dev/null
+++ b/doc/design/s3_4
@@ -0,0 +1,51 @@
+@SubSection
+ @Tag { defs.impl }
+ @Title { Implementation of definitions }
+@Begin
+@PP
+Input is processed by a hybrid parser which employs operator precedence
+for objects and simple recursive descent for the headers of
+definitions. A symbol table stores the body of each definition as a
+parse tree, except for macros which are lists of tokens, and manages the
+usual stack of static scopes, accepting @I PushScope and @I PopScope
+operations as the parser enters and leaves scope regions, including
+actual body parameters and the right parameter of the @Code "@Open"
+operator.
+@PP
+As the parse proceeds, a complete call graph is constructed, recording,
+for each symbol, which symbols are invoked within its body. Immediately
+after the last definition is read, the transitive closure of the call
+graph is computed, and used to determine whether each non-parameter
+symbol is recursive or receptive (Section {@NumberOf galleys}), and
+whether each parameter is invoked exactly once or not.
+@PP
+Purely functional systems may evaluate symbol invocations in applicative
+order (where parameters are evaluated before substitution into bodies),
+or in normal order (substitution before evaluation), and they may also
+share the value of a parameter among all uses of it. But in Basser
+Lout, the presence of context-sensitive style information (Section
+{@NumberOf style}) forces normal order evaluation and prevents sharing
+of parameter values.
+@PP
+To evaluate an unsized object (pure parse tree), its {@I environment},
+the equivalent of the stack frames in Algol-like languages, must be
+available, containing the actual values of all formal parameters
+that are visible within the unsized object. Environment handling is
+a well-known implementation technique, so it will be discussed
+only briefly here.
+@PP
+Environments are extra subtrees hung from the objects they refer
+to. This organization makes excellent use of the ordered dag to
+permit environments to be shared, and deleted when the last
+reference to them is removed. Several optimizations have been
+implemented. Actual parameters known to be invoked only once are moved
+in from the environment, not copied; copying could lead to quadratic time
+complexity. Actual parameters of the form @Code "@Next" @I object
+receive an applicative pre-evaluation which prevents long chains of
+@Code "@Next" symbols from forming during the generation of large page
+numbers. Some environments which provably contribute nothing are
+deleted, most notably when a symbol invocation has no symbols within its
+actual parameters and no import list, so that only the environment of its
+body need be kept; this saves a great deal of space when objects with
+environments are written to auxiliary files (Section {@NumberOf cross}).
+@End @SubSection
diff --git a/doc/design/s3_9 b/doc/design/s3_9
new file mode 100644
index 0000000..648a1b6
--- /dev/null
+++ b/doc/design/s3_9
@@ -0,0 +1,2 @@
+@EndSubSections
+@End @Section
diff --git a/doc/design/s4_0 b/doc/design/s4_0
new file mode 100644
index 0000000..5f89426
--- /dev/null
+++ b/doc/design/s4_0
@@ -0,0 +1,88 @@
+@Section
+ @Tag { functional }
+ @Title { Implementation of the functional subset }
+@Begin
+@PP
+The objects and definitions of Lout are very similar to those found in
+other functional languages, and they form a natural subset of the
+language. So we pause here and present an overview of the Basser Lout
+object evaluation algorithm.
+@PP
+The problem is to take an unsized object (pure parse tree), its
+environment (Section {@NumberOf defs.impl}), and its style
+(Section {@NumberOf style}), and to produce a PostScript file for
+rendering the object on an output device. This file is essentially a
+sequence of instructions to print a given string of characters in a
+given font at a given point.
+@PP
+Before the algorithm begins, the parse tree must be obtained, either by
+parsing input or by copying from the symbol table. Afterwards the data
+structure must be disposed. The algorithm proper consists of five
+passes, each a recursive traversal of the structure from the root down
+to the leaves and back.
+@DP
+@I {1. Evaluation of unsized objects.} On the way down, calculate
+environments and replace non-recursive, non-receptive symbols by their
+bodies (Section {@NumberOf defs.impl}); broadcast fonts to the leaves,
+and paragraph breaking and spacing styles to the paragraph nodes. On the
+way back up, delete @Eq { FONT }, @Eq { BREAK }, and @Eq { SPACE } nodes,
+and insert @Eq { SPLIT }, @Eq { COL }, and @Eq { ROW } nodes
+(Section {@NumberOf objects}).
+@DP
+@I {2. Width calculations and breaking.} Calculate the width of every
+subobject from the bottom up. As described in Section {@NumberOf objects},
+@Eq { WIDE } nodes may trigger object breaking sub-traversals during this pass.
+@DP
+@I {3. Height calculations.} Calculate the height of every subobject,
+from the bottom up.
+@DP
+@I {4. Horizontal coordinates.} Calculate the horizontal coordinate of
+each subobject from the top down, and store each leaf's coordinate in
+the leaf.
+@DP
+@I {5. Vertical coordinates and PostScript generation.} Calculate the
+vertical coordinate of every subobject from the top down, and at each
+leaf, retrieve the character string, font, and horizontal coordinate,
+and print the PostScript instruction for rendering that leaf.
+@DP
+Figure {@NumberOf components} gives the amount of code required for each
+
+@Figure
+ @Tag { components }
+ @Caption { Major components of the Basser Lout interpreter, showing
+the approximate number of lines of C code. }
+@Begin
+@Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @RR A ! @Col B ! @Col @RR C }
+ @Fmtb { @Col @RR A ! @Col B ! @Col C }
+{
+ @Rowa A { 1. } B { Initialization } C { 200 }
+ @Rowa A { 2. } B { Memory allocation, ordered dag operations } C { 400 }
+ @Rowa A { 3. } B { Lexical analysis, macros, file handling } C { 1,350 }
+ @Rowa A { 4. } B { Parsing of objects and definitions } C { 1,150 }
+ @Rowa A { 5. } B { Symbol table and call graph } C { 600 }
+ @Rowa A { 6. } B { Evaluation of pure parse trees } C { 1,650 }
+ @Rowa A { 7. } B { Reading, storing, and scaling of fonts } C { 600 }
+ @Rowa A { 8. } B { Cross references and databases } C { 1,000 }
+ @Rowa A { 9. } B { Width and height calculations, and breaking } C { 700 }
+ @Rowa A { 10. } B { @I Constrained and @I AdjustSize } C { 700 }
+ @Rowa A { 11. } B { Transfer of sized objects into galley tree } C { 450 }
+ @Rowa A { 12. } B { Galley flushing algorithm } C { 1,500 }
+ @Rowa A { 13. } B { Coordinate calculations and PostScript output } C { 700 }
+ @Rowa A { 14. } B { Debugging and error handling } C { 1,200 }
+ @Rowb vmargin { 0.1c } C { @Line }
+ @Rowa C { 12,200 }
+}
+@End @Figure
+
+pass. Symmetry between horizontal and vertical is exploited throughout
+Basser Lout, and passes 2 and 3, as well as 4 and 5, are executed on
+shared code.
+@PP
+The author can see no simple way to reduce the number of passes. The
+introduction of horizontal galleys (Section {@NumberOf horizontal})
+would remove the need for the object breaking transformations within this
+algorithm that are the principal obstacles in the way of the merging of
+passes 2 and 3.
+@End @Section
diff --git a/doc/design/s5_0 b/doc/design/s5_0
new file mode 100644
index 0000000..d176f77
--- /dev/null
+++ b/doc/design/s5_0
@@ -0,0 +1,11 @@
+@Section
+ @Title { Galleys }
+@Begin
+@PP
+With objects and definitions under control, the author faced the problem
+of getting body text, footnotes, floating figures and tables,
+references, index entries, and entries in the table of contents into
+their places. The resulting investigation occupied three months of
+full-time design work, and proceeded approximately as described in
+Section {@NumberOf galleys}; the implementation occupied the years 1987-89.
+@BeginSubSections
diff --git a/doc/design/s5_1 b/doc/design/s5_1
new file mode 100644
index 0000000..ab65bb9
--- /dev/null
+++ b/doc/design/s5_1
@@ -0,0 +1,123 @@
+@SubSection
+ @Tag { galleys }
+ @Title { The galley abstraction }
+@Begin
+@PP
+Let us take the footnote as a representative example. At some point in
+the document, we wish to write
+@ID @OneRow @Code {
+"preceding text"
+"@FootNote { footnote text }"
+"following text"
+}
+and we expect the formatter to remove the footnote from this context and
+place it at the bottom of the current page, possibly splitting some or
+all of it onto a following page if space is insufficient.
+@PP
+An object appears in the final document at the point it is invoked, but
+this basic property does not hold for footnotes: the point of
+invocation and the point of appearance are different. In some way, the
+footnote is attached to the document at both points, introducing a cross
+linking (Section {@NumberOf genesis}) that cannot be described in purely
+functional terms.
+@PP
+Since the interpretation of any object depends on an environment and
+style inherited from the context, the first question must be whether
+the footnote inherits them through the invocation point or through
+the point(s) of appearance.
+@PP
+If symbols are to be interpreted statically as heretofore, then environments
+must be inherited through the invocation point alone. Dynamic inheritance
+through the point of appearance is enticing in some ways: it might
+replace the body parameter, and it might help with automatic numbering,
+since the number of a footnote is known only at the point of appearance;
+but the implementation problems are severe, and static inheritance seems
+much simpler and more comprehensible to the user. Style, at least its
+available width and height part, must of necessity be inherited through
+the point of appearance. For consistency, the entire style should be
+inherited in this way. There is a suggestive analogy here with actual
+parameters, which have a point of invocation from which they inherit an
+environment, and a point of appearance within the body of the enclosing
+definition, from which they inherit a style. It may be possible to treat
+a footnote as the actual parameter of some symbol, therefore, although
+the details seem very obscure.
+@PP
+But the most profound consequence of having two types of attachment
+point is that it leads to two distinctive tree structures. Considering
+invocation points only leads to static trees like this one:
+@ID @I @Fig margin { 0.3c } { @Tree {
+@Node @Ellipse { body text }
+@LeftSub { @Node @Ellipse footnote }
+@RightSub {
+ @Node @Ellipse figure
+ @FirstSub { @Node @Ellipse footnote }
+}
+}}
+which shows that the body text contains a footnote and a figure, the
+latter itself containing a footnote. Considering points of appearance
+only gives a completely different, dynamic tree:
+@ID @I @Fig margin { 0.3c } { @Tree {
+@Node @Ellipse { sequence of pages }
+@FirstSub { @Node @Ellipse { body text } }
+@NextSub { @Node @Ellipse { footnote } }
+@NextSub { @Node @Ellipse { figure } }
+@NextSub { @Node @Ellipse { footnote } }
+}}
+The tree can be deeper, for example with sections appearing within
+chapters which appear within the body text, which appears within the
+final sequence of pages. Document formatting languages generally shirk
+the issues raised by this dual tree structure, by making the dynamic
+tree built-in, by limiting one or both trees to two levels, and so on,
+providing a classic example of the impoverishing effect of failing to
+permit language features to attain their natural level of generality.
+@PP
+We are thus led to propose a second abstraction for document formatting,
+which we name the @I galley in recognition of its similarity to the
+galleys used in manual typesetting. A galley consists of an object (such
+as a footnote) together with a sequence of places where that object may
+appear (such as the bottoms of the current and following pages). Splitting
+occurs quite naturally when space at any place is insufficient to hold
+the entire object.
+@PP
+In Lout, a footnote galley and its place of appearance are defined
+as follows:
+@ID @OneRow @Code {
+"def @FootPlace { @Galley }"
+""
+"def @FootNote into { @FootPlace&&following }"
+" right x"
+"{ x }"
+}
+The @Code "@FootPlace" symbol contains the special symbol {@Code "@Galley"},
+indicating that it is a point of appearance for a galley. By placing
+invocations of @Code "@FootPlace" at the bottoms of pages, as in Section
+{@NumberOf recursion}, we define the desired points of appearance for
+footnotes. Symbols whose body contains @Code "@Galley" either directly
+or indirectly are called receptive symbols, meaning receptive to
+galleys, and they are expanded only on demand. The effect of the
+@Code "into" clause is to make each invocation of @Code "@FootNote" a
+galley whose object is the result of the invocation in the usual way,
+and whose sequence of points of appearance is specified by the @Code "into"
+clause; in this example, the sequence of all @Code "@FootPlace" symbols
+following the invocation point.
+@PP
+Lout permits galleys to be invoked within other galleys to arbitrary
+depth, so that one may have footnotes within figures within the body
+text galley, for example, creating arbitrary static trees. Receptive
+symbols like @Code "@FootPlace" may appear within any galley, creating
+arbitrary dynamic trees as well. The root of the dynamic tree, which
+would normally consist of the sequence of pages of the complete assembled
+document, is considered to be a galley whose point of appearance is the
+output file. Points of appearance may be @Code preceding or @Code following
+the invocation point; entries in tables of contents are the main users
+of {@Code preceding}.
+@PP
+The galley abstraction is adequate for all of the applications listed at
+the beginning of this section, except that there is no provision for
+sorting index entries and references. Sorting of galleys has been added
+to Lout as a built-in feature, invoked by adding a special @Code "@Key"
+parameter to the galleys, and using its value as the sort key. The author
+was at a loss to find any other way, or any useful generalization of this
+feature. Its implementation will be discussed in Section
+{@NumberOf cross.impl}.
+@End @SubSection
diff --git a/doc/design/s5_2 b/doc/design/s5_2
new file mode 100644
index 0000000..a81630d
--- /dev/null
+++ b/doc/design/s5_2
@@ -0,0 +1,372 @@
+@SubSection
+ @Tag { flushing }
+ @Title { The galley flushing algorithm }
+@Begin
+@PP
+Galley components are promoted one by one into the point of appearance in
+the dynamic parent galley, then carried along with it, ultimately to the
+root galley and the output file. This process is called @I galley
+{@I flushing}: the galleys are rivers running together to the sea, and
+each component is a drop of water.
+@PP
+Here is a snapshot of a small dynamic tree, based on the @Code "@PageList"
+definitions of Section {@NumberOf recursion}:
+@ID @Fig {
+
+@I 10p @Font { output file } A:: @Box linestyle { noline } margin { 0c }
+
+||2c
+
+{
+@I 10p @Font { root galley }
+//0.2c
+B:: @Box margin { 0c } linestyle { noline }
+//
+@LittlePage {
+|0.5rt - 1 -
+//1.2vx &2m A small
+//1.2vx @Code "@Galley" * C:: @Box margin { 0.01c } linestyle { noline }
+//1rt @Code "@FootSect"
+}
+//
+@Box margin { 0.3c } 2.8c @Wide 8p @Font @Code "@PageList 2"
+}
+
+||2c
+
+{
+//0.9c @I 10p @Font { body text }
+//0.2c D:: @Box margin { 0.3c } 2.8c @Wide 8p @Font paragraph
+// @Box margin { 0.3c } 2.8c @Wide 8p @Font { of text. }
+// @Box margin { 0.3c } 2.8c @Wide @Code 8p @Font "@Input"
+}
+
+// @Arrow from { B@W } to { A@E }
+// @Arrow from { D@W } to { C@E }
+
+}
+The components of the body text galley are lines, except for the special
+receptive symbol @Code "@Input" which is a placeholder for as yet unread
+input (Section {@NumberOf lookahead}). The components of the root galley are
+pages, except for the concluding unexpanded invocation of {@Code "@PageList"},
+which is an inexhaustible source of more pages, expanded on demand.
+@PP
+The concrete data structure used by Basser Lout permits the galley
+flushing algorithm to navigate the dynamic tree and find significant
+features quickly:
+@ID 10p @Font @Fig maxlabels { 100 } {
+
+A:: @Ellipse @I { HEAD }
+
+||1.5c
+
+@OneCol @OneRow {
+B:: @Ellipse @I { RECEIVING * }
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@W A@CIRCUM} } to { B@W }
+//0.6c
+C:: @Ellipse @I { RECEPTIVE }
+// @Arrow from { A@CTR ++ {A@CTR @Angle C@W A@CIRCUM} } to { C@W }
+//0.6c
+D:: @Box margin { 0c } linestyle { noline }
+// @Arrow from { A@CTR ++ {A@CTR @Angle D@NW A@CIRCUM} } to { D@NW }
+//
+@LittlePage {
+|0.5rt - 1 -
+//1.2vx &2m A small
+//1.2vx E:: @Box margin { 0c } linestyle { noline } @Code "@Galley "
+//1rt F:: @Box margin { 0c } linestyle { noline } @Code "@FootSect "
+}
+// @FunnyArrow arrow { forward } from { B@E } to { E@E }
+// @FunnyArrow arrow { forward } from { C@E } to { F@E }
+//0.6c
+C:: @Ellipse @I { GAP }
+// @Arrow from { A@CTR ++ {A@CTR @Angle C@W A@CIRCUM} } to { C@W }
+//0.6c
+C:: @Ellipse @I { RECEPTIVE }
+// @Arrow from { A@CTR ++ {A@CTR @Angle C@W A@CIRCUM} } to { C@W }
+//0.6c
+D:: @Box margin { 0.3c } 2.8c @Wide 8p @Font @Code "@PageList 2"
+// @Arrow from { A@CTR ++ {A@CTR @Angle D@NW A@CIRCUM} } to { D@NW }
+// @FunnyArrow from { C@E } to { D@W ++ { 1.8 cm 0 } }
+}
+
+||1.0c
+
+A:: @Ellipse @I { HEAD }
+& @Arrow from { B@E } to { A@W }
+
+||1.5c
+
+@OneCol @OneRow {
+B:: @Box margin { 0.3c } 2.8c @Wide 8p @Font paragraph
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@W A@CIRCUM} } to { B@W }
+//0.6c
+B:: @Ellipse @I { GAP }
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@W A@CIRCUM} } to { B@W }
+//0.6c
+B:: @Box margin { 0.3c } 2.8c @Wide 8p @Font { of text. }
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@NW A@CIRCUM} } to { B@NW }
+//0.6c
+B:: @Ellipse @I { GAP }
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@W A@CIRCUM} } to { B@W }
+//0.6c
+B:: @Ellipse @I { RECEPTIVE }
+// @Arrow from { A@CTR ++ {A@CTR @Angle B@W A@CIRCUM} } to { B@W }
+//0.6c
+C:: @Box margin { 0.3c } 2.8c @Wide 8p @Font @Code "@Input"
+// @Arrow from { A@CTR ++ {A@CTR @Angle C@NW A@CIRCUM} } to { C@NW }
+// @FunnyArrow from { B@E } to { C@W ++ { 1.2 cm 0 } }
+}
+
+}
+Each galley has a @Eq { HEAD } node whose children are its component
+objects, separated by @Eq { GAP } nodes recording the inter-component
+gaps.
+@PP
+Each component is preceded by zero or more @I {galley index nodes} of
+various types. Every receptive symbol has a @Eq { RECEPTIVE } index pointing
+to it, so that it can be found without searching through its
+component. If the symbol is currently the target of a galley, it has a
+@Eq { RECEIVING } index instead which is also linked to the incoming
+galley. Galleys that are currently without a target are linked to the
+dynamic tree by @Eq { UNATTACHED } galley indexes, either just after their
+most recent target if there has been one, or else at their point of
+invocation.
+@PP
+Each galley should be thought of as a concurrent process, although the
+implementation in C uses coroutines implemented by procedures. A galley
+may promote its first component only if it has a target, sufficient space
+is available at the target to receive the component, and the component
+contains no receptive symbols. This last condition seems to be the key
+to galley synchronization: it forces a bottom-up promotion regime,
+preventing pages from flushing to output before text flushes into them,
+for example.
+@PP
+Each galley contains a number of binary semaphores, shown as asterisks
+in our snapshots when set. At any given moment, a galley process is
+either running or else is suspended on one of its own semaphores. The
+@Eq { HEAD } node contains a semaphore which is set when the galley has tried
+to find a target and failed. Each receptive symbol has a semaphore
+which is set when that symbol is preventing the first component from
+being promoted.
+@PP
+For example, in the snapshot at the beginning of this section, the root
+galley is suspended on the @Code "@Galley" symbol, but the text galley
+is running. It will suspend on the @Code "@Input" symbol after the
+first two components are promoted.
+@PP
+Every galley {@I G}, be it a list of pages, body text, a footnote, or
+whatever, executes the following algorithm in parallel with every other
+galley:
+@DP
+1. Initially @I G is unattached. Search forwards or backwards from its
+@Eq { UNATTACHED } index as required, to find a receptive symbol @I S which
+can expand to reveal a target for {@I G}.
+@DP
+2. If no @I S can be found, suspend on the attachment semaphore. Resume
+later from step 1.
+@DP
+3. Expand @I S to reveal the target of {@I G}. Preserve {@I S}'s
+semaphore by moving it to the first receptive symbol within the
+expansion of {@I S}.
+@DP
+4. Calculate the available width and height at the target, and if
+@I G is still a pure parse tree, use the environment attached to @I G
+and the style information from the target to evaluate @I G as in
+Section {@NumberOf functional}.
+@DP
+5. Examine the components of @I G one by one. For each component there
+are three possibilities:
+@PP
+@I ACCEPT. If the component fits into the available space, and has
+no other problems, then promote it into the target. If this is the
+first component promoted into this target, and @I G is a forcing
+galley (Section {@NumberOf lookahead}), delete every receptive symbol
+preceding the target in the parent galley. If @I G is the root galley,
+render the component on the output file and dispose it;
+@PP
+@I REJECT. If the component is too large for the available space, or a
+@Eq { FOLLOWS } index (described below) forbids its promotion into this
+target, then detach @I G from the target. If this was the first component
+at this target, @I S has been a complete failure, so undo step 3 (Basser
+Lout is not able to undo step 4); otherwise delete the target. Return to
+step 1 and continue immediately;
+@PP
+@I SUSPEND. If the component contains a receptive symbol, it cannot be
+promoted yet. If this symbol is the target of a galley that was written
+to an auxiliary file on a previous run, read in that galley and flush
+it. Otherwise suspend on the receptive symbol's semaphore; resume later
+from step 4.
+@DP
+6. Terminate when the galley is empty.
+@DP
+At various points in this algorithm, receptive symbols (and their
+semaphores) are deleted in the dynamic parent galley, possibly
+permitting it to resume flushing. When this happens, Basser Lout resumes
+the parent immediately after @I G suspends or terminates. Also,
+whenever a component is promoted, any child galleys connected to
+it by @Eq { UNATTACHED } indexes must be resumed, since these
+galleys may be able to find a target now. A good example of this
+situation occurs when a line of body text with one or more footnotes
+is promoted onto a page. Basser Lout gives priority to such children,
+suspending @I G while each is given a chance to flush.
+@PP
+Basser Lout searches for the first target of @I G only in regions of the
+dynamic tree that will clearly precede or follow {@I G}'s invocation
+point in the final printed document, whichever is specified in the
+@Code into clause; subsequent targets are sought later in the same
+galley as the first. An exception to this rule, whose necessity will
+be made clear later, is that a first @Code following target will be
+sought within a dynamic sibling galley preceding {@I G}'s invocation
+point:
+@ID 10p @Font @Fig {
+
+{
+@I { dynamic parent }
+//0.2c
+@Box 2.8c @Wide 4.5c @High
+{
+ //0.5c A:: @Box margin { 0c } linestyle { noline } @Code "@XTarget"
+ //1.0c C:: @Box margin { 0c } linestyle { noline } @Eq { UNATTACHED }
+ //1.3c @Code "@XTarget"
+}
+}
+
+||1.5c
+
+{
+//0.6c
+B:: @Box margin {0c} linestyle {noline} @Code "X into { @XTarget&&following }"
+//0.2c
+@Box 2.8c @Wide 1.5c @High { //0.8c @Code "@GTarget" }
+//1.0c
+D:: @Box margin {0c} linestyle {noline} @Code "G into { @GTarget&&following }"
+//0.2c
+@Box 2.8c @Wide 2.5c @High {}
+}
+
+// @Arrow from { A@E ++ {0.2 cm 0} } to { B@W -- {0.2 cm 0} }
+// @Arrow from { C@E ++ {0.2 cm 0} } to { D@W -- {0.2 cm 0} }
+
+}
+Here @I G will find the @Code "@GTarget" target within {@I X}. This is
+dangerous, since if the first component of @I G is then promoted via
+@I X into the first {@Code "@XTarget"} rather than into the second,
+{@I G}'s target will not appear later in the final printed document than
+its invocation point, as required by the @Code into clause.
+@PP
+Accordingly, when such a target is chosen, two special galley indexes
+are inserted and linked together: a @Eq { PRECEDES } index at {@I G}'s
+invocation point, and a @Eq { FOLLOWS } index at the first component of
+{@I G}. The algorithm checks before promoting any @Eq { FOLLOWS } index
+that its promotion would not place it earlier than the corresponding
+@Eq { PRECEDES } index in the same galley, and rejects the component if
+it would. Since @Eq { PRECEDES } and @Eq { FOLLOWS } indexes are rarely used,
+this check can be implemented by linear search.
+@PP
+When two components are separated by {@Code "/"}, as opposed to the more
+usual {@Code "//"}, each influences the horizontal position of the
+other. Because of this, the @I SUSPEND action is in fact taken if a
+receptive symbol occurs in any component separated from the first by
+{@Code "/"} operators only. Again, linear search forwards to the first
+{@Code "//"} suffices for this check.
+@PP
+A good illustration of these unusual cases is afforded by the
+@Code "@Align" symbols from the standard DocumentLayout package. These
+are used to produce displayed equations, aligned on their equals signs
+despite being separated by arbitrary body text.
+@PP
+The @Code "@Align" symbols are packaged neatly for the convenience of
+the non-expert user, but we will show just the essence of the
+implementation here. First, an @Code "@AlignList" galley is created
+which contains an infinite supply of @Code "@AlignPlace" receptive
+symbols separated by @Code "/" operators:
+@ID @Fig {
+
+{
+@I { body text galley }
+//0.2c
+@Box 2.8c @Wide 4.0c @High
+{ //1.5c
+ A:: @Box margin { 0c } linestyle { noline } @Code "@Galley"
+}
+}
+
+||1.5c
+
+{
+//2.4c
+B:: @Box margin { 0c } linestyle { noline } @Code "@AlignList"
+//0.2c
+@Box {
+ @Code "@AlignPlace"
+//1vx @Code "@AlignPlace"
+//1vx @Code "..."
+//1vx @Code "@EndAlignList"
+}
+
+}
+
+// @Arrow from { A@E ++ {0.2 cm 0} } to { B@W -- {0.2 cm 0} }
+}
+Then equations like
+@ID @ShowMarks @Eq { f(x) ^= g(x) + 2 }
+are created and sent to @Code "@AlignPlace&&following" targets. They
+collect in the @Code "@AlignList" galley and are aligned there:
+@ID @Fig {
+
+{
+@I { body text galley }
+//0.2c
+@Box 2.8c @Wide 4.0c @High
+{ //1.5c
+ A:: @Box margin { 0c } linestyle { noline } @Code "@Galley"
+}
+}
+
+||1.5c
+
+{
+//2.4c
+B:: @Box margin { 0c } linestyle { noline } @Code "@AlignList"
+//0.2c
+@Box {
+ @Line linestyle { dashed } from { xmark ysize } to { xmark 0 }
+ {
+ @Eq { f(x) ^= g(x) + 2 }
+ /1vx @Eq { f(x) - g(x) ^= 2 }
+ /1vx @Code "..."
+ /1vx @Code "@EndAlignList"
+ }
+}
+
+}
+
+// @Arrow from { A@E ++ {0.2 cm 0} } to { B@W -- {0.2 cm 0} }
+}
+The @Code "@AlignList" galley does not flush, because its first
+component is connected to a receptive symbol by @Code "/" operators.
+@PP
+After the last equation, an empty forcing galley is sent to
+{@Code "@EndAlignList"}, deleting the two remaining receptive symbols from
+the @Code "@AlignList" galley and permitting it to flush. @Eq { FOLLOWS }
+indexes ensure that each equation finds a target placed in the body text
+just after its point of invocation, so the equations return, aligned, to
+approximately the points where they were invoked. Notice that the flushing
+of body text is suspended until the list of equations is completed, as it
+must be, since the horizontal position of the first equation cannot
+be known until the last equation is added to the list.
+@PP
+Layout quality can occasionally be improved by rejecting a component
+that could be promoted -- for example, a component of body text that
+carries a footnote too large to fit on the current page. Since Lout
+does not specify how breaking decisions are made, beyond the basic
+constraints imposed by available space and @Code into clauses, in
+principle such high quality breaking could be added to the
+implementation with no change to the language. However, the
+generality of the galley flushing algorithm, and its already
+considerable complexity, make this a daunting problem in practice,
+although a fascinating one. @TeX [9], with its unnested
+set of `floating insertions' clearly identifiable as each page is begun,
+has the advantage in this respect.
+@End @SubSection
diff --git a/doc/design/s5_3 b/doc/design/s5_3
new file mode 100644
index 0000000..3ff9881
--- /dev/null
+++ b/doc/design/s5_3
@@ -0,0 +1,125 @@
+@SubSection
+ @Tag { constraints }
+ @Title { Size constraints and size adjustments }
+@Begin
+@PP
+The galley flushing algorithm needs to know the available width and
+height at each receptive symbol. These symbols may lie within
+arbitrarily complex objects, and they may compete with each other for
+available space (as body text and footnote targets do), so this
+information must be extracted from the tree structure when required.
+@PP
+For example, consider the object
+@ID @Code "5i @Wide { a / b }"
+and suppose that the width of @Code { a } is @Eq { 1i, 2i } (@Eq {1i} to
+the left of the mark, @Eq { 2i } to the right). What then is the
+available width at {@Code { b }}? If we let the width of @Code b be
+@Eq {l,r}, we must have
+@ID @Eq { (1i up l) + (2i up r) <= 5i }
+with the @Eq {non up } (i.e. max) operations arising from mark
+alignment. Eliminating them gives
+@ID @OneRow @Eq {
+matrix {
+ { 1i + 2i ^<= 5i }
+mabove { l + 2i ^<= 5i }
+mabove { 1i + r ^<= 5i }
+mabove { l + r ^<= 5i }
+}
+}
+and since we assume that @Code a fits into the available space, the
+first inequality may be dropped, leaving
+@ID @OneRow @Eq {
+matrix {
+ { l ^<= 3i }
+mabove { l + r ^<= 5i }
+mabove { r ^<= 4i }
+}
+}
+Object @Code b may have width @Eq {l, r} for any @Eq { l } and
+@Eq { r } satisfying these inequalities, and no others.
+@PP
+Here is another example:
+@ID @Code "5i @High { a /2ix b }"
+Assuming that @Code a has height @Eq {1i,1i}, the height @Eq {l, r} of
+@Code b must satisfy
+@ID @Eq { 1i + ((1i + l) up 2i) + r <= 5i }
+This time the @Eq { non up } operation arises from the mark-to-mark gap
+mode, which will widen the @Eq { 2i } gap if necessary to prevent
+@Code a and @Code b from overlapping. This inequality can be rewritten as
+@ID @OneRow @Eq {
+matrix {
+ { l ^<= infinity }
+mabove { l + r ^<= 3i }
+mabove { r ^<= 2i }
+}
+}
+In general, Lout is designed so that the available width or height at
+any point can be expressed by three inequalities of the form
+@ID @OneRow @Eq {
+matrix {
+ { l ^<= x }
+mabove { l + r ^<= y }
+mabove { r ^<= z }
+}
+}
+where @Eq {x }, @Eq {y} and @Eq {z} may be @Eq { infinity }. We
+abbreviate these three inequalities to @Eq { l, r <= x, y, z }, and we
+call @Eq {x, y, z} a {@I{size constraint}}.
+@PP
+The two examples above showed how to propagate the size constraint
+@Eq { infinity, 5i, infinity } for
+@Code "a / b" down one level to the child {@Code b}. Basser Lout
+contains a complete set of general rules for all node types, too
+complicated to give here. Instead, we give just one example of how
+these rules are derived, using the object
+@ID @OneRow {
+@Eq {x sub 1} @Code "/" @Eq {x sub 2} @Code "/" @Eq {ldots} @Code
+"/" @Eq {x sub n}
+}
+where @Eq { x sub j } has width @Eq { l sub j , r sub j } for all @Eq {j}.
+@PP
+Suppose the whole object has width constraint @OneCol @Eq {X,Y,Z}, and we
+require the width constraint of {@Eq { x sub i }}. Let
+@Eq { L = max sub j ` l sub j } and @Eq { R = max sub j ` r sub j },
+so that @OneCol @Eq {L, R} is the width of the whole object. We assume
+@Eq {L, R <= X,Y,Z}. Then @Eq { x sub i } can be enlarged to any size
+@Eq { l sub i ` , r sub i } satisfying
+@ID @Eq { ( l sub i up L), ( r sub i up R) <= X, Y, Z }
+which expands to eight inequalities:
+@ID @OneRow @Eq {
+matrix {
+ { l sub i ^<= X }
+mabove { L ^<= X }
+mabove { l sub i + r sub i ^<= Y }
+mabove { l sub i + R ^<= Y }
+mabove { L + r sub i ^<= Y }
+mabove { L + R ^<= Y }
+mabove { r sub i ^<= Z }
+mabove { R ^<= Z }
+}
+}
+Three are already known, and slightly rearranging the others gives
+@ID @OneRow @Eq {
+matrix {
+ { l sub i ^<= X }
+mabove { l sub i ^<= Y - R }
+mabove { l sub i + r sub i ^<= Y }
+mabove { r sub i ^<= Z }
+mabove { r sub i ^<= Y - L }
+}
+}
+Therefore the width constraint of @Eq { x sub i } is
+@ID @Eq { min(X, Y-R), Y, min(Z, Y-L) }
+The size constraint of any node can be found by climbing the tree to a
+@I WIDE or @I HIGH node where the constraint is trivial, then propagating
+it back down to the node, and this is the function of procedure
+{@I Constrained} in Basser Lout.
+@PP
+After some components have been promoted into a target, the sizes stored
+in its parent and higher ancestors must be adjusted to reflect the
+increased size. This is done by yet another set of recursive rules,
+upward-moving this time, which cease as soon as some ancestor's size
+does not change. These rules are embodied in procedure @I AdjustSize
+of Basser Lout. The adjustment must be done before relinquishing
+control to any other galley, but not after every component.
+@End @SubSection
diff --git a/doc/design/s5_4 b/doc/design/s5_4
new file mode 100644
index 0000000..b91d7ce
--- /dev/null
+++ b/doc/design/s5_4
@@ -0,0 +1,97 @@
+@SubSection
+ @Tag { lookahead }
+ @Title { The limited lookahead problem }
+@Begin
+@PP
+Basser Lout assumes that there will be enough internal memory to hold
+the symbol table plus a few pages, but not an entire document. This
+section describes the consequent problems and how they were solved.
+Other interpreters, notably interactive editors running on virtual
+memory systems, would not necessarily need this assumption.
+@PP
+Although Basser Lout can read and format any legal input, its memory
+consumption will be optimized when the bulk of the document resides in
+galleys whose targets can be identified at the moment they are
+encountered. Let us take the typical example of a root galley which
+is a list of pages, a @Code "@BodyText" galley targeted into the
+pages, @Code "@Chapter" galleys targeted into {@Code "@BodyText"},
+and @Code "@Section" galleys targeted into the @Code "@Chapter"
+galleys:
+@ID @OneRow @Code {
+"@PageList"
+"//"
+"@BodyText"
+"//"
+"@Chapter {"
+" @Section { ... }"
+" @Section { ... }"
+" ..."
+" @Section { ... }"
+"}"
+"@Chapter {"
+" ..."
+"}"
+}
+Basser Lout is able to read and process such galleys one paragraph at
+a time (strictly, from one @Code "//" at the outer level of a galley
+to the next), as we now describe.
+@PP
+When the parser encounters the beginning of a galley, like @Code "@Chapter"
+or {@Code "@Section"}, it initiates a new galley process. The special
+receptive symbol @Code "@Input" is substituted for the as yet
+unread right parameter of the galley. As each paragraph of the right
+parameter is read, it is deleted from the parse tree and injected into
+the galley's {@Code "@Input"}. The galley is then resumed. The parser
+thus acts as an extra
+concurrent process; it has low priority, so that input is read only when
+there is nothing else to do. Since galleys may be nested, a stack of
+@Code "@Input" symbols is needed, each with its own environment and
+style. If a galley is encountered for which a target is not immediately
+identifiable (a footnote, for example), it is read in its entirety and
+hung in pure parse tree form from an @I UNATTACHED index in the usual way,
+with an environment but without a style. It will be flushed later
+when its component is promoted.
+@PP
+In addition to producing a steady flow of components from input, we must
+also ensure that receptive symbols do not unduly block their
+promotion. The @Code "@FootSect" symbol at the foot of each page is a
+typical example: until it is deleted the page cannot be printed.
+@PP
+Receptive symbols are expanded only on demand, so @Code "@FootSect" can
+be deleted as soon as we can prove that it is not wanted. The symbol
+table can tell us that only @Code "@FootNote" galleys (with
+@Code "@FootPlace&&following" targets) want it, so it might be possible
+to deduce that @Code "@FootSect" may be deleted as soon as body text
+enters the following page.
+@PP
+The author was unable to make this work, so Basser Lout requires the
+user to identify those galleys which will carry the bulk of the document
+({@Code "@Chapter"}, {@Code "@Section"}, {@Code "@BodyText"}) as
+{@I {forcing galleys}}, by writing @Code "force into" instead of
+@Code "into" in their definitions. As described in the previous
+section, when a forcing galley attaches to a target, all receptive
+symbols preceding the target in its galley are deleted, removing all
+impediments to flushing. For example, when a forcing body text galley
+enters a new page, the @Code "@FootSect" symbol on the preceding page
+will be deleted. It seems likely that a system which could afford to
+wait until all input was read before deleting any receptive symbols
+would not need forcing galleys.
+@PP
+Galleys whose targets are a long way from their invocation points can be
+a problem. If the direction is {@Code "following"}, such galleys are
+held in internal memory for a long time, unless they are to be
+sorted. If the direction is
+{@Code "preceding"}, then either the entire intervening document must be
+held in memory (prevented by the target from flushing), or else some
+forcing galley prematurely deletes the target, leaving the galley bereft.
+@PP
+The typical example of the latter case occurs when the galley is an
+entry in the table of contents, launched backwards from the beginning of
+a chapter or section. Its target in the table of contents will have
+been deleted long before, to permit the rest of the document to print,
+so the galley ultimately emerges as an unattached galley promoted out of
+the root galley. All such galleys are written to an auxiliary file,
+indexed by the missing target. On the next run, just before that target
+is deleted, the auxiliary file is checked and any galleys for it are
+read in and flushed.
+@End @SubSection
diff --git a/doc/design/s5_5 b/doc/design/s5_5
new file mode 100644
index 0000000..af4d88b
--- /dev/null
+++ b/doc/design/s5_5
@@ -0,0 +1,109 @@
+@SubSection
+ @Tag { horizontal }
+ @Title { Horizontal galleys }
+@Begin
+@PP
+There is a strong analogy between breaking a column of text into
+page-sized pieces, and breaking a paragraph into line-sized pieces. In
+fact, the two differ only in direction: vertical for body text,
+horizontal for paragraphs. In this section we define {@I{horizontal
+galleys}}, and show how they provide an unlimited number of paragraph
+breaking styles, as well as solve some other problems. Regrettably,
+lack of time has prevented their incorporation into the Basser Lout
+interpreter.
+@PP
+Imagine a galley whose components are separated by horizontal
+concatenation operators instead of vertical ones, perhaps indicated by a
+@Code { horizontally into } clause. Then all object breaking, including
+paragraph breaking, could be replaced by galley component promotion like
+this:
+@ID @OneRow @Code {
+"def @Paragraph right x"
+"{"
+" def @LinePlace { @Galley }"
+""
+" def @LineList"
+" {"
+" @HExpand @LinePlace"
+" //1vx @LineList"
+" }"
+""
+" def @Par horizontally into { @LinePlace&&preceding }"
+" right x"
+" { x }"
+""
+" @LineList // @Par { 0.2i @Wide {} &0i x &1rt }"
+"}"
+}
+The @Code "@HExpand" operator, which is a primitive of Basser Lout,
+horizontally expands the gaps in its right parameter until the result
+fills the available space, thus implementing line adjustment, except
+when the parameter contains tabulation gaps like {@Code "&1rt"}, which
+cause the parameter to be already expanded. The result of
+@ID @Code "@Paragraph { A short paragraph of text. }"
+would then be something like
+@ID 1.5i @Wide {
+0.2i @Wide {} & A short paragraph of text.
+}
+depending on the available horizontal space. An unlimited range of
+paragraph breaking styles could be defined, including ragged right, ragged
+left, break-and-center, and so on.
+@PP
+In Basser Lout, indented paragraphs are produced by preceding them with
+a horizontal concatenation operator, for example {@Code "|0.5i"}. This
+has the unfortunate effect of making an indented paragraph into a single
+component of the enclosing galley, so that it will always be kept
+together on one page. Horizontal galleys solve this problem with a
+simple change to {@Code "@LineList"}:
+@ID @OneRow @Code {
+"def @LineList"
+"{"
+" |0.5i @HExpand @LinePlace"
+" //1vx @LineList"
+"}"
+}
+showing the flexibility that comes from bringing the full power of the
+Lout language to bear on paragraph layout. It is easy to make provision
+for a tag on the first line.
+@PP
+Although Basser Lout permits receptive symbols within paragraphs, they
+are of little use, because their available width is calculated after
+paragraph breaking, and the incoming galley cannot spread over more than
+one line. With horizontal galleys, such symbols would have infinite
+available width, and we could easily produce a filled paragraph of
+footnotes like this:
+@ID 3.5i @Wide {
+@OneRow { -2p @Font 1 ^/0.3vo } & See Jones and Saunders (1982). &2m
+@OneRow { -2p @Font 2 ^/0.3vo } & Or so Jacobsen (1973) asserts. &2m
+@OneRow { -2p @Font 3 ^/0.3vo } & {@I ibid}, p. 327.
+}
+based on an infinite horizontal sequence of @Code "@FootPlace" symbols
+inside a horizontal galley.
+@PP
+When body text is placed on pages, the length of each column varies
+depending on the available vertical space. Horizontal galleys could
+analogously produce lines of varying length, and so could fill
+non-rectangular shapes.
+@PP
+An important theoretical benefit of horizontal galleys is that they
+would permit horizontal and vertical to be treated in a perfectly
+symmetrical way, whereas at present paragraph breaking is horizontal
+only, and galley breaking is vertical only. This must simplify the
+treatment of non-European languages which fill in unusual directions,
+although it is not itself sufficient to implement them.
+@PP
+There are a few minor problems with horizontal galleys. First, the
+syntactic overhead of enclosing each paragraph in @Code "@Paragraph { ... }"
+or whatever is unacceptable. Permitting user-defined operators to have lower
+precedence than the white space between two words might help here. Second,
+the built-in paragraph breaker includes hyphenation, and it permits line
+breaks in the input to determine line breaks in the output, if
+desired. These features must somehow be preserved. Finally, we have
+explained how the Basser Lout interpreter assigns equal width to the
+wider columns of tables (Section {@NumberOf style}). The equivalent
+situation in vertical galleys occurs when two receptive symbols compete
+for vertical space (e.g. @Code "@TextPlace" and {@Code "@FootSect"}),
+and there it is conventional to grant as much as required to the first
+arrival. It is not clear to the author how these different approaches
+can be reconciled.
+@End @SubSection
diff --git a/doc/design/s5_9 b/doc/design/s5_9
new file mode 100644
index 0000000..648a1b6
--- /dev/null
+++ b/doc/design/s5_9
@@ -0,0 +1,2 @@
+@EndSubSections
+@End @Section
diff --git a/doc/design/s6_0 b/doc/design/s6_0
new file mode 100644
index 0000000..07fb62e
--- /dev/null
+++ b/doc/design/s6_0
@@ -0,0 +1,18 @@
+@Section
+ @Title { Cross references }
+@Begin
+@PP
+Cross references, such as `see page 57' and `see Figure 5,' are a useful
+but highly error-prone feature of documents. Scribe [7]
+introduced a method of keeping them up to date automatically as the
+document changes: the user gives each referenced entity a tag, and
+operators are provided that return the page or sequence number of the
+entity with a given tag.
+@PP
+A cross reference takes an object (such as a page number) from one point
+in the document and copies it to another, and this generalization
+suggests other applications. For example, a running header is copied
+from the title of a nearby chapter, and a reference is copied from a
+bibliographic database. Making the unity of these applications manifest
+is an interesting language design problem.
+@BeginSubSections
diff --git a/doc/design/s6_1 b/doc/design/s6_1
new file mode 100644
index 0000000..0ffc70d
--- /dev/null
+++ b/doc/design/s6_1
@@ -0,0 +1,85 @@
+@SubSection
+ @Tag { cross }
+ @Title { The cross reference abstraction }
+@Begin
+@PP
+In developing the cross reference abstraction, it seemed best to begin
+with the database application, since it is the simplest. Database
+relations are naturally mapped into Lout definitions:
+@ID @OneRow @Code {
+"def @Reference"
+" named @Tag {}"
+" named @Author {}"
+" named @Title {}"
+" named @Journal {}"
+"{}"
+}
+The set of all invocations of @Code "@Reference" is a relation whose
+attributes are the parameters, and whose tuples are the invocations. To
+complete the correspondence, we need only declare that the @Code "@Tag"
+parameter is special, serving as the key attribute.
+@PP
+Following the database model, we next need a notation for retrieving the
+invocation with a given tag:
+@ID @Code "@Reference&&kingston91"
+This @I {cross reference} is like an arrow pointing to the invocation. To
+access its attributes, we write
+@ID @Code "@Reference&&kingston91 @Open { @Author, @Title }"
+The @Code "@Open" operator evaluates its right parameter in an
+environment which includes the exported parameters of its left.
+@PP
+An invocation is chosen to be a running header because of its proximity
+to the place where it is used, rather than by its tag. Such proximity
+is naturally expressed by two special tags, {@Code preceding} and
+{@Code following}; for example, @Code "@Sym&&following" will point to
+the closest following invocation of @Code "@Sym" in the final printed
+document. This is much simpler conceptually than reference to the
+internal state of the document formatter at a critical moment, the usual
+approach to running headers.
+@PP
+It turns out that the above design solves all the cross referencing
+problems encountered in practice except one, which may be typified by
+the problem of finding the number of the page on which the chapter whose
+tag is @Code "intro" begins. Two cross referencing steps are needed,
+first to {@Code "@Chapter&&intro"}, then from there to
+{@Code "@Page&&preceding"}, where the page number is known.
+@PP
+Given our success so far, this last problem proves to be
+surprisingly difficult. We first try
+@ID @OneRow @Code {
+"@Chapter&&intro @Open {"
+" @Page&&preceding @Open { @PageNum }"
+"}"
+}
+but this fails because @Code "@Page&&preceding" is evaluated in the
+present context, not in the context of @Code "@Chapter&&intro" as
+required. So our next attempt is
+@ID @OneRow @Code {
+"def @Chapter"
+" named @PageNum { @Page&&preceding @Open { @PageNum } }"
+" ..."
+}
+with the @Code "@Page&&preceding" cross reference attached to the
+chapter; we write
+@ID @Code "@Chapter&&intro @Open { @PageNum }"
+This also fails, because parameters are evaluated after substitution, so
+once again @Code "@Page&&preceding" is evaluated in the wrong context. We
+could of course define a new operator specifically for this case:
+@ID @Code "@Page&&{ @Preceding @Chapter&&intro }"
+or some such. This is free of the annoying context-sensitivity, but it
+seems quite complex, and the expected cross reference @Code "@Page&&preceding"
+does not appear.
+@PP
+The author was lost in these obscurities for some time, and ultimately
+rescued himself by looking ahead to the implementation of the
+@Code preceding and @Code following tags, to see if a simple extension
+of it would solve the problem. This led to the @Code "@Tagged" operator:
+@ID @Code "@Page&&preceding @Tagged intro"
+placed at the beginning of the body of the chapter will attach @Code intro
+as an extra tag to the closest preceding invocation of {@Code "@Page"},
+so that
+@ID @Code "@Page&&intro @Open { @PageNum }"
+yields the desired page number. There is something low-level and ad hoc
+about the @Code "@Tagged" operator, but the two cross references do
+appear naturally, and it works.
+@End @SubSection
diff --git a/doc/design/s6_2 b/doc/design/s6_2
new file mode 100644
index 0000000..2df5478
--- /dev/null
+++ b/doc/design/s6_2
@@ -0,0 +1,79 @@
+@SubSection
+ @Tag { cross.impl }
+ @Title { Implementation of cross references }
+@Begin
+@PP
+Before an object can be sized and printed, the values of any cross
+references within it must be known. If they refer to invocations that
+have not yet been read, there is a problem. Scribe [7]
+solves it by capitalizing on the fact that documents are formatted
+repeatedly during the drafting process. All tagged invocations are
+copied to an auxiliary file during the first run, and indexed for quick
+retrieval on the second. A new auxiliary file is written during the second
+run, for retrieval on the third, and so on. Cross references always lag
+one run behind the rest of the document; a perfect copy may be produced
+by formatting the same version twice, except in a few pathological cases
+that fail to converge.
+@PP
+Cross referencing in Lout is implemented on top of a simple database
+system. Each database is either writable or readable but not both at
+once, and holds a set of key-value entries: the keys are @S ASCII
+strings, and the values are Lout objects, possibly with environments,
+written in Lout source. Operations are provided for writing an entry,
+converting from writable to readable, retrieval by key, and sequential
+retrieval in key order.
+@PP
+The implementation, which is quite unsophisticated, employs one or more
+@S ASCII {@I{ database files}}, containing the values, and one @S ASCII
+{@I{ index file}} per database, containing the keys. To write an entry,
+the value is first appended to a database file, then a line like
+@ID @Code "@Chapter&&intro ch1.ld 57"
+is appended to the index file, giving the file and offset where the value
+is stored. To convert from writable to readable, the index file is
+sorted. Then retrieval by key requires a binary search of the index
+file and one seek into a database file, and sequential retrieval by key
+is trivial.
+@PP
+This database system is used in several ways. For an external database,
+say of bibliographic references, the user creates the database file of
+values (without environments), Lout creates the index file whenever it
+cannot find one, and retrievals by key proceed as usual. Cross
+references with tags other than @Code preceding and @Code following are
+treated as described above, by writing all tagged invocations (with
+environments) to a single database, which is converted to readable at
+the end of the run for retrievals on the next run. Sorted galleys, such
+as index entries, are written out indexed by target and key and retrieved
+sequentially on the next run. Unsorted galleys with preceding targets
+which pop off the top of the root galley without finding a target, such
+as entries in tables of contents, are treated similarly, except that they
+are indexed by target and a sequence number that preserves their relative
+order during the sort.
+@PP
+When Lout processes a multi-file document, one cross reference database
+file is written for each input file, but they share a common index
+file. At end of run, the new index file is sorted and merged with the
+old one in such a way as to preserve entries relating to files not read
+on the current run. This provides some support for piecemeal
+formatting, but eventually the files must all be formatted together.
+@PP
+When a @Code preceding or @Code following cross reference is found,
+it is attached to a galley index of type @Eq { CROSS_PREC } or
+{@Eq { CROSS_FOLL }}, together with an automatically generated tag composed
+of the current file name and a sequence number. When a tagged
+invocation is found, it is attached to a @Eq { CROSS_TARG } index. These
+galley indexes are carried along through the dynamic tree, and
+eventually pop off the top of the root galley, at which point it is easy
+to determine which cross references refer to which invocations, since
+the indexes are now in final printed document order. Each referenced
+invocation is then written to the cross reference database, multiply indexed
+by the generated tags of the associated cross references. On the next
+run, when the same @Code preceding and @Code following cross references
+are found, chances are good that the same tags will be generated, and
+the appropriate values can be retrieved from the database immediately.
+@PP
+This approach was the genesis of the @Code "@Tagged" operator, whose
+implementation is now immediate: for each @Code "@Tagged" operator we
+produce one @Eq { CROSS_PREC } or @Eq { CROSS_FOLL } galley index,
+replacing the generated tag with the right parameter of the @Code "@Tagged"
+operator. Nothing more is required.
+@End @SubSection
diff --git a/doc/design/s6_9 b/doc/design/s6_9
new file mode 100644
index 0000000..648a1b6
--- /dev/null
+++ b/doc/design/s6_9
@@ -0,0 +1,2 @@
+@EndSubSections
+@End @Section
diff --git a/doc/design/s7_0 b/doc/design/s7_0
new file mode 100644
index 0000000..2cb4245
--- /dev/null
+++ b/doc/design/s7_0
@@ -0,0 +1,84 @@
+@Section
+ @Title { Conclusion }
+@Begin
+@PP
+Since its public release in October 1991, the Basser Lout interpreter
+has been ported without incident to a wide variety of Unix systems and
+hardware. It was tested extensively before release on its own
+documentation, and the few minor bugs which have emerged since then have
+all been fixed in the second release, scheduled to appear in mid-1992.
+@PP
+Seven substantial packages of definitions are distributed with Basser
+Lout. The DocumentLayout package, and its variants ReportLayout and
+BookLayout, provide the standard features that all documents
+require: pages, columns, paragraphs, headings, footnotes, floating
+figures and tables, chapters and sections, displays and lists, access
+to bibliographic databases, cross references, and so on
+[11]. The BookLayout package has extra features
+needed by books, including an automatically generated table of contents,
+Roman page numbers for the prefatory material, running page headers,
+odd and even page layouts, and a sorted index. The Eq package formats
+equations, and Pas formats Pascal programs [10]; Tab
+formats tables [12]; and Fig draws figures
+[6].
+@PP
+The non-expert user who uses these packages perceives a system of a
+standard quite similar to other fully developed batch formatters,
+although the interface is considerably more coherent than, say, the troff
+family's [8]. The expert user perceives a system which
+is radically different from previous ones, in which a great deal can be
+achieved very quickly. To take an extreme example, Pas was designed,
+implemented, tested, and documented in one afternoon. Eq took about
+a week, but most of that time was spent in marshalling the vast
+repertoire of mathematical symbols, and fine-tuning the spacing. Most
+of the effort seems to go into designing a good interface; most symbols
+are implemented in just one or a few lines of Lout.
+@PP
+A group of about 20 satisfied non-expert users has grown up within
+the author's department, mainly Honours students with no investment
+in older systems to hold them back. Basser Lout has been advertised
+on the Internet news as available via anonymous {@I ftp}, so the
+extent of its outside user community is hard to gauge. About 50
+people have mailed comments or questions to the author; many
+of these people have ported the program, written small definitions,
+and modified the standard packages.
+@PP
+Future work could usefully begin with the improvements suggested in this
+paper: overlapping spanning columns, better semantics for available
+space, and especially horizontal galleys. Support for non-European
+languages is also needed. However, the main task is the development of
+an interactive document editor based on Lout. A structure editor similar
+to Lilac [13], which already has objects and user-defined
+symbols, is envisaged; since cross references are easy when the whole
+document is available, the only major new problem is the treatment of
+galleys, including the expansion and retraction of receptive symbols.
+@LP
+@LP
+@B { Note. } Since the above was written the author has completed a
+revised version of Basser Lout, in which the problem concerning
+available space mentioned in Section {@NumberOf style} has been resolved.
+@LP
+@LP
+@B { Acknowledgment. } The author gratefully acknowledges many
+valuable discussions with Douglas W. Jones, especially during the
+development of the galley abstraction; and also many helpful comments on
+presentation by the anonymous referee.
+@DP
+@DP
+@Heading { References }
+@NumberedList
+@LI @RefPrint kingston91
+@LI @RefPrint kingston91over
+@LI @RefPrint kingston91basser
+@LI @RefPrint furuta82
+@LI @RefPrint kernighan75
+@LI @RefPrint kingston91fig
+@LI @RefPrint reid80
+@LI @RefPrint ossanna76
+@LI @RefPrint knuth84
+@LI @RefPrint kingston91eq
+@LI @RefPrint kingston91begin
+@LI @RefPrint kingston91tab
+@LI @RefPrint brooks91
+@EndList
+@End @Section