aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/README18
-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
-rw-r--r--doc/expert/README19
-rw-r--r--doc/expert/all26
-rw-r--r--doc/expert/det17
-rw-r--r--doc/expert/det_filt109
-rw-r--r--doc/expert/det_gall370
-rw-r--r--doc/expert/det_hori91
-rw-r--r--doc/expert/det_lexi253
-rw-r--r--doc/expert/det_name90
-rw-r--r--doc/expert/det_opti39
-rw-r--r--doc/expert/det_prec103
-rw-r--r--doc/expert/det_size145
-rw-r--r--doc/expert/det_sort83
-rw-r--r--doc/expert/det_visi181
-rw-r--r--doc/expert/exa18
-rw-r--r--doc/expert/exa_bibl238
-rw-r--r--doc/expert/exa_chap273
-rw-r--r--doc/expert/exa_equa149
-rw-r--r--doc/expert/exa_page267
-rw-r--r--doc/expert/exa_para236
-rw-r--r--doc/expert/mydefs442
-rw-r--r--doc/expert/outfile.ps15746
-rw-r--r--doc/expert/pre51
-rw-r--r--doc/expert/pre_back12
-rw-r--r--doc/expert/pre_begi31
-rw-r--r--doc/expert/pre_bend61
-rw-r--r--doc/expert/pre_brea154
-rw-r--r--doc/expert/pre_case51
-rw-r--r--doc/expert/pre_colo65
-rw-r--r--doc/expert/pre_conc325
-rw-r--r--doc/expert/pre_cove32
-rw-r--r--doc/expert/pre_cros36
-rw-r--r--doc/expert/pre_data37
-rw-r--r--doc/expert/pre_font146
-rw-r--r--doc/expert/pre_gall14
-rw-r--r--doc/expert/pre_grap284
-rw-r--r--doc/expert/pre_hadj33
-rw-r--r--doc/expert/pre_hcon17
-rw-r--r--doc/expert/pre_hexp29
-rw-r--r--doc/expert/pre_hlim18
-rw-r--r--doc/expert/pre_hsca34
-rw-r--r--doc/expert/pre_hshi43
-rw-r--r--doc/expert/pre_incg36
-rw-r--r--doc/expert/pre_incl20
-rw-r--r--doc/expert/pre_inse19
-rw-r--r--doc/expert/pre_kshr23
-rw-r--r--doc/expert/pre_lang61
-rw-r--r--doc/expert/pre_mome72
-rw-r--r--doc/expert/pre_next17
-rw-r--r--doc/expert/pre_notr61
-rw-r--r--doc/expert/pre_null26
-rw-r--r--doc/expert/pre_oneo62
-rw-r--r--doc/expert/pre_oner36
-rw-r--r--doc/expert/pre_open41
-rw-r--r--doc/expert/pre_page20
-rw-r--r--doc/expert/pre_plai15
-rw-r--r--doc/expert/pre_prep24
-rw-r--r--doc/expert/pre_rota57
-rw-r--r--doc/expert/pre_rump41
-rw-r--r--doc/expert/pre_scal26
-rw-r--r--doc/expert/pre_spac55
-rw-r--r--doc/expert/pre_span58
-rw-r--r--doc/expert/pre_tagg15
-rw-r--r--doc/expert/pre_unde30
-rw-r--r--doc/expert/pre_verb30
-rw-r--r--doc/expert/pre_wide22
-rw-r--r--doc/expert/pre_yuni28
-rw-r--r--doc/expert/preface31
-rw-r--r--doc/expert/pri15
-rw-r--r--doc/expert/pri_cros112
-rw-r--r--doc/expert/pri_defi246
-rw-r--r--doc/expert/pri_gall279
-rw-r--r--doc/expert/pri_obje178
-rw-r--r--doc/slides/README18
-rw-r--r--doc/slides/all680
-rw-r--r--doc/slides/mydefs8
-rw-r--r--doc/slides/outfile.ps4470
-rw-r--r--doc/user/README37
-rw-r--r--doc/user/all47
-rw-r--r--doc/user/ap_byp98
-rw-r--r--doc/user/ap_qck369
-rw-r--r--doc/user/bas31
-rw-r--r--doc/user/bas_char325
-rw-r--r--doc/user/bas_conv75
-rw-r--r--doc/user/bas_date84
-rw-r--r--doc/user/bas_drop44
-rw-r--r--doc/user/bas_empt26
-rw-r--r--doc/user/bas_font629
-rw-r--r--doc/user/bas_head32
-rw-r--r--doc/user/bas_hyph37
-rw-r--r--doc/user/bas_lang85
-rw-r--r--doc/user/bas_line43
-rw-r--r--doc/user/bas_objs141
-rw-r--r--doc/user/bas_par1105
-rw-r--r--doc/user/bas_par2261
-rw-r--r--doc/user/bas_spac103
-rw-r--r--doc/user/bas_star129
-rw-r--r--doc/user/bas_supe17
-rw-r--r--doc/user/bas_unde27
-rw-r--r--doc/user/bas_verb49
-rw-r--r--doc/user/bgr17
-rw-r--r--doc/user/bgr_boxs121
-rw-r--r--doc/user/bgr_colo48
-rw-r--r--doc/user/bgr_incl47
-rw-r--r--doc/user/bgr_rota35
-rw-r--r--doc/user/bgr_scal53
-rw-r--r--doc/user/cpp27
-rw-r--r--doc/user/cpp_chan83
-rw-r--r--doc/user/cpp_comm20
-rw-r--r--doc/user/cpp_eiff42
-rw-r--r--doc/user/cpp_embe152
-rw-r--r--doc/user/cpp_lone36
-rw-r--r--doc/user/cpp_tabs62
-rw-r--r--doc/user/dia46
-rw-r--r--doc/user/dia_cons7
-rw-r--r--doc/user/dia_defi361
-rw-r--r--doc/user/dia_erro45
-rw-r--r--doc/user/dia_geom208
-rw-r--r--doc/user/dia_intr108
-rw-r--r--doc/user/dia_labe433
-rw-r--r--doc/user/dia_link261
-rw-r--r--doc/user/dia_node512
-rw-r--r--doc/user/dia_posi224
-rw-r--r--doc/user/dia_summ1680
-rw-r--r--doc/user/dia_tags168
-rw-r--r--doc/user/dia_tree379
-rw-r--r--doc/user/draft.eps289
-rw-r--r--doc/user/equ28
-rw-r--r--doc/user/equ_defs53
-rw-r--r--doc/user/equ_disp126
-rw-r--r--doc/user/equ_intr61
-rw-r--r--doc/user/equ_spac81
-rw-r--r--doc/user/equ_summ721
-rw-r--r--doc/user/equ_symb357
-rw-r--r--doc/user/equ_tequ41
-rw-r--r--doc/user/equ_vert164
-rw-r--r--doc/user/fmt16
-rw-r--r--doc/user/fmt_head313
-rw-r--r--doc/user/fmt_marg121
-rw-r--r--doc/user/fmt_setu210
-rw-r--r--doc/user/fmt_size91
-rw-r--r--doc/user/gra46
-rw-r--r--doc/user/gra_capt72
-rw-r--r--doc/user/gra_data267
-rw-r--r--doc/user/gra_erro40
-rw-r--r--doc/user/gra_func179
-rw-r--r--doc/user/gra_intr51
-rw-r--r--doc/user/gra_keys104
-rw-r--r--doc/user/gra_over179
-rw-r--r--doc/user/gra_plac51
-rw-r--r--doc/user/gra_summ466
-rw-r--r--doc/user/gra_tick205
-rw-r--r--doc/user/letterbook356
-rw-r--r--doc/user/mydefs203
-rw-r--r--doc/user/pascal162
-rw-r--r--doc/user/preface66
-rw-r--r--doc/user/ref31
-rw-r--r--doc/user/ref_chan200
-rw-r--r--doc/user/ref_cite90
-rw-r--r--doc/user/ref_crea139
-rw-r--r--doc/user/ref_entr293
-rw-r--r--doc/user/ref_labe65
-rw-r--r--doc/user/ref_sett95
-rw-r--r--doc/user/str19
-rw-r--r--doc/user/str_colu40
-rw-r--r--doc/user/str_cont83
-rw-r--r--doc/user/str_cros112
-rw-r--r--doc/user/str_defs134
-rw-r--r--doc/user/str_disp94
-rw-r--r--doc/user/str_figs270
-rw-r--r--doc/user/str_foot150
-rw-r--r--doc/user/str_indx314
-rw-r--r--doc/user/str_larg177
-rw-r--r--doc/user/str_list392
-rw-r--r--doc/user/str_marg156
-rw-r--r--doc/user/str_theo108
-rw-r--r--doc/user/su_crest.eps1156
-rw-r--r--doc/user/tbl48
-rw-r--r--doc/user/tbl_alig96
-rw-r--r--doc/user/tbl_cell97
-rw-r--r--doc/user/tbl_inde58
-rw-r--r--doc/user/tbl_intr119
-rw-r--r--doc/user/tbl_marg74
-rw-r--r--doc/user/tbl_mark65
-rw-r--r--doc/user/tbl_mult57
-rw-r--r--doc/user/tbl_plai84
-rw-r--r--doc/user/tbl_rows59
-rw-r--r--doc/user/tbl_rule192
-rw-r--r--doc/user/tbl_setu65
-rw-r--r--doc/user/tbl_span195
-rw-r--r--doc/user/tbl_summ255
-rw-r--r--doc/user/tbl_widt84
-rw-r--r--doc/user/typ27
-rw-r--r--doc/user/typ_apdf21
-rw-r--r--doc/user/typ_book420
-rw-r--r--doc/user/typ_illu85
-rw-r--r--doc/user/typ_ordi313
-rw-r--r--doc/user/typ_orga93
-rw-r--r--doc/user/typ_over314
-rw-r--r--doc/user/typ_plai76
-rw-r--r--doc/user/typ_repo359
-rw-r--r--doc/user/vbas3
-rw-r--r--doc/user/vfmt1
-rw-r--r--doc/user/vref1
-rw-r--r--doc/user/vstr2
-rw-r--r--doc/user/vtbl2
-rw-r--r--doc/user/vtyp2
238 files changed, 62770 insertions, 0 deletions
diff --git a/doc/README b/doc/README
new file mode 100644
index 0000000..62f2260
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,18 @@
+Directory lout/doc
+
+This directory contains directories holding the four documents
+that describe the Lout document formatting system:
+
+design `The design and implementation of the Lout document
+ formatting language,' Software--Practice and Experience,
+ vol. 23, pp1001-1041 (September 1993)
+
+expert An Expert's Guide to the Lout Document Formatting System
+
+slides A Practical Introduction to the Lout Document Formatting
+ System (overhead transparencies)
+
+user A User's Guide to the Lout Document Formatting System
+
+Jeffrey H. Kingston
+17 November 1997
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
diff --git a/doc/expert/README b/doc/expert/README
new file mode 100644
index 0000000..9b9c3e0
--- /dev/null
+++ b/doc/expert/README
@@ -0,0 +1,19 @@
+Directory lout/doc/expert
+
+This directory contains the Lout source files
+for the Expert's Guide to the Lout Document
+Formatting System. To produce the Guide, type
+the command
+
+ lout all > outfile.ps
+
+in this directory. This must be done five 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. There
+should be no warning messages on the fifth run.
+
+Jeffrey H. Kingston
+!7 September 1999
diff --git a/doc/expert/all b/doc/expert/all
new file mode 100644
index 0000000..46471c0
--- /dev/null
+++ b/doc/expert/all
@@ -0,0 +1,26 @@
+@SysInclude { eq }
+@SysInclude { tab }
+@SysInclude { fig }
+@SysInclude { book }
+@SysDatabase @Reference { loutrefs }
+@Book
+ @Title { An Expert's Guide to the
+
+Lout
+
+Document Formatting System }
+ @Author { Jeffrey H. Kingston }
+ @Edition { Version 3.17
+September, 1999 }
+ @Publisher { @I { @CopyRight Copyright 1991, 1999, Jeffrey
+H. Kingston, Basser Department of Computer Science, The University
+of Sydney 2006, Australia.} }
+ @InitialLanguage { English }
+ @OptimizePages { Yes }
+//
+
+@Include { preface }
+@Include { pri }
+@Include { det }
+@Include { pre }
+@Include { exa }
diff --git a/doc/expert/det b/doc/expert/det
new file mode 100644
index 0000000..0018d91
--- /dev/null
+++ b/doc/expert/det
@@ -0,0 +1,17 @@
+@Chapter
+ @Title { Details }
+ @Tag { details }
+@Begin
+@BeginSections
+@Include { det_lexi }
+@Include { det_name }
+@Include { det_visi }
+@Include { det_filt }
+@Include { det_prec }
+@Include { det_size }
+@Include { det_gall }
+@Include { det_sort }
+@Include { det_hori }
+@Include { det_opti }
+@EndSections
+@End @Chapter
diff --git a/doc/expert/det_filt b/doc/expert/det_filt
new file mode 100644
index 0000000..0d5405d
--- /dev/null
+++ b/doc/expert/det_filt
@@ -0,0 +1,109 @@
+@Section
+ @Title { Filtered right and body parameters }
+ @Tag { filters }
+@Begin
+@PP
+A right or body parameter may be filtered by some other computer
+program before being included by Lout. As an example of such a program
+we will use the Unix @Code sort command:
+@ID @Code "sort -o outfile infile"
+This causes file @Code outfile to contain a sorted copy of file
+{@Code infile}. We incorporate this into a Lout definition as follows:
+@ID @OneRow @Code {
+"def @Sort"
+" named @Options {}"
+" right x"
+"{"
+" def @Filter { sort @Options -o @FilterOut @FilterIn }"
+""
+" lines @Break x"
+"}"
+}
+The presence within @Code "@Sort" of a definition of a symbol called
+@Code "@Filter" tells Lout that the right parameter of @Code "@Sort"
+is to be filtered before inclusion. When @Code "@Sort" is invoked,
+@Code "@Filter" is evaluated and its value executed as a system
+command. In addition to the symbols ordinarily available within the
+body of {@Code "@Filter"}, there are three others:
+@VeryWideTaggedList
+@TI { @Code "@FilterIn" } {
+the name of a file which will, at the time the system command is
+executed, contain the actual right or body parameter of the
+symbol, exactly as it appears in the input file;
+}
+@TI { @Code "@FilterOut" } {
+the name of a file of Lout text whose contents Lout will read after
+the system command has finished, as a replacement for what was put
+into file {@Code "@FilterIn"};
+}
+@TI { @Code "@FilterErr" } {
+the name of a file that Lout will attempt to read after the system
+command has finished, containing error messages produced by the
+command that Lout will pass on to the user as non-fatal errors. Use
+of this file is optional.
+}
+@EndList
+It is a fatal error for the system command to return a non-zero status.
+@PP
+Now the @Code sort command has options @Code -u for deleting duplicate
+lines, and @Code -r for reversing the sorting order. So the result of
+@ID @OneRow @Code {
+"@Sort"
+" @Options { -r -u }"
+"{"
+"Austen, Jane"
+"Dickens, Charles"
+"Eliot, George"
+"Hardy, Thomas"
+"Bront{@Char edieresis}, Charlotte"
+"}"
+}
+is
+@ID @OneRow lines @Break
+{
+Hardy, Thomas
+Eliot, George
+Dickens, Charles
+Bront{@Char edieresis}, Charlotte
+Austen, Jane
+}
+Unlike all the other examples in this manual, this output
+is simulated. This was done so that the ability to format this
+manual is not dependent on the existence of the Unix {@Code "sort"}
+command, and it highlights the fact that filtered actual parameters
+are by their nature of uncertain portability.
+@PP
+There is no need for an actual filtered parameter to obey the lexical
+rules of Lout, since it is passed directly to the other program. However,
+Lout must be able to work out where the parameter ends, which gives
+rise to the following rules. As with a body parameter, a symbol
+@Code "@Sym" with a filtered parameter must be invoked in either the
+form @Code "@Sym { ... }" or the form {@Code "@Sym @Begin ... @End @Sym"},
+plus options as usual. In the former case, braces within the
+actual parameter must match; in the latter case, the actual parameter
+may not contain {@Code "@End"}.
+@PP
+If an actual filtered parameter contains @@Include, this is taken to
+begin a Lout @@Include directive in the usual form (Section
+{@NumberOf include}):
+@ID @OneRow @Code {
+"@Sort {"
+"Austen, Jane"
+"@Include { authors }"
+"Hardy, Thomas"
+"}"
+}
+The included file becomes part of {@Code "@FilterIn"}, but any braces,
+@@Include, or @@End within it are not noticed by Lout.
+@PP
+The first character of file @Code "@FilterIn" will be the first
+non-white space character following the opening @Code "{" or @@Begin,
+or the first character of an included file if @@Include comes first. The
+second-last character of file @Code "@FilterIn" will be the last non-white
+space character preceding the closing @Code "}" or {@Code "@End @Sym"},
+or the last character of an included file if @@Include comes last. One
+newline character is always appended and is the last character of file
+{@Code "@FilterIn"}. This effects a compromise between the Lout convention,
+that spaces following @Code "{" or preceding @Code "}" are not significant,
+with the Unix convention that all text files end with a newline character.
+@End @Section
diff --git a/doc/expert/det_gall b/doc/expert/det_gall
new file mode 100644
index 0000000..e68d58f
--- /dev/null
+++ b/doc/expert/det_gall
@@ -0,0 +1,370 @@
+@Section
+ @Title { Galleys and targets }
+ @Tag { targets }
+@Begin
+@PP
+The behaviour of galleys and their targets, as described in Section
+galley.feature.in.detail @SubIndex { in detail }
+targets.in.detail @SubIndex { in detail }
+{@NumberOf galleys}, can be summarized in three laws:
+@DP
+{@I {First Law}}: The first target is the closest invocation of the
+target symbol, either preceding or following the invocation point of the
+galley as required, which has sufficient space to receive the first
+component;
+@DP
+{@I {Second Law}}: Each subsequent target is the closest invocation of
+the target symbol, following the previous target and lying within the same
+galley, which has sufficient space to receive the first remaining component;
+@DP
+{@I {Third Law}}: A receptive symbol that does not receive at least one
+component of any galley is replaced by @@Null.
+@DP
+The terms `closest,' `preceding,' and `following' refer to position in
+the final printed document. This section explains the operation of
+these laws in Basser Lout.
+@PP
+When a galley cannot be fitted into just one target, Lout must find
+points in the galley where it can be split in two. The object lying
+between two neighbouring potential split points is called a @I component
+component @Index { Components of a galley }
+of the galley. By definition, a component cannot be split.
+@PP
+To determine the components of a galley, expand all symbols other than
+recursive and receptive ones, discard all @@Font, @@Break, @@Space,
+@@SetColor, @@SetColour, and @@Language symbols, perform paragraph
+breaking as required, and discard all redundant braces. Then view the
+galley as a sequence of one or more objects separated by vertical
+concatenation symbols; these are the components and split points,
+except that concatenation symbols whose gaps are unbreakable
+(Section {@NumberOf concatenation}) are not eligible to be split
+points. For example, given the definition
+@ID @OneRow @Code {
+"def @Section into { @SectionPlace&&preceding }"
+" named @Title {}"
+" right @Body"
+"{"
+" 15p @Font { @Title //0.7f }"
+" //"
+" @Body"
+"}"
+}
+the galley
+@ID @OneRow @Code {
+"@Section"
+" @Title { Introduction }"
+"{ This is a subject that really"
+"needs no introduction. }"
+}
+becomes
+@ID @OneRow @Code {
+"Introduction"
+"//0.7f"
+"{}"
+"//"
+"This is a subject that really needs"
+"//1vx"
+"no introduction."
+}
+with four components. If @Code "@Body" had been preceded by @Code "|1.0c" in
+the definition, the result would have been
+@ID @OneRow @Code {
+"Introduction"
+"//0.7f"
+"{}"
+"//"
+"|1.0c { This is a subject that really needs //1vx no introduction. }"
+}
+with @Code "//1vx" buried within one component and hence not a
+potential split point. If @Code "0.7f" had been {@Code "0.7fu"},
+the gap would have been unbreakable and @Code "//0.7fu" would not
+have been a potential split point.
+@PP
+Version 3.03 has liberalized this somewhat in the following way. When
+a component consists of a horizontal sequence of two or more objects
+@Eq { A sub 1 ,..., A sub n } separated by @Code "|" (not {@Code "||"},
+not {@Code "&"}), Lout will investigate the component to see whether
+it can be broken up. It looks at each @Eq { A sub i } to see whether it
+is a vertical concatenation of objects @Eq { A sub i1 ,..., A sub im }; if
+two or more of the @Eq { A sub i } satisfy this condition, the component
+will not be broken up. So now suppose we have just one @Eq { A sub i }
+which is a vertical concatenation. Lout will break the component into
+one component for each of the @Eq { A sub i1 ,..., A sub im }, provided
+that they are separated by @Code "//" symbols (not {@Code "/"}), and
+provided this can be done without introducing any apparent change into
+the appearance of the component (this second rule will be satisfied if
+the other @Eq { A sub j } are not very large). The example above
+satisfies all these rules and will be broken up into two components,
+so the @Code "//1vx" becomes a potential split point after all.
+@PP
+The lines of a paragraph become separate components if the paragraph
+occupies an entire component before breaking; otherwise they are
+enclosed in a @@OneRow symbol within one component. The same is true of
+incoming components of other galleys. If a @@Galley symbol occupies an
+entire component by the rules above, then the incoming components that
+replace it become components of their new home:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col lines @Break B ! @Col @Code C }
+{
+@Rowa
+ A {
+"An example"
+"//0.5c"
+"@Galley"
+"//0.5c"
+"@SomethingList"
+}
+ B {
+""
+@Eq { ==> }
+}
+ C {
+"An example"
+"//0.5c"
+"Incoming components"
+"//0.2c"
+"from some other galley"
+"//0.5c"
+"@SomethingList"
+}
+}
+Otherwise the incoming components are grouped within a @@OneRow symbol
+and lie within one component.
+@PP
+This distinction has a marked effect on the vertical concatenation
+b.unit.use @SubIndex { use in @Code "//1.1b" }
+symbol {@Code "//1.1b"}, which calls for more space than is available
+(Section {@NumberOf concatenation}). There is no room for this symbol
+within any component, so it will force a split and be discarded in that
+case. But it can be promoted to between two components.
+@PP
+Components may be separated by @Code "/" as well as by {@Code "//"},
+giving rise to column mark alignment between adjacent components:
+@ID @ShowVMark {
+@HContract @GreyBox { 1c @Wide ^| 1c @Wide 0.6c @High }
+/0.3c
+@HContract @GreyBox { 2c @Wide 0.6c @High }
+/0.3c
+@HContract @GreyBox { 0.5c @Wide ^| 0.8c @Wide 0.6c @High }
+}
+When aligned components are promoted into different targets, the meaning
+of alignment becomes very doubtful. For example, what if the targets
+mark.alignment.in.detail @SubIndex { in detail }
+are in different columns of one page, or what if one lies within
+{@Code "90d @Rotate"}?
+@PP
+The truth is that @Code "/" causes all the objects that share a mark to
+have equal width:
+@ID @ShowVMark {
+@TightBox @HContract @GreyBox { 1c @Wide ^| 1c @Wide 0.6c @High }
+/0.3c
+@TightBox @HContract @GreyBox { 2c @Wide 0.6c @High }
+/0.3c
+@TightBox @HContract @GreyBox { 0.5c @Wide ^| 0.8c @Wide 0.6c @High }
+}
+This is a consequence of the `as wide as possible' rule (Section
+{@NumberOf size}). Mark alignment occurs {@I incidentally}, whenever
+the fragments are placed into similar contexts.
+@PP
+In this connection we must also consider the special case of a @@Galley
+symbol which shares its column mark with some other object:
+@ID @OneRow @Code {
+"@Galley"
+"/0.2c"
+"@SomethingList"
+}
+(The @@Galley may or may not occupy an entire component; that doesn't
+matter here.) If incoming components are separated by @Code "//" rather
+than by {@Code "/"}, the meaning is so doubtful that this is forbidden. In
+fact, a galley whose components replace such a @@Galley must have a
+single column mark running its full length; that is, its components must
+all share a single column mark. This mark will be merged with the
+column mark passing through each @@Galley that these components replace;
+all the objects on the resulting merged mark will have equal width.
+@PP
+The root galley, where everything collects immediately prior to output,
+root.galley.in.detail @SubIndex { in detail }
+is created automatically, not by a definition. Its target is the output
+file, and its object is the entire input, which typically looks like this:
+@ID @OneRow @Code {
+"@PageList"
+"//"
+"@Text {"
+" Body text of the document ..."
+"}"
+}
+where @Code "@PageList" expands to a sequence of pages containing
+@Code "@TextPlace" symbols (see Section {@NumberOf definitions}), and
+@Code "@Text" is a galley:
+@ID @OneRow @Code {
+"def @TextPlace { @Galley }"
+""
+"def @Text into { @TextPlace&&preceding }"
+" right x"
+"{"
+" x"
+"}"
+}
+The spot vacated by a galley -- its invocation point -- becomes a @@Null
+object, so this root galley is effectively @Code "@PageList" alone, as
+required. The @Code "@Text" galley will find its first target preceding
+its invocation point, within {@Code "@PageList"}.
+@PP
+Printing {@PageMark rootg} the root galley on the output file is
+somewhat problematical,
+root.galley.printing @SubIndex { printing of }
+because Lout has no way of knowing how large the paper is. Basser Lout
+simply prints one root galley component per page (except it skips
+components of height zero), and the user is responsible for ensuring
+that each component is page-sized. Gaps between root galley
+components, even unbreakable ones, have no effect on the result.
+@PP
+Basser Lout will promote a component only after any receptive symbols
+components.promotion @SubIndex { promotion of }
+promotion @Index { Promotion of components }
+within it have been replaced, either by galleys or by @@Null, since
+until then the component is not complete. A component which shares a
+mark with following components is held up until they are all complete,
+since until then their width is uncertain.
+@PP
+Consider a page with @Code "@TextPlace" and @Code "@FootSect" receptive
+symbols. The rule just given will prevent the page from being printed
+until @Code "@TextPlace" is replaced by body text, quite rightly; but
+@Code "@FootSect" will also prevent its printing, even when there are no
+footnotes.
+@PP
+Basser Lout is keen to write out pages as soon as possible, to save memory,
+and it cannot afford to wait forever for non-existent footnotes. A variant
+of the galley concept, called a @I {forcing galley},
+forcing.galley @Index { Forcing galley } {@PageMark forcing}
+is introduced to solve this problem. A forcing galley is defined like this:
+@ID @OneRow @Code {
+"def @Text force into { @TextPlace&&preceding }"
+" ..."
+}
+and so on. When such a galley replaces a @@Galley symbol, Lout replaces
+every receptive symbol preceding the @@Galley by @@Null, thus ensuring that
+as soon as text enters a page, for example, everything up to and including
+the preceding page can be printed. This does not take care of the very last
+page, but Basser Lout replaces all receptive symbols by @@Null when it realizes
+that its input has all been read, thus allowing the last page to print.
+@PP
+A forcing galley causes the Third Law to be applied earlier than
+expected, and this creates two problems. First, the replacement by
+@@Null may be premature: a galley may turn up later wanting one of the
+defunct targets. Such galleys (entries in tables of contents are
+typical examples) are copied into the cross reference database and read
+in during the next run just before their targets are closed, and so they
+find their targets in the end. Care must be taken to ensure that
+large galleys such as chapters and sections do not have defunct targets,
+since the cost of copying them to and from the database is unacceptably high.
+@PP
+It is actually an over-simplification to say that these replacements
+occur when the forcing galley replaces its @@Galley. What really happens
+is that from this moment on Lout understands that it has the right to make
+these replacements, and it will do each one at the first moment when not
+doing it would hold things up. So there is a short period of grace when
+galleys, such as the entries in tables of contents just alluded to,
+can sneak into these receptive symbols.
+@PP
+The @Code "into" and @Code "force into" forms are actually just abbreviations
+for the true way that galleys are defined, which
+is by giving the symbol that is to be a galley a parameter or nested
+target.sym @Index { @Code "@Target" symbol }
+definition with the special name {@Code "@Target"}:
+@ID @Code {
+"def @Text"
+" right x"
+"{"
+" def @Target { @TextPlace&&preceding }"
+""
+" x"
+"}"
+}
+A forcing galley is obtained by using @Code "&&&" instead of
+{@Code "&&"}. @Code "@Target" may be an arbitrary object,
+provided that it yields such a cross reference when evaluated. In
+this way, different invocations may have different targets.
+@PP
+The forcing galley effect can be obtained in another way, by replacing
+the @Code "@Galley" symbol to which the galley is attached by
+{@Code "@ForceGalley"}. The advantage of this form is that the galley
+can then be forcing at some places and not at others, using the formula
+@ID @OneRow @Code {
+"def @SomePlace right x"
+"{"
+" x @Case {"
+" noforce @Yield @Galley"
+" force @Yield @ForceGalley"
+" }"
+"}"
+}
+Now a galley may have @Code "@SomePlace" for its target, and if it
+happens to attach to
+@ID @Code "@SomePlace force"
+it will have the effect of a forcing galley, while if it happens to
+attach to
+@ID @Code "@SomePlace noforce"
+it will not.
+@PP
+Although it doesn't matter whether a galley is declared as a forcing
+galley or merely arrives at a {@Code "@ForceGalley"} symbol from the
+point of view of the effect on nearby targets, there is one way in
+which Lout treats the two cases differently. If a forcing galley's
+first component does not fit into the available space, that component
+will be scaled vertically until it does. The rationale for this is
+that forcing galleys are meant to carry the bulk of the document and
+cannot afford to be held up because the user has inadvertently included
+an over-high component, which for all Lout knows to the contrary may
+not fit on any page. If this scaling is not wanted but forcing is,
+the galley may be declared not forcing but all its targets may be set
+to contain {@Code "@ForceGalley"}.
+@PP
+Within a galley, a symbol whose name is @@Enclose has a special
+enclose.sym @Index @@Enclose
+meaning: when components of the galley replace a @@Galley or @@ForceGalley
+symbol, that symbol is first replaced by @@Enclose @@Galley or
+@@Enclose @@ForceGalley. For example,
+@ID @Code {
+"def @Enclose"
+" right x"
+"{"
+" @Box x"
+"}"
+}
+within some galley definition causes each @@Galley or @@ForceGalley
+symbol that receives components of the galley to be replaced by
+{@Code "@Box @Galley"} or {@Code "@Box @ForceGalley"}, assuming an
+appropriate definition of @Code "@Box". This is useful, for example,
+when producing multi-page boxed displays, figures, and tables.
+@PP
+An @@Enclose symbol may have only one parameter, which must be a
+right parameter. It would not make sense to allow more parameters,
+since there is no suitable value to assign to them. However, the
+@@Enclose symbol may contain inner definitions, and it may make use
+of any symbol that is available at that point, in the usual way.
+@PP
+A @Code "following" galley may fail to find a first target lying in a
+following component of the same galley as its invocation point. This is
+a deficiency of Basser Lout, which occurs if the target has not been
+read from input at the time the galley tries to find it. A workaround
+is to use a @Code "preceding" galley instead, defined like this:
+@ID @OneRow @Code {
+"def @AGalley into { @AGalleyPlace&&preceding }"
+" right @Body"
+"{"
+" //1.1b"
+" @Body"
+"}"
+}
+and invoked like this:
+@ID @OneRow @Code {
+"@AGalleyPlace | @AGalley { content of galley }"
+"//"
+"..."
+"@AGalleyPlace"
+}
+The first @Code "@AGalleyPlace" receives only the initial empty object,
+since the @Code "//1.1b" forces a split; and the Second Law puts Basser
+Lout on the right track thereafter.
+@End @Section
diff --git a/doc/expert/det_hori b/doc/expert/det_hori
new file mode 100644
index 0000000..ad81dc4
--- /dev/null
+++ b/doc/expert/det_hori
@@ -0,0 +1,91 @@
+@Section
+ @Title { Horizontal galleys }
+ @Tag { horizontal }
+@Begin
+@PP
+All the galleys so far have been @I { vertical galleys }: galleys
+whose components are separated by vertical concatenation symbols. There
+are also horizontal galleys, whose components are separated by the
+horizontal concatenation operator @Code "&" (or equivalently, by
+spaces). These work in the same way as vertical galleys, except for
+the change of direction. For example, the following defines the
+equivalent of an ordinary outdented paragraph, except that an option
+is provided for varying the size of the outdent:
+@ID @Code {
+"def @OutdentPar"
+" named outdent { 2f }"
+" right x"
+"{"
+" def @ParPlace { @Galley }"
+""
+" def @LineList"
+" {"
+" outdent @Wide {} | @PAdjust @ParPlace"
+" //1vx @LineList"
+" }"
+""
+" def @ParGalley force horizontally into { @ParPlace&&preceding }"
+" right x"
+" {"
+" x"
+" }"
+""
+" @PAdjust @ParPlace"
+" // @ParGalley { x &1rt }"
+" //1vx @LineList"
+"}"
+}
+Notice the use of @Code "&1rt" to cancel the effect of @Code "@PAdjust"
+on the last line of the paragraph. This definition has a problem in
+that there will be a concluding unexpanded @Code "@LineList" symbol
+which will hold up promotion of the enclosing galley; this problem
+may be fixed by the same method used to end a list.
+@PP
+In an ideal world, there would be nothing further to say about horizontal
+galleys. However there are a few differences which arise from various
+practical considerations and limitations. Perhaps some day a more
+perfect symmetry will be implemented.
+@PP
+Each vertical galley has a fixed finite width, and every component is
+broken to that width. This is needed basically to trigger paragraph
+breaking. However, there is no equivalent of paragraph breaking in
+the vertical direction, so horizontal galleys do not have any particular
+fixed height. Instead, each component has its own individual height.
+@PP
+When two objects are separated by {@Code "/"}, they
+are assigned the same width (Section {@NumberOf targets}), and
+this holds true even if the two objects are subsequently separated
+by being promoted into different targets. For example, two aligned
+equations will have the same width, and hence their alignment will be
+preserved, even if they appear in different columns or pages. However,
+even though @Code "&" aligns the marks of its two parameters, it does
+not assign them a common height. This means that the height of any
+component of a horizontal galley promoted into one target does not
+affect the height consumed by the components promoted into any other
+target. The other horizontal concatenation operator, {@Code "|"},
+does assign a common height to its two parameters; but sequences of
+objects separated by this operator cannot be the components of a
+horizontal galley.
+@PP
+Lout is able to read vertical galleys one paragraph at a time; in this
+way it processes the document in small chunks, never holding more than
+a few pages in memory at any time. However, horizontal galleys are
+always read in completely, so they should not be extremely long.
+@PP
+In principle Lout should be able to hyphenate the components of
+horizontal galleys when they are simple words, but this is not
+implemented at present.
+@PP
+In an ideal world, every paragraph would be treated as a horizontal
+galley. However, to do so in practice would be too slow and would
+lead to excessive clumsiness in notation, so at present Lout has
+two competing mechanisms in this area: the built-in paragraph
+breaker with its limited set of options as given under the @Code
+"@Break" operator, and horizontal galleys. As the example above
+shows, horizontal galleys are in principle capable of implementing
+many more paragraph styles than the built-in paragraph breaker
+could ever hope to do. The recommended practical strategy is to use
+the built-in paragraph breaker most of the time, and switch to
+horizontal galleys only for occasional tricks, such as paragraphs
+with drop capitals, circular outlines, etc.
+@End @Section
diff --git a/doc/expert/det_lexi b/doc/expert/det_lexi
new file mode 100644
index 0000000..e0ad9f1
--- /dev/null
+++ b/doc/expert/det_lexi
@@ -0,0 +1,253 @@
+@Section
+ @Tag { lexical }
+ @Title { Lexical structure (words, spaces, symbols) and macros }
+@Begin
+@PP
+The input to Lout consists of a sequence of @I {textual units},
+textual.unit @Index {Textual unit }
+which may be
+either {@I{white spaces}},
+@I identifiers,
+@I delimiters,
+or
+@I {literal words}. Each
+is a sequence of @I characters chosen from:
+letter @Index { Letter character }
+other @Index { Other character }
+quote @Index { Quote character }
+escape @Index { Escape character }
+comment.char @Index { Comment character }
+underscore.char @Index { Underscore character }
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa A { letter } B { @Code "@ab-zAB-Z_" }
+@Rowa A { white space } B { @I { space formfeed tab newline } }
+@Rowa A { quote } B { @Code "\"" }
+@Rowa A { escape } B { @Code "\\" }
+@Rowa A { comment } B { @Code "#" }
+@Rowa A { other } B { @Code "!$%&'()*+,-./0123456789:;<=>?[]^`{|}~" }
+}
+Notice that @Code "@" and @Code "_" are classed as letters. Basser
+Lout accepts the accented letters of the ISO-LATIN-1 character set
+(depending on how it is installed), and these are also classed as
+letters. The ten digits are classed as `other' characters, and in
+fact the `other' class contains all 8-bit characters (except octal 0)
+not assigned to previous classes.
+@PP
+A @I {white space} is a sequence of one or more white space characters.
+white.space @Index { White space }
+formfeed @Index { Formfeed }
+space.f @Index { Space }
+ Lout treats the formfeed character exactly like the space character;
+it is useful for getting page breaks when printing Lout source code.
+@PP
+A @I delimiter is a sequence of one or more `other' characters which
+delimiter @Index { Delimiter }
+is the name of a symbol. For example, @Code "{" and @Code "//" are
+delimiters. When defining a delimiter, the name must be enclosed
+in quotes:
+@ID @Code {
+"def \"^\" { {} ^& {} }"
+}
+but quotes are not used when the delimiter is invoked. A delimiter may
+have delimiters and any other characters adjacent, whereas identifiers
+may not be adjacent to letters or other identifiers. The complete list
+of predefined delimiters is
+@ID @OneRow @Code {
+{
+ "/"
+ @JL "//"
+ @JL "^/"
+ @JL "^//"
+} |2.2cx {
+ "|"
+ @JL "||"
+ @JL "^|"
+ @JL "^||"
+} |2.2cx {
+ "&"
+ @JL "^&"
+} |2.2cx {
+ "&&"
+ @JL "{"
+ @JL "}"
+}
+}
+A longer delimiter like @Code "<=" will be recognised in
+preference to a shorter one like {@Code "<"}.
+@PP
+An @I identifier is a sequence of one or more letters which is the name of a
+identifier @Index { Identifier }
+symbol. It is conventional but not essential to begin identifiers with
+{@Code "@"}; Basser Lout will print a warning message if it finds an
+unquoted literal word (see below) beginning with {@Code "@"}, since such
+words are usually misspelt identifiers. The ten digits are not letters
+and may not appear in identifiers; and although the underscore character
+is a letter and may be used in identifiers, it is not conventional to
+do so. The complete list of predefined identifiers is
+@ID @OneRow @Code {
+{ "@BackEnd"
+ @JL "@Background"
+ @JL "@Begin"
+ @JL "@Break"
+ @JL "@Case"
+ @JL "@Common"
+ @JL "@Char"
+ @JL "@CurrFace"
+ @JL "@CurrFamily"
+ @JL "@CurrLang"
+ @JL "@Database"
+ @JL "@End"
+ @JL "@Enclose"
+ @JL "@Filter"
+ @JL "@FilterErr"
+ @JL "@FilterIn"
+ @JL "@FilterOut"
+ @JL "@Font"
+ @JL "@ForceGalley"
+ @JL "@Galley"
+ @JL "@Graphic"
+ @JL "@HAdjust"
+ @JL "@HContract"
+ @JL "@HCover"
+ @JL "@HExpand"
+ @JL "@High"
+ @JL "@HLimited"
+ @JL "@HScale"
+ @JL "@HShift"
+ @JL "@HSpan"
+} |4.4cx {
+ "@Include"
+ @JL "@IncludeGraphic"
+ @JL "@Insert"
+ @JL "@KernShrink"
+ @JL "@Key"
+ @JL "@Language"
+ @JL "@LClos"
+ @JL "@LEnv"
+ @JL "@LInput"
+ @JL "@LVis"
+ @JL "@LUse"
+ @JL "@Meld"
+ @JL "@Merge"
+ @JL "@Minus"
+ @JL "@Moment"
+ @JL "@Next"
+ @JL "@NotRevealed"
+ @JL "@Null"
+ @JL "@OneCol"
+ @JL "@OneOf"
+ @JL "@OneRow"
+ @JL "@Open"
+ @JL "@Optimize"
+ @JL "@PAdjust"
+ @JL "@PageLabel"
+ @JL "@PlainGraphic"
+ @JL "@Plus"
+ @JL "@PrependGraphic"
+ @JL "@RawVerbatim"
+ @JL "@Rotate"
+} |4.4cx {
+ "@Rump"
+ @JL "@Scale"
+ @JL "@SetColor"
+ @JL "@SetColour"
+ @JL "@Space"
+ @JL "@StartHSpan"
+ @JL "@StartHVSpan"
+ @JL "@StartVSpan"
+ @JL "@SysDatabase"
+ @JL "@SysInclude"
+ @JL "@SysIncludeGraphic"
+ @JL "@SysPrependGraphic"
+ @JL "@Tag"
+ @JL "@Tagged"
+ @JL "@Target"
+ @JL "@Underline"
+ @JL "@Use"
+ @JL "@VAdjust"
+ @JL "@VContract"
+ @JL "@VCover"
+ @JL "@Verbatim"
+ @JL "@VExpand"
+ @JL "@VLimited"
+ @JL "@VScale"
+ @JL "@VShift"
+ @JL "@VSpan"
+ @JL "@Wide"
+ @JL "@Yield"
+ @JL "@YUnit"
+ @JL "@ZUnit"
+}
+}
+plus the names of the parameters of @@Moment. The symbols @@LClos, @@LEnv,
+lclos @Index { @@LClos symbol }
+lenv @Index { @@LEnv symbol }
+linput @Index { @@LInput symbol }
+lvis @Index { @@LVis symbol }
+luse @Index { @@LUse symbol }
+@@LInput, @@LVis and @@LUse appear in cross reference databases generated
+by Lout and are not for use elsewhere.
+@PP
+A sequence of characters which is neither a white space, an identifier, nor a
+delimiter, is by default a @I {literal word}, which means that it will
+word @Index { Word }
+literal.word @Index { Literal word }
+quoted.word @Index { Quoted word }
+pass through Lout unchanged. An arbitrary sequence of characters
+enclosed in double quotes, for example @Code "\"{ }\"", is also a
+literal word. Space characters may be included, but not tabs or
+newlines. There are special character sequences, used only between
+quotes, for obtaining otherwise inaccessible characters:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa A { @Code "\\\"" } B { produces @Code "\"" }
+@Rowa A { @Code "\\\\" } B { "\\" }
+@Rowa A { @Code "\\ddd" } B { the character whose ASCII code is }
+@Rowa A { } B { the up to three digit octal number {@Code ddd} }
+}
+So, for example, @Code "\"\\\"@PP\\\"\"" produces {@Code "\"@PP\""}.
+@PP
+When the comment character
+comment @Index { Comment }
+@Code "#" is encountered, everything from
+that point to the end of the line is ignored. This is useful for
+including reminders to oneself, like this:
+@ID @OneRow @Code {
+"# Lout user manual"
+"# J. Kingston, June 1989"
+}
+for temporarily deleting parts of the document, and so on.
+@PP
+@I Macros
+macro @Index { Macro }
+provide a means of defining symbols which stand for a
+sequence of textual units rather than an object. For example, the macro
+definition
+@ID @Code {
+"macro @PP { //1.3vx 2.0f @Wide &0i }"
+}
+makes Lout replace the symbol @Code "@PP" by the given textual units
+before assembling its input into objects. A similar macro to this
+one is used to separate the paragraphs of the present document. The
+enclosing braces and any spaces adjacent to them are dropped, which can
+be a problem: @Code "@PP2i" has result {@Code "//1.3vx 2.0f @Wide &0i2i"}
+which is erroneous.
+@PP
+The meaning of symbols used within the body of a macro is determined by
+where the macro is defined, not by where it is used. Due to implementation
+problems, @@Open symbols will not work within macros. Named and body
+parameters will work if the symbol that they are parameters of is also
+present. There is no way to get a left or right brace into the body of
+a macro without the matching brace.
+@PP
+Macros may be nested within other definitions and exported, but they may
+not be parameters. They may not have parameters or nested definitions
+of their own, and consequently a preceding @Code export clause (Section
+{@NumberOf visibility}) would be pointless; however, an @Code import
+clause is permitted.
+@End @Section
diff --git a/doc/expert/det_name b/doc/expert/det_name
new file mode 100644
index 0000000..ae3dac2
--- /dev/null
+++ b/doc/expert/det_name
@@ -0,0 +1,90 @@
+@Section
+ @Tag { named }
+ @Title { Named parameters }
+@Begin
+@PP
+In addition to left and right (or body) parameters, a symbol may have
+any number of {@I {named parameters}}:
+parameter.named @SubIndex { @Code named parameter }
+named.par @Index { @Code named parameter }
+@ID @OneRow @Code {
+"def @Chapter"
+" named @Tag {}"
+" named @Title {}"
+" right x"
+"{"
+" ..."
+"}"
+}
+Their definitions appear in between those of any left and right
+parameters, and each is followed by a @I {default value} between
+default @Index { Default value of parameter }
+braces. When @Code "@Chapter" is invoked, its named parameters are
+given values in the following way:
+@ID @OneRow @Code {
+"@Chapter"
+" @Tag { intro }"
+" @Title { Introduction }"
+"{"
+" ..."
+"}"
+}
+That is, a list of named parameters appears immediately following the
+symbol, each with its value enclosed in braces. Any right parameter
+follows after them. They do not have to appear in the order they were
+defined, and they can even be omitted altogether, in which case the
+default value from the definition is used instead.
+@PP
+If the keyword @Code "compulsory" appears after @Code "named" and
+before the parameter's name, Lout will print a warning message whenever
+this parameter is missing. However it will still use the default value
+as just described.
+@PP
+A named @Code "@Tag" parameter
+tag.par @Index { @Code "@Tag" parameter, default value of }
+does not take its default value from the definition; instead, if a default
+value is needed, Lout invents a simple word which differs from every other
+tag. This is important, for example, in the production of numbered
+chapters and sections (Section {@NumberOf chapters}). The same thing occurs
+if there is a @Code "@Tag" parameter but its value is the empty object: the
+value will be replaced by an invented one.
+@PP
+Named parameters may have parameters, {@PageMark strange} as in the
+following definition:
+@ID @OneRow @Code {
+"def @Strange"
+" named @Format right @Val { [@Val] }"
+" right x"
+"{"
+" @Format x"
+"}"
+}
+The named parameter @Code "@Format" has right parameter {@Code "@Val"},
+and the default value of @Code "@Format" is this parameter enclosed in
+brackets. When @Code "@Format" is invoked it must be supplied with
+a right parameter, which will replace {@Code "@Val"}. Thus,
+@ID @Code {
+"@Strange 27"
+}
+equals @Code "@Format 27" and so has result
+@ID {
+@Strange 27
+}
+The @Code "@Format" symbol is like a definition with parameters whose
+body can be changed:
+@ID @OneRow @Code {
+"@Strange"
+" @Format { Slope @Font @Val. }"
+"27"
+}
+still equals {@Code "@Format 27"}, but this time the result is
+@ID {
+@Strange
+ @Format { Slope @Font @Val. }
+27
+}
+In practice, examples of named parameters with parameters all have this
+flavour of format being separated from content; running headers (Section
+{@NumberOf pagelayout}) and printing styles for bibliographies
+(Section {@NumberOf biblio}) are two major ones.
+@End @Section
diff --git a/doc/expert/det_opti b/doc/expert/det_opti
new file mode 100644
index 0000000..981b468
--- /dev/null
+++ b/doc/expert/det_opti
@@ -0,0 +1,39 @@
+@Section
+ @Title { Optimal galley breaking }
+ @Tag { optimal }
+@Begin
+@PP
+As explained in Section {@NumberOf targets}, the components of a galley
+optimal.gall @Index { Optimal galley breaking }
+are promoted one by one into a target. When space runs out there, the
+galley searches for a new target and promotion resumes.
+@PP
+This process is exactly analogous to placing words onto a line until
+space runs out, then moving to another line. But, as we know, that
+simple method is inferior to the optimal paragraph breaking used by
+Lout (copied from the @TeX system), which examines the entire paragraph
+and determines the most even assignment of words to lines.
+@PP
+Lout offers @I { optimal galley breaking }, the equivalent for galleys
+of optimal paragraph breaking. Optimal galley breaking can reduce the
+size of ugly blank spaces at the bottom of pages preceding large
+unbreakable displays, sometimes quite dramatically.
+@PP
+Optimal galley breaking is applied to each galley, horizontal or
+vertical, that possesses a parameter or nested symbol called
+@Code "@Optimize" whose value is {@Code Yes}. Like cross referencing,
+optimize.sym @Index { @Code "@Optimize" symbol }
+it takes two runs to have effect. On the first run, Lout records the
+sizes of the galley's components and gaps, and also the space available
+at each of its targets. At end of run this information is used to find
+an optimal break, which is written to the cross-reference database. On
+the second run, the optimal break is retrieved and used.
+@PP
+Considering that this process must cope with floating figures,
+new page and conditional new page symbols, breaks for new chapters, and
+evolving documents, it is surprisingly robust. If it does go badly
+wrong, removing file @Code "lout.li" then running Lout twice without
+changing the document may solve the problem. However, cases are known
+where the optimization never converges. These are usually related to
+figures and footnotes whose anchor points fall near page boundaries.
+@End @Section
diff --git a/doc/expert/det_prec b/doc/expert/det_prec
new file mode 100644
index 0000000..c2dd72d
--- /dev/null
+++ b/doc/expert/det_prec
@@ -0,0 +1,103 @@
+@Section
+ @Title { Precedence and associativity of symbols }
+ @Tag { precedence }
+@Begin
+@PP
+Every symbol in Lout has a {@I precedence},
+preceden @Index { Precedence }
+which is a positive whole number. When two symbols compete for an object,
+the one with the higher precedence wins it. For example,
+@ID @Code {
+"a | b / c"
+}
+is equivalent to @OneCol @Code { "{" a "|" b "}" "/" c } rather than
+{@OneCol @Code { a "|" "{" b "/" c "}"} }, because @Code "|" has higher
+precedence than @Code "/" and thus wins the {@Code b}.
+@PP
+When the two competing symbols have equal precedence, Lout applies a
+second rule. Each symbol is either @I left-associative or
+associativity @Index { Associativity }
+{@I right-associative}. The value of @OneCol @Code { a op1 b op2 c} is taken
+to be @OneCol @Code { "{" a op1 b "}" op2 c } if the symbols are both
+left-associative, and @OneCol @Code "a op1 { b op2 c }" if they are
+right-associative. In cases not covered by these two rules, use braces.
+@PP
+It sometimes happens that the result is the same regardless of how the
+expression is grouped. For example, @OneCol @Code { "{" a "|" b "}" "|" c }
+and @OneCol @Code { a "|" "{" b "|" c "}" } are always the same, for any
+combination of objects, gaps, and variants of {@Code "|"}. In such cases
+the symbols are said to be {@I associative}, and we can confidently omit
+the braces.
+@PP
+User-defined symbols may be given a precedence and associativity:
+@ID @OneRow @Code {
+"def @Super"
+" precedence 50"
+" associativity right"
+" left x"
+" right y"
+"{"
+" @OneRow { | -2p @Font y ^/0.5fk x }"
+"}"
+}
+They come just after any @Code into clause and before any parameter
+definitions. The precedence may be
+any whole number between 10 and 100, and if omitted is assigned the
+value 100. The higher the number, the higher the precedence. The
+associativity may be @Code left or {@Code right}, and if omitted
+defaults to {@Code right}. Lout's symbols have the following
+precedences and associativities:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @CC A ! @Col @CC B ! @Col C }
+{
+@Rowa
+ A { Precedence }
+ B { Associativity }
+ C { Symbols }
+@Rowa
+@Rowa
+ A { 5 }
+ B { associative }
+ C { @Code "/ ^/ // ^//" }
+@Rowa
+ A { 6 }
+ B { associative }
+ C { @Code "| ^| || ^||" }
+@Rowa
+ A { 7 }
+ B { associative }
+ C { @Code "& ^&" }
+@Rowa
+ A { 7 }
+ B { associative }
+ C { @Code "&" in the form of one or more white space characters }
+@Rowa
+ A { 10-100 }
+ B { @Code left or @Code right }
+ C { user-defined symbols }
+@Rowa
+ A { 100 }
+ B { @Code right }
+ C { @@Wide, @@High, @@Graphic, etc. }
+@Rowa
+ A { 101 }
+ B { - }
+ C { @Code "&&" }
+@Rowa
+ A { 102 }
+ B { associative }
+ C { @Code "&" in the form of 0 spaces }
+@Rowa
+ A { 103 }
+ B { - }
+ C { Body parameters and right parameters of @@Open }
+}
+Actually the precedence of juxtaposition (two objects separated
+by zero spaces) is a little more complicated. If either of the
+two objects is enclosed in braces, the precedence is 7 as for
+one or more spaces. If neither object is enclosed in braces,
+the precedence is 102 as shown above. This complicated rule
+seems to accord better with what people expect and need in
+practice than a pure precedence rule can do.
+@End @Section
diff --git a/doc/expert/det_size b/doc/expert/det_size
new file mode 100644
index 0000000..aea894b
--- /dev/null
+++ b/doc/expert/det_size
@@ -0,0 +1,145 @@
+@Section
+ @Title { The style and size of objects }
+ @Tag { size }
+@Begin
+@PP
+This section explains how Lout determines the style and size of each
+object. Together, these attributes determine the object's final
+appearance in the output.
+style @Index { Style of an object }
+@PP
+The style of an object comprises the following:
+@BulletList
+@ListItem { Which font family, face and size to use (also defining the
+@Code f unit); }
+@ListItem { Whether small capitals are in effect or not; }
+@ListItem { What gap to replace a single space between two objects by (also
+defining the @Code s unit); }
+@ListItem { The interpretation to place on white space separating
+two objects ({@Code lout}, {@Code compress}, {@Code separate}, {@Code troff},
+or {@Code tex} as in Section {@NumberOf space}); }
+@ListItem { The current value of the @Code y and @Code z units of
+measurement (Section {@NumberOf yunit}); }
+@ListItem { The kind of paragraph breaking to employ ({@Code adjust},
+{@Code ragged}, etc.) }
+@ListItem { What gap to insert between the lines of paragraphs
+(also defining the @Code v unit); }
+@ListItem { Whether to permit hyphenation or not; }
+@ListItem { What colour the object is to appear in; }
+@ListItem { The language of the object; }
+@ListItem { Whether @@VAdjust, @@HAdjust and @@PAdjust are in effect. }
+@EndList
+The style of an object depends on where it appears in the final
+document. For example, the style of a parameter depends on where it is
+used; the style of a galley is the style of the first target that it
+attempts to attach itself to. Of course, the style of any object can be
+changed by using the @@Font, @@Break, @@Space, @@SetColour or
+@@SetColor, and @@Language symbols.
+@PP
+There are no standard default values for style, except that small capitals
+are initially off, the interpretation of white space is initially {@Code
+lout}, and the values of the @Code y and @Code z units are zero. Therefore
+one must ensure that the root galley or each of its components is enclosed
+in @@Font, @@Break, @@SetColour or @@SetColor, and @@Language symbols. From
+there the style is passed to incoming galleys and the objects within
+them. Enclosure in @@Space is not required because the @Code "s" unit
+is also set by @@Font (Section {@NumberOf space}).
+@PP
+width. @Index { Width of an object }
+height. @Index { Height of an object }
+size. @Index { Size of an object }
+The remainder of this section explains how the size of each object (its
+width and height on the printed page) is determined. We will treat width
+only, since height is determined in exactly the same way, except that the
+complications introduced by paragraph breaking are absent.
+@PP
+With three exceptions (see below), the width of an object is as large as
+it possibly could be without violating a @@Wide symbol or intruding into
+the space occupied by neighbouring gaps or objects. As an aid to
+investigating this rule, we will use the definition
+@ID @OneRow @Code {
+"def @TightBox right x"
+"{"
+" \"0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke\""
+" @Graphic x"
+"}"
+}
+which draws a box around the boundary of its right parameter (Section
+{@NumberOf graphic}) with no margin. The result of
+@ID @Code {
+"5c @Wide @TightBox metempsychosis"
+}
+is
+@ID {
+5c @Wide @TightBox metempsychosis
+}
+The widest that @Code "@TightBox metempsychosis" could possibly be is five
+centimetres, and accordingly that is its width. The same applies to
+{@Code metempsychosis}, which is five centimetres wide as well. Note
+carefully that there is no object in this example whose width is equal
+to the sum of the widths of the letters of {@Code metempsychosis}.
+@PP
+The first of the three exceptions to the `as wide as possible' rule is the
+@@HContract symbol, which causes the width of its right parameter to be
+reduced to a reasonable minimum (a formal definition will not be attempted):
+@ID @OneRow @Code {
+"5c @Wide @HContract @TightBox metempsychosis"
+}
+produces
+@ID {
+5c @Wide @HContract @TightBox metempsychosis
+}
+The object @Code "@HContract @TightBox metempsychosis" is still five centimetres
+wide, but the object @Code "@TightBox metempsychosis" has been reduced.
+@PP
+The second of the three exceptions is the horizontal concatenation symbol
+@Code "|" (and also {@Code "&"}). Consider this example:
+@ID @OneRow @Code {
+"5c @Wide @TightBox { A |1c B |1c C }"
+}
+As usual, the right parameter of @@Wide is five centimetres wide, and
+the result looks like this:
+@ID {
+5c @Wide @TightBox { A |1c B |1c C }
+}
+Lout has to apportion the size minus inter-column gaps among the three
+columns.
+@PP
+If the columns are wide enough to require paragraph breaking, Lout will
+assign sizes to the columns in such a way as to leave narrow columns
+unbroken and break wider columns to equal width, occupying the full
+size. Otherwise, paragraph breaking is not required, and each column
+will be assigned a reasonable minimum size in the manner of @@HContract,
+except that the last column receives all the leftover width. For example,
+@ID @OneRow @Code {
+"5c @Wide { @TightBox A |1c @TightBox B |1c @TightBox C }"
+}
+has result
+@ID {
+5c @Wide { @TightBox A |1c @TightBox B |1c @TightBox C }
+}
+If it is desired that the leftover width remain unused, rather than
+going into the last column, an empty column can be appended, or the last
+column can be enclosed in @@HContract. Two other ways to apportion the
+leftover width are provided by the @@HExpand and @@HAdjust symbols
+(Sections {@NumberOf hexpand} and {@NumberOf hadjust}).
+@PP
+The third and final exception to the `as wide as possible' rule concerns
+the components of the root galley. Each is considered to be enclosed
+root.galley.size @SubIndex { size of components of }
+in @@HContract and @@VContract symbols.
+@PP
+Up to this point we have treated width as a single quantity, but of
+course it has two parts: width to left and right of the mark. The
+`as wide as possible' rule applies to both directions:
+@ID @Code {
+"@HContract { @TightBox 953^.05 /0.5c @TightBox 2^.8286 }"
+}
+has result
+@ID {
+@HContract { @TightBox 953^.05 /0.5c @TightBox 2^.8286 }
+}
+Leftover width usually goes to the right, as we have seen, but here some
+width was available only to the left of {@Code "2.8286"} owing to the
+column mark alignment.
+@End @Section
diff --git a/doc/expert/det_sort b/doc/expert/det_sort
new file mode 100644
index 0000000..ab3ebeb
--- /dev/null
+++ b/doc/expert/det_sort
@@ -0,0 +1,83 @@
+@Section
+ @Title { Sorted galleys }
+ @Tag { sorted }
+@Begin
+@PP
+When footnotes are placed at the bottom of a page, they appear there in
+first come, first served order. To make galleys appear in sorted order, as
+sorted.galley @Index { Sorted galleys }
+is needed in bibliographies and indexes, a parameter or nested definition
+with the special name @@Key
+key. @Index { @@Key parameter }
+is added to the galley definition, like this:
+@ID @OneRow @Code {
+"def @IndexEntry into { @IndexPlace&&following }"
+" left @Key"
+" right x"
+"{ x }"
+}
+@@Key must be set to a simple word, or several words with nothing more
+complex than font changes within them, when the galley is invoked:
+@ID @Code {
+"{ cities compare } @IndexEntry { cities, comparison of, 27 }"
+}
+and this key is used to sort the galleys.
+@PP
+If several sorted galleys with the same key are sent to the same place,
+the default behaviour is to print only the first of them; the assumption
+is that the others are probably unwanted duplicates. This holds good
+for sorted reference lists, for example: we don't want two copies of
+a reference just because we happen to cite it twice. However, the
+other common example of sorted galleys, index entries, requires something
+different: @I merged galleys.
+@PP
+Suppose that at some point of the document we insert the index entry
+@ID @Code "aardvarks @IndexEntry { Aardvarks, 23 }"
+while at another point we insert
+@ID @Code "aardvarks @IndexEntry { Aardvarks, 359 }"
+How the page numbers are worked out is not relevant here. Clearly we
+would like to merge these two entries into one entry that comes out as
+@ID "Aardvarks, 23, 359"
+The following definition will merge two objects in this way:
+@ID @OneRow @Code {
+"def @Merge left x right y"
+"{"
+" {x @Rump y} @Case"
+" {"
+" \"\" @Yield x"
+" else @Yield { x, x @Rump y }"
+" }"
+"}"
+}
+The @@Rump symbol is the subject of Section {@NumberOf rump}; this
+says `if the two things to be merged are equal, the result is one
+of them; otherwise it is the first followed by a comma and space
+and then the rump of the second.' Our only problem is that this
+symbol has to be applied to two galleys from widely separated
+parts of the document.
+@PP
+Lout makes this possible by the following special rule: if a
+sorted galley contains a nested definition of a symbol whose name
+is @@Merge (@@Merge must have just two parameters, left and right),
+merge. @Index { @@Merge symbol }
+and if that sorted galley is preceded in the list of
+sorted galleys destined for some target by another sorted galley
+with the same key, then rather than being discarded, the second
+galley is merged into the first using the @@Merge symbol.
+@PP
+The natural thing to do when more than two galleys have the same
+key is to merge the first two, then merge the third with the
+result of that, then the fourth with the result of that, and
+so on. For efficiency reasons beyond our scope here, Lout does
+the merging in a different order: it merges @Eq { n } galleys
+by merging the first @Eq { lfloor n slash 2 rfloor } together,
+then the last @Eq { lceil n slash 2 rceil } together, then
+merging the result. Of course, if the @@Merge symbol is
+associative this has the same effect. The @@Merge symbol above
+is not strictly associative, but it is close enough in practice. The
+total time it takes to merge @Eq { n } galleys with equal keys
+is @Eq { O ( n sup 2 ) } or somewhat higher (but always polynomial
+in @Eq { n }) depending on how many times the parameters occur
+within the body of @@Merge; to do it in the natural linear order
+would take Lout exponential time.
+@End @Section
diff --git a/doc/expert/det_visi b/doc/expert/det_visi
new file mode 100644
index 0000000..870f781
--- /dev/null
+++ b/doc/expert/det_visi
@@ -0,0 +1,181 @@
+@Section
+ @Tag { visibility }
+ @Title { Nested definitions, body parameters, extend, import, and export }
+@Begin
+@PP
+A definition may contain
+nested.def @Index { Nested definitions }
+other definitions at the beginning of its body:
+@ID @OneRow @Code {
+"def @NineSquare"
+" right x"
+"{"
+" def @Three { x |0.2i x |0.2i x }"
+""
+" @Three /0.2i @Three /0.2i @Three"
+"}"
+}
+A parameter like @Code x may be invoked anywhere within the body of the
+symbol it is a parameter of, including within nested definitions. A
+nested symbol like @Code "@Three" may be invoked anywhere from the
+beginning of its own body to the end of the body of the symbol it is
+defined within. So, assuming an appropriate definition of
+{@Code "@Box"},
+@ID @Code {
+"@NineSquare @Box"
+}
+has result
+@ID @Fig {
+@NineSquare @Box { 0.2i @Wide 0.2i @High }
+}
+Nested definitions may themselves contain nested definitions, to
+arbitrary depth.
+@PP
+There are three special features which permit a nested symbol or
+parameter to be invoked outside its normal range; that is, outside the
+body of the enclosing symbol. The first and simplest of these features
+is the {@I {body parameter}},
+parameter.body @SubIndex { @Code body parameter }
+body.par @Index { @Code body parameter }
+an alternative form of right parameter. The Eq equation formatting
+package @Cite { $kingston1995lout.user, Chapter 7 } is a classic example
+of the use of a body parameter. In outline, it looks like this:
+@ID @OneRow @Code {
+"export \"+\" sup over"
+""
+"def @Eq"
+" body x"
+"{"
+" def \"+\" ..."
+" def sup ..."
+" def over ..."
+" ..."
+""
+" Slope @Font x"
+"}"
+}
+First we list those nested symbols and parameters that we intend to
+refer to outside the body of @Code "@Eq" in an @Code export clause,
+export @Index { @Code export clause }
+preceding the definition as shown. Only exported symbols may be
+invoked outside the body of {@Code "@Eq"}. The body parameter is like a
+right parameter except that the exported symbols are visible within it:
+@ID @Code {
+"@Eq { {x sup 2 + y sup 2} over 2 }"
+}
+calls on the nested definitions of @Code "@Eq" to produce the result
+@ID {
+@Eq { {x sup 2 + y sup 2} over 2 }
+}
+The body parameter's value must be enclosed in braces. The term `body
+parameter' is a reminder that the value is interpreted as if it was
+within the body of the symbol.
+@PP
+A body parameter may not be exported, and in fact a body parameter may
+be invoked only within the body of the enclosing symbol, not within
+any nested definitions. For example, @Code "x" above may not be invoked
+within {@Code "sup"}. This restriction is needed to avoid the
+possibility of recursion, when the actual body parameter invokes an
+exported nested definition which invokes the body parameter, etc.
+@PP
+The second place where exported symbols may be used is in the right
+parameter of the @@Open symbol, and following its alternative form,
+@@Use (Section {@NumberOf open}).
+@PP
+Exported nested symbols and parameters may be made visible within
+a subsequent definition or macro by preceding it with an @Code import
+import @Index { @Code import clause }
+clause, like this:
+@ID @OneRow @Code {
+"import @Eq"
+"def pythag { sqrt { x sup 2 + y sup 2 } }"
+}
+Note however that @Code pythag can only be used with some invocation of
+{@Code "@Eq"}: within the body parameter of an invocation of {@Code "@Eq"},
+within the right parameter of an {@Code "@Eq&&tag @Open"}, or following
+a {@Code "@Use { @Eq ... }"}. There may be several symbols in the
+@Code import clause.
+@PP
+In a similar way to {@Code "import"}, a definition may be preceded
+by {@Code "extend"} followed by a symbol name:
+@ID @OneRow @Code {
+"extend @Eq"
+"def pythag { sqrt { x sup 2 + y sup 2 } }"
+}
+The effect of this is just as though the definition of @Code "pythag"
+had occurred directly after the existing definitions within
+{@Code "@Eq"}, with {@Code "pythag"} added to {@Code "@Eq"}'s
+export list. This is useful for extending the capabilities of a
+package of definitions like @Code "@Eq" without modifying its source
+file. The essential differences to @Code "import" are that all the
+symbols of @Code "@Eq" become visible within {@Code "pythag"}, not
+just the exported ones, and only one symbol may follow the
+@Code "extend" keyword.
+@PP
+Actually, more than one symbol may follow {@Code extend}, but this
+usage indicates a `path name' of the symbol. For example,
+@ID @OneRow @Code {
+"extend @DocumentLayout @ReportLayout"
+"def @Keywords ..."
+}
+causes the definition of @Code "@Keywords" to occur directly after
+the existing definitions of {@Code "@ReportLayout"}, which itself
+lies within {@Code "@DocumentLayout"}.
+@PP
+A named parameter may also be preceded by an @Code "import" clause.
+As usual, the meaning is that the visible local definitions of
+the import symbol(s) are visible within the body (the default
+value) of the named parameter. But furthermore, those symbols
+will be visible within all invocations of the parameter. For
+example, suppose we define
+@ID @OneRow @Code {
+"def @Diag"
+" import @Algebra named linewidth { 1p }"
+" import @Algebra named dashlength { 2p }"
+" ..."
+}
+Then, if @Code "@Algebra" exports symbols {@Code "+"},
+{@Code "-"}, and so on, we may write
+@ID @OneRow @Code {
+"@Diag"
+" linewidth { 1f - 2p }"
+" dashlength { 1f + 2p }"
+}
+using the symbols from {@Code "@Algebra"}. There may be several
+symbols after the @Code "import" keyword. All these symbols
+share an important restriction: they may not have parameters.
+This is necessary because Lout would be unable to determine
+suitable values for any such parameters, if they did exist.
+@PP
+As an exception to the rule just given, a named parameter may
+import the symbol it is a parameter of:
+@ID @OneRow @Code {
+"export @Cell"
+"def @Tbl"
+" import @Tbl named @Format { ... }"
+}
+In this example the exported definitions of @Code "@Tbl" (i.e.
+{@Code "@Cell"}) will be visible within {@Code "@Format"}. However,
+they may only be used in actual parameters, not in the default
+value of the named parameter. This is owing to implementation
+problems: at the time the default value of {@Code "@Format"} is
+read, the exported symbols have not been read and are consequently
+not known.
+@PP
+Since @Code "@Cell" is nested within {@Code "@Tbl"}, the
+value of an invocation of @Code "@Cell" may depend on the value
+of parameters of {@Code "@Tbl"}. If @Code "@Cell" is used within
+an actual {@Code "@Format"} parameter, its value depends on the
+value of parameters of the invocation of {@Code "@Tbl"} of which
+the {@Code "@Format"} parameter is a part.
+@PP
+A definition, macro, or named parameter may have several alternative
+names, like this:
+@ID @Code "macro @CD @CentredDisplay @CenteredDisplay { ... }"
+This is useful for abbreviated and alternative spellings, as shown. The
+names appear together, and they may subsequently be used interchangeably.
+@PP
+If one name of a symbol appears in an export or import list, its other
+names are automaticaly included as well, and should not also appear
+in the list.
+@End @Section
diff --git a/doc/expert/exa b/doc/expert/exa
new file mode 100644
index 0000000..ade9d20
--- /dev/null
+++ b/doc/expert/exa
@@ -0,0 +1,18 @@
+@Chapter
+ @Title { Examples }
+ @Tag { examples }
+@Begin
+@LP
+This chapter presents some examples taken from the various
+packages available with Basser Lout. The reader who masters these
+examples will be well prepared to read the packages themselves. The
+examples have not been simplified in any way, since an important part of
+their purpose is to show Lout in actual practice.
+@BeginSections
+@Include { exa_equa }
+@Include { exa_para }
+@Include { exa_page }
+@Include { exa_chap }
+@Include { exa_bibl }
+@EndSections
+@End @Chapter
diff --git a/doc/expert/exa_bibl b/doc/expert/exa_bibl
new file mode 100644
index 0000000..f1e1930
--- /dev/null
+++ b/doc/expert/exa_bibl
@@ -0,0 +1,238 @@
+@Section
+ @Title { Bibliographies }
+ @Tag { biblio }
+@Begin
+@PP
+bibliographies @Index { Bibliographies }
+The first step in the production of a bibliography is to create a
+database of references based on the definition
+reference.example @Index { @Code "@Reference" example }
+@ID @Code {
+ "export @Type @Author @Title @Institution @Number @Publisher"
+//1vx " @Year @Proceedings @Journal @Volume @Pages @Comment"
+//1vx ""
+//1vx "def @Reference"
+//1vx " named @Tag" |2f "{ TAG? }"
+ /1vx " named @Type" | "{ TYPE? }"
+ /1vx " named @Author" | "{ AUTHOR? }"
+ /1vx " named @Title" | "{ TITLE? }"
+ /1vx " named @Institution" | "{ INSTITUTION? }"
+ /1vx " named @Number" | "{ NUMBER? }"
+ /1vx " named @Publisher" | "{ PUBLISHER? }"
+ /1vx " named @Year" | "{ YEAR? }"
+ /1vx " named @Proceedings" | "{ PROCEEDINGS? }"
+ /1vx " named @Journal" | "{ JOURNAL? }"
+ /1vx " named @Volume" | "{ VOLUME? }"
+ /1vx " named @Pages" | "{ PAGES? }"
+ /1vx " named @Comment" | "{ @Null }"
+//1vx "{ @Null }"
+}
+For example, the database might contain
+@IL
+@LI @Code {
+"{ @Reference"
+" @Tag { strunk1979style }"
+" @Type { Book }"
+" @Author { Strunk, William and White, E. B. }"
+" @Title { The Elements of Style }"
+" @Publisher { MacMillan, third edition }"
+" @Year { 1979 }"
+"}"
+}
+
+@LI @Code {
+"{ @Reference"
+" @Tag { kingston92 }"
+" @Type { TechReport }"
+" @Author { Kingston, Jeffrey H. }"
+" @Title { Document Formatting with Lout (Second Edition) }"
+" @Number { 449 }"
+" @Institution { Basser Department of Computer"
+"Science F09, University of Sydney 2006, Australia }"
+" @Year { 1992 }"
+"}"
+}
+@EL
+Since named parameters are optional, we have one for every conceivable
+type of attribute, and simply leave out those that do not apply in any
+particular reference. We can print a reference by using the @@Open
+symbol to get at its attributes:
+@ID @Code {
+"@Reference&&strunk1979style @Open"
+"{ @Author, {Slope @Font @Title}. @Publisher, @Year. }"
+}
+The right parameter of @@Open may use the exported parameters of the
+left, and so the result is
+@ID {
+@Reference&&strunk1979style @Open
+{ @Author, {Slope @Font @Title}. @Publisher, @Year. } &0io
+}
+Incidentally, we are not limited to just one database of references;
+several @@Database symbols can nominate the same symbol, and invocations of
+that symbol can appear in the document itself as well if we wish.
+@PP
+The second step is to create a database of print styles for the various
+types of reference (Book, TechReport, etc.), based on the following
+definition:
+@ID @Code {
+"export @Style"
+"def @RefStyle"
+" left @Tag"
+" named @Style right reftag {}"
+"{}"
+}
+Notice that the named parameter @Code "@Style" has a right parameter
+{@Code "reftag"}. The style database has one entry for each type of
+reference:
+@ID @Code {
+"{ Book @RefStyle @Style"
+" { @Reference&&reftag @Open"
+" { @Author, {Slope @Font @Title}. @Publisher, @Year. @Comment }"
+" }"
+"}"
+""
+"{ TechReport @RefStyle @Style"
+" { @Reference&&reftag @Open"
+" { @Author, {Slope @Font @Title}. Tech. Rep. @Number (@Year),"
+"@Institution. @Comment }"
+" }"
+"}"
+}
+and so on. The following prints the reference whose tag is
+@Code strunk1979style in the Book style:
+@ID @Code {
+"@RefStyle&&Book @Open { @Style strunk1979style }"
+}
+It has result
+@ID {
+@RefStyle&&Book @Open { @Style strunk1979style } &0io
+}
+Notice how the @Code "@Style" parameter of @Code "@RefStyle" is given the
+parameter {@Code strunk1979style}, which it uses to open the appropriate
+reference.
+@PP
+We can consult the @Code "@Type" attribute of a reference to find out
+its style, which brings us to the following definition for printing out
+a reference in the style appropriate to it:
+@ID @Code {
+"def @RefPrint"
+" right reftag"
+"{ @RefStyle&&{ @Reference&&reftag @Open { @Type } }"
+" @Open { @Style reftag }"
+"}"
+}
+For example, to evaluate {@Code "@RefPrint strunk1979style"}, Lout first
+evaluates
+@ID @Code {
+"@Reference&&strunk1979style @Open { @Type }"
+}
+whose result is {@Code { @Reference&&strunk1979style @Open { @Type } }},
+and then evaluates
+@ID @Code {
+"@RefStyle&&Book @Open { @Style strunk1979style }"
+}
+as before. Complicated as this is, with its two databases and clever
+passing about of tags, the advantages of separating references from
+printing styles are considerable: printing styles may be changed
+easily, and non-expert users need never see them.
+@PP
+Finally, we come to the problem of printing out a numbered list of
+references, and referring to them by number in the body of the
+document. The first step is to create a numbered list of places that
+galleys containing references may attach to:
+referencesection.example @Index { @Code "@ReferenceSection" example }
+@ID @Code {
+"def @ReferenceSection"
+" named @Tag {}"
+" named @Title { References }"
+" named @RunningTitle { dft }"
+" named style right tag { tag. }"
+" named headstyle right @Title { @Heading @Title }"
+" named indent { @DispIndent }"
+" named gap { @DispGap }"
+" named start { 1 }"
+"{"
+" def @RefList right num"
+" {"
+" @NumberMarker num & indent @Wide {style num} | @RefPlace"
+" //gap @RefList @Next num"
+" }"
+""
+" @Protect headstyle @Title"
+" // @PageMarker&&preceding @Tagged @Tag"
+" // @Title @MajorContentsEntry {@PageOf @Tag}"
+" // @Runner"
+" @FootEven { |0.5rt 0.8f @Font @B @PageNum }"
+" @FootOdd { |0.5rt 0.8f @Font @B @PageNum }"
+" //@DispGap @RefList start"
+" // @Runner"
+" @TopEven { @B @PageNum }"
+" @TopOdd { @I {@RunningTitle @OrElse @Title} |1rt @B @PageNum }"
+"}"
+}
+We place the expression @Code "@ReferenceSection" at the point where we
+want the list of references to appear; its value is something like
+@ID @Code {
+"1. @RefPlace"
+"2. @RefPlace"
+"3. @RefPlace"
+"..."
+}
+where @Code "@RefPlace" is @Code "@Galley" as usual. We can scatter
+multiple lists of references through the document if we wish (at the end
+of each chapter, for example), simply by placing @Code "@ReferenceSection"
+at each point.
+@PP
+Our task is completed by the following definition:
+ref.example @Index { @Code "@Ref" example }
+@ID @Code {
+"def @Ref right x"
+"{"
+" def sendref into { @RefPlace&&following }"
+" right @Key"
+" {"
+" @NumberMarker&&preceding @Tagged x &"
+" @PageMarker&&preceding @Tagged x &"
+" @RefPrint x"
+" }"
+""
+" @NumberMarker&&x @Open { @Tag } sendref x"
+"}"
+}
+Given this definition, the invocation {@Code "@Ref strunk1979style"} has result
+@ID @Code "@NumberMarker&&strunk1979style @Open { @Tag }"
+plus the galley {@Code "sendref strunk1979style"}. We first
+follow what happens to the galley.
+@PP
+According to its @Code into clause, the galley will replace a
+@Code "@RefPlace" in the nearest following {@Code "@ReferenceSection"}. If
+every such galley is a sorted galley whose key is the reference's tag, as
+this one is, they will appear sorted by tag. The galley's object is
+@ID @Code {
+"@NumberMarker&&preceding @Tagged strunk1979style &"
+"@PageMarker&&preceding @Tagged strunk1979style &"
+"@RefPrint strunk1979style"
+}
+The result of the @@Tagged symbol is always @@Null, so this prints the
+@Code strunk1979style reference in the appropriate style at the
+{@Code "@RefPlace"}, as desired.
+@PP
+Now @Code "@NumberMarker&&preceding" is the nearest preceding invocation of
+@Code "@NumberMarker" in the final document. This must be the invocation of
+@Code "@NumberMarker" just before the @Code "@RefPlace" that received
+the galley, and so this invocation of @Code "@NumberMarker" is given @Code
+strunk1979style as an additional tag by the @@Tagged symbol. Its original tag
+was the number of the reference place, which means that
+@ID @Code {
+"@NumberMarker&&strunk1979style @Open { @Tag }"
+}
+has for its result the number of the reference place that received the
+@Code strunk1979style galley, and this is the desired result of
+{@Code "@Ref strunk1979style"}.
+@PP
+It might seem that if we refer to the @Code strunk1979style reference twice,
+two copies will be sent to the reference list and it will appear
+twice. However, when more than one sorted galley with the same key is sent
+to the same place, only one of them is printed (Section {@NumberOf galleys});
+so provided that sorted galleys are used there is no problem.
+@End @Section
diff --git a/doc/expert/exa_chap b/doc/expert/exa_chap
new file mode 100644
index 0000000..51926c0
--- /dev/null
+++ b/doc/expert/exa_chap
@@ -0,0 +1,273 @@
+@Section
+ @Title { Chapters and sections }
+ @Tag { chapters }
+@Begin
+@PP
+The definitions of chapters and sections from the DocumentSetup package
+chapters. @Index { Chapters and sections }
+of Version 2 (in Version 3, the BookSetup extension of DocumentSetup)
+form the subject of this section. They allow a chapter to be entered
+like this:
+document.layout.chapters @SubIndex { chapters and sections }
+@ID @Code {
+"@Chapter"
+" @Title { ... }"
+" @Tag { ... }"
+"@Begin"
+" ..."
+"@End @Chapter"
+}
+Within the chapter a sequence of sections may be included by writing
+@ID @Code {
+"@BeginSections"
+"@Section { ... }"
+"..."
+"@Section { ... }"
+"@EndSections"
+}
+These are numbered automatically, and an entry is made for each in a
+table of contents.
+@PP
+The user of the DocumentSetup package can find the number of the chapter or
+section with a given tag by writing @Code "@NumberOf tag" at any point
+in the document. This feature is based on the following definitions:
+numberof.example @Index { @Code "@NumberOf" example }
+@ID @Code {
+"export @Tag"
+"def @NumberMarker right @Tag { @Null }"
+""
+"def @NumberOf right x"
+"{ @NumberMarker&&x @Open { @Tag } }"
+}
+Each chapter and section will contain one invocation of
+{@Code "@NumberMarker"}; a full explanation will be given later.
+@PP
+A sequence of places for receiving chapters is easily defined:
+@ID @Code {
+"export @Tag"
+"def @ChapterList right @Tag"
+"{"
+" @Galley"
+" //@ChapterGap @ChapterList @Next @Tag"
+"}"
+}
+@Code "@ChapterGap" will usually be {@Code "1.1b"}, ensuring that each
+chapter begins on a new page. The @Code "@Chapter" galley itself is
+defined as follows:
+chapter.example @Index { @Code "@Chapter" example }
+@IndentedList
+@LI @Code {
+"export @FootNote @BeginSections @EndSections @Section"
+"def @Chapter force into { @ChapterList&&preceding }"
+" named @Tag {}"
+" named @Title {}"
+" named @RunningTitle { dft }"
+" body @Body"
+"{"
+" def @FootNote right x { @ColFootNote x }"
+""
+" def @BeginSections ..."
+" def @EndSections ..."
+" def @Section ..."
+}
+@LI @Code {
+" def @ChapterTitle"
+" {"
+" @ChapterNumbers @Case {"
+" {Yes yes} @Yield { Chapter {@NumberOf @Tag}. |2s @Title }"
+" else @Yield @Title"
+" }"
+" }"
+""
+" def @ChapterNum"
+" {"
+" @ChapterNumbers @Case {"
+" {Yes yes} @Yield { Chapter {@NumberOf @Tag} }"
+" else @Yield @Null"
+" }"
+" }"
+}
+@LI @Code {
+" ragged @Break @BookTitleFormat @ChapterTitle"
+" // @NumberMarker {"
+" @ChapterList&&@Tag @Open { @Tag }"
+" }"
+" // @ChapterList&&preceding @Tagged @Tag"
+" // @NumberMarker&&preceding @Tagged @Tag"
+" // @PageMarker&&preceding @Tagged @Tag"
+" // { @ChapterTitle } @MajorContentsEntry {@PageOf @Tag}"
+" // @Runner"
+" @FootEven { |0.5rt 0.8f @Font @B @PageNum }"
+" @FootOdd { |0.5rt 0.8f @Font @B @PageNum }"
+" // @Body"
+" //@SectionGap @ChapRefSection"
+" // @Runner"
+" @TopEven { @B @PageNum |1rt @I @ChapterNum }"
+" @TopOdd { @I {@RunningTitle @OrElse @Title} |1rt @B @PageNum }"
+"}"
+}
+@EndList
+We will see the symbols for sections shortly. Notice how their use has
+been restricted to within the right parameter of {@Code "@Chapter"}, by
+nesting them and using a body parameter.
+@PP
+The meaning of @Code "@FootNote" within @Code "@Chapter" has been set
+to {@Code "@ColFootNote"}, which produces a footnote targeted to
+{@Code "@ColFootList"} (see Section {@NumberOf pagelayout}). In other
+words, footnotes within chapters go at the foot of the column, not at
+the foot of the page. (Of course, in single-column books this
+distinction is insignificant.) @Code "@ChapterTitle" and
+@Code "@ChapterNum" are trivial definitions which vary depending on
+whether the user has requested numbered chapters or not.
+@PP
+Each invocation of @Code "@Chapter" has its own unique {@Code "@Tag"},
+either supplied by the user or else inserted automatically by Lout. We
+now trace the cross referencing of chapter numbers on a hypothetical
+third chapter whose tag is {@Code "euclid"}.
+@PP
+@Code "@ChapterList&&preceding @Tagged euclid" attaches @Code "euclid"
+as an extra tag to the first invocation of @Code "@ChapterList"
+preceding itself in the final printed document. But this
+@Code "@ChapterList" must be the target of the chapter, and so
+@ID @Code "@ChapterList&&euclid @Open { @Tag }"
+is 3, the number of the chapter ({@Code "@Tag"} refers to the parameter
+of {@Code "@ChapterList"}, not the parameter of {@Code "@Chapter"}).
+ Consequently the invocation of
+@Code "@NumberMarker" within the chapter is equal to
+{@Code "@NumberMarker 3"}.
+@PP
+@Code "@NumberMarker&&preceding @Tagged euclid" attaches @Code "euclid"
+to {@Code "@NumberMarker 3"} as an extra tag, and so
+{@Code "@NumberOf euclid"}, which expands to
+@ID @Code "@NumberMarker&&euclid @Open { @Tag }"
+must be equal to 3, as required. This scheme could be simplified by
+placing the invocation of @Code "@NumberMarker" within
+@Code "@ChapterList" rather than within {@Code "@Chapter"}, but it turns
+out that that scheme does not generalize well to sections and subsections.
+@PP
+There is a trap for the unwary in the use of @Code preceding and
+{@Code following}. Suppose that the invocation of @Code "@NumberMarker"
+within @Code "@Chapter" is replaced by the seemingly equivalent
+@ID @Code "@NumberMarker { @ChapterList&&preceding @Open { @Tag } }"
+Now suppose that @Code "@NumberOf euclid" appears somewhere within
+Chapter 7. It will expand to
+@ID @Code "@NumberMarker&&euclid @Open { @Tag }"
+which would now be equal to
+@ID @Code "@ChapterList&&preceding @Open { @Tag }"
+whose value, evaluated as it is within Chapter 7, is 7, not 3. Use of
+@Code preceding or @Code following within the parameter
+of a symbol, rather than within the body, is likely to be erroneous.
+@PP
+Much of the remainder of the definition of @Code "@Chapter" is fairly
+self-explanatory: there is a heading, a tag sent to mark the page on
+which the chapter begins, a @Code "@ContentsEntry" galley sent to the
+table of contents, galleys for the figures and tables of the chapter to
+collect in, @Code "@Body" where the body of the chapter goes, and
+@Code "@ChapRefSection" to hold a concluding list of references. This
+leaves only the two invocations of @Code "@Runner" to explain.
+@PP
+The first @Code "@Runner" is just below the heading. It will be the target
+of the @Code "@Runner&&following" cross reference at the beginning of the
+first page of the chapter (see Section {@NumberOf pagelayout}), which
+consequently will have null running headers and the given footers.
+@PP
+The second @Code "@Runner" appears at the very end of the chapter, hence
+on its last page. Since no invocations of @Code "@Runner" lie between
+it and the first {@Code "@Runner"}, it will be the target of
+@Code "@Runner&&following" on every page from the second page of the
+chapter to the last, inclusive, and will supply the format of their
+headers and footers.
+@PP
+The interested reader might care to predict the outcome in unusual
+cases, such as when the heading occupies two pages, or when a chapter
+occupies only one, or (assuming a change to the gap between chapters)
+when a chapter starts halfway down a page. Such predictions can be made
+with great confidence.
+@PP
+The expression @Code "@RunningTitle @OrElse @Title" appearing in the second
+@Code "@Runner" returns the value of the @Code "@RunningTitle" parameter
+of @Code "@Chapter" if this is not equal to the default value
+{@Code "dft"}, or @Code "@Title" otherwise:
+orelse.example @Index { @Code "@OrElse" example }
+@ID @Code {
+"def @OrElse"
+" left x"
+" right y"
+"{"
+" x @Case {"
+" dft @Yield y"
+" else @Yield x"
+" }"
+"}"
+}
+This produces the effect of
+@ID @Code {
+"named @RunningTitle { @Title }"
+}
+which unfortunately is not permissible as it stands, because @Code "@Title"
+is not visible within the default value of {@Code "@RunningTitle"}.
+@PP
+Finally, the definitions for sections omitted earlier are as follows:
+section.example @Index { @Code "@Section" example }
+@IndentedList
+@LI @Code {
+"def @EndSectionsPlace { @Galley }"
+"def @EndSections force into { @EndSectionsPlace&&preceding } {}"
+"macro @BeginSections { //@SectionGap @SectionList 1 // @EndSectionsPlace // }"
+}
+@LI @Code {
+"def @Section force into { @SectionList&&preceding }"
+" named @Tag {}"
+" named @Title {}"
+" named @RunningTitle { dft }"
+" body @Body"
+"{"
+" def @SectionTitle"
+" {"
+" @SectionNumbers @Case {"
+" {Yes yes} @Yield { {@NumberOf @Tag}. |2s @Title }"
+" else @Yield @Title"
+" }"
+" }"
+""
+" @Heading @Protect @SectionTitle"
+" // @NumberMarker {"
+" {@ChapterList&&@Tag @Open { @Tag }}.{"
+" @SectionList&&@Tag @Open { @Tag }}"
+" }"
+" // @ChapterList&&preceding @Tagged @Tag"
+" // @SectionList&&preceding @Tagged @Tag"
+" // @NumberMarker&&preceding @Tagged @Tag"
+" // @PageMarker&&preceding @Tagged @Tag"
+" // { &3f @SectionTitle } @ContentsEntry {@PageOf @Tag}"
+" //0io @Body"
+"}"
+}
+@EndList
+The @Code "@BeginSections" macro invokes {@Code "@SectionList"},
+preceded by the appropriate gap and followed by an @Code "@EndSectsPlace"
+for closing the list of sections when the @Code "@EndSections" symbol is
+found. @Code "@Section" itself is just a copy of @Code "@Chapter" with
+slight changes to the format. The parameter of @Code "@NumberMarker" is
+a simple generalization of the one within {@Code "@Chapter"}. Notice
+that we have taken care that the value of this parameter be
+a juxtaposition of simple words: although
+@ID @Code {
+"{@ChapterList&&@Tag @Open { @Tag }}. &"
+"{@SectionList&&@Tag @Open { @Tag }}"
+}
+is formally equivalent, @Code "&" was not permitted within a
+@Code "@Tag" parameter until recently.
+@PP
+The DocumentSetup package also contains definitions for subsections in the
+same style. They raise the question of whether Lout is capable of
+producing subsections should the user place {@Code "@BeginSections"},
+{@Code "@Section"}, and {@Code "@EndSections"} within a {@I section},
+and whether such nesting could proceed to arbitrary depth. Arbitrary
+nesting of sections within sections is available now, although the
+numbering would of course be wrong. The author has worked out
+definitions which provide correct numbering to arbitrary depth, with an
+arbitrary format for each level. These were not incorporated into
+DocumentSetup because the author considers sub-subsections to be poor
+style, and he prefers separate names for the symbols at each level.
+@End @Section
diff --git a/doc/expert/exa_equa b/doc/expert/exa_equa
new file mode 100644
index 0000000..67852b8
--- /dev/null
+++ b/doc/expert/exa_equa
@@ -0,0 +1,149 @@
+@Section
+ @Title { An equation formatting package }
+ @Tag { eq }
+@Begin
+@PP
+In this section we describe the design and implementation of the Eq
+eq. @Index { Eq equation formatting package }
+equation formatting package. Equation formatting makes a natural first
+example, partly because its requirements have strongly influenced the
+design of Lout, and partly because no cross references or galleys are
+required.
+@PP
+To the author's knowledge, Eq is the first equation formatter to be
+implemented as a collection of high-level definitions. This approach
+has significant advantages: the basics of language and layout are
+trivial, so the implementor can concentrate on fine-tuning; and the
+definitions, being readily available, can be improved, extended, or even
+replaced.
+@PP
+As described in the User's Guide @Cite { $kingston1995lout.user }, an
+equation is entered in a format based on the one introduced by the eqn
+language of Kernighan and Cherry @Cite { $kernighan1975eqn }:
+kernighan.b @Index { Kernighan, B. }
+cherry.l @Index { Cherry, L. }
+@ID @Code {
+"@Eq { { x sup 2 + y sup 2 } over 2 }"
+}
+The result is
+@ID @Eq { { x sup 2 + y sup 2 } over 2 }
+In outline, the definition of the @Code "@Eq" symbol is
+eq.example @Index { @Code "@Eq" example }
+@ID @Code {
+"export sup over \"+\" \"2\" \"<=\""
+"def @Eq"
+" body @Body"
+"{"
+" def sup precedence 60 left x right y { ... }"
+" def over precedence 54 left x right y { ... }"
+" def \"2\" { Base @Font \"2\" }"
+" def \"+\" { {Symbol Base} @Font \"+\" }"
+" def \"<=\" { {Symbol Base} @Font \"\\243\" }"
+" ..."
+""
+" Slope @Font 1.2f @Break 0c @Space @Body"
+"}"
+}
+A body parameter is used to restrict the visibility of the equation
+formatting symbols (there are hundreds of them). The equation as a whole
+is set in Slope (i.e. Italic) font, and symbols such as @Code "\"2\"" and
+@Code "\"+\"" are defined when other fonts are needed. Precedences are
+used to resolve ambiguities such as {@Code "a sup b over c"}. Eq takes
+all spacing decisions on itself, so to prevent white space
+typed by the user from interfering, the equation is enclosed in
+{@Code "0c @Space"}. We will discuss the {@Code "1.2f @Break"} later.
+@PP
+Thus have we disposed of the language design part of the equation
+formatting problem; it remains now to define the twenty or so symbols
+with parameters, and get the layout right.
+@PP
+Every equation has an {@I axis}: an imaginary horizontal line through
+the centre of variables, through the bar of built-up fractions, and so
+on. We can satisfy this requirement by ensuring that the result of each
+symbol has a single row mark, on the axis. For example, the
+superscripting symbol is defined as follows:
+sup.example @Index { @Code "sup" example }
+@ID @Code {
+"def sup"
+" precedence 60"
+" associativity left"
+" left x"
+" named gap { @SupGap }"
+" right y"
+"{"
+" @HContract @VContract {"
+" | @Smaller y"
+" ^/gap x"
+" }"
+"}"
+}
+The @Code "@VContract" and @Code "^/" symbols together ensure that the axis
+of the result is the axis of the left parameter. A @Code "gap"
+parameter has been provided for varying the height of the superscript,
+with default value @Code "@SupGap" defined elsewhere as
+{@Code "0.40fk"}. It is important that such gaps be expressed in units
+that vary with the font size, so that they remain correct when the size
+changes. Collecting the default values into symbols like @Code
+"@SupGap" ensures consistency and assists when tuning the values. Here
+is another characteristic definition:
+over.example @Index { @Code "over" example }
+@ID @Code {
+"def over"
+" precedence 54"
+" associativity left"
+" left x"
+" named gap { 0.2f }"
+" right y"
+"{"
+" @HContract @VContract {"
+" |0.5rt @OneCol x"
+" ^//gap @HLine"
+" //gap |0.5rt @OneCol y"
+" }"
+"}"
+}
+Both parameters are centred, since we do not know which will be the
+wider; we use @@OneCol to make sure that the entire parameter is
+centred, not just its first column, and @@HContract ensures that the
+fraction will never expand to fill all the available space, as Lout objects
+have a natural tendency to do (Section {@NumberOf size}). @Code "@HLine"
+is a horizontal line of the width of the column:
+hline.example @Index { @Code "@Hline" example }
+@ID @Code {
+"def @HLine"
+" named line { \"0.05 ft setlinewidth\" }"
+"{ "
+" { \"0 0 moveto xsize 0 lineto\" line \"stroke\" } @Graphic {}"
+"}"
+}
+Here we are relying on the expanding tendency just mentioned.
+@PP
+The remaining symbols are quite similar to these ones. We conclude with
+a few fine points of mathematical typesetting mentioned by a leading
+authority, D. E. Knuth @Cite { $knuth1984tex }.
+knuth.d @Index { Knuth, D. }
+@PP
+Some symbols, such as @Eq {lessequal} and @Eq { notequal }, should have a
+thick space on each side; others, such as @Eq {plus} and @Eq {minus},
+have a medium space; others have a thin space on the right only. This
+would be easy to do except that these spaces are not wanted in
+superscripts and subscripts:
+@ID @Eq { r sup n+1 - 1 }
+In effect, the definition of such symbols changes depending on the
+context; but Lout does not permit such a change. Luckily, the so-called
+`style' information set by the @@Font, @@Break, and @@Space symbols can
+change in this way. Accordingly, Eq uses the @Code y unit, which is
+part of style, for these spaces:
+@ID @Code {
+"def @MedGap { 0.20y }"
+""
+"def \"+\" { &@MedGap plus &@MedGap }"
+""
+"def @HSqueeze right x { 0.2f @YUnit x }"
+}
+In the equation as a whole, the y unit is initially set to
+{@Code 1f}, and so @Code "@MedGap" ordinarily supplies 20% of this
+amount. But superscripts and subscripts are enclosed in the
+@Code "@HSqueeze" symbol, which, by changing the y unit, ensures that
+any @Code "@MedGap" within them is much smaller than usual.
+@End @Section
diff --git a/doc/expert/exa_page b/doc/expert/exa_page
new file mode 100644
index 0000000..31ab1d7
--- /dev/null
+++ b/doc/expert/exa_page
@@ -0,0 +1,267 @@
+@Section
+ @Title { Page layout }
+ @Tag { pagelayout }
+@Begin
+@PP
+The page layout
+page.layout.inpractice @SubIndex { in practice }
+document.layout.page.layout. @SubIndex { page layout }
+definitions given in Section {@NumberOf definitions},
+although correct, are very basic. In this section we present the
+definitions used by the DocumentLayout package for laying out the pages
+of books, including running page headers and footers, different formats
+for odd and even pages, and so on. The present document is produced with
+these definitions.
+@PP
+We begin with a few definitions which permit the user to create cross
+references of the `see page 27' variety which will be kept up to date
+automatically. The user marks the target page by placing
+@Code {"@PageMark intro"}, for example, at the point of interest, and
+refers to the marked page as @Code "@PageOf intro" elsewhere:
+pageof.example @Index { @Code "@PageOf" example }
+@IndentedList
+@LI @Code {
+"export @Tag"
+"def @PageMarker right @Tag { @Null }"
+}
+@LI @Code {
+"def @PageMark right x"
+"{"
+" @PageMarker&&preceding @Tagged x"
+"}"
+}
+@LI @Code {
+"def @PageOf right x"
+"{"
+" @PageMarker&&x @Open { @Tag }"
+"}"
+}
+@EndList
+We will see below that an invocation of @Code "@PageMarker" appears before
+each page, with @Code "@Tag" parameter equal to the
+page number. Suppose that {@Code "@PageMark intro"}, which expands to
+@ID @Code "@PageMarker&&preceding @Tagged intro"
+happens to fall on page 27 of the final printed document (of course, its
+value is @@Null which makes it invisible). Then the effect of @@Tagged
+is to attach @Code "intro" as an extra tag to the first invocation of
+{@Code "@PageMarker"} preceding that final point, and this must be
+{@Code "@PageMarker 27"}. Therefore the expression
+@ID @Code "@PageMarker&&intro @Open { @Tag }"
+will open the invocation {@Code "@PageMarker 27"} and yield the value of
+its @Code "@Tag" parameter, 27. Thus, {@Code "@PageOf intro"} appearing
+anywhere in the document yields 27.
+@PP
+Next we have some little definitions for various parts of the
+page. {@Code "@FullPlace"} will be the target of full-width body text:
+@ID @Code {
+"def @FullPlace { @Galley }"
+}
+{@Code "@ColPlace"} will be the target of body text within one column:
+@ID @Code {
+"def @ColPlace { @Galley }"
+}
+{@Code "@TopList"} will be the target of figures and tables:
+@ID @Code {
+"export @Tag"
+"def @TopList right @Tag"
+"{"
+" @Galley"
+" //@TopGap @TopList @Next @Tag"
+"}"
+}
+We have taken a shortcut here, avoiding an unnecessary @Code "@TopPlace"
+symbol. @Code "@FootList" and {@Code "@FootSect"} define a sequence of
+full-width targets at the foot of the page for footnotes,
+preceded by a short horizontal line:
+footsect.example @Index { @Code "@FootSect" example }
+@IndentedList
+@LI @Code {
+"export @Tag"
+"def @FootList right @Tag"
+"{"
+" @Galley"
+" //@FootGap @FootList @Next @Tag"
+"}"
+}
+@LI @Code {
+"def @FootSect"
+"{"
+" @FootLen @Wide @HLine"
+" //@FootGap @FootList 1 ||@FootLen"
+"}"
+}
+@EndList
+Similarly, @Code "@ColFootList" and @Code "@ColFootSect" provide a
+sequence of targets for footnotes within one column:
+@ID @Code {
+"export @Tag"
+"def @ColFootList right @Tag"
+"{"
+" @Galley"
+" //@FootGap @ColFootList @Next @Tag"
+"}"
+""
+"def @ColFootSect"
+"{"
+" @ColFootLen @Wide @HLine"
+" //@FootGap @ColFootList 1 ||@ColFootLen"
+"}"
+}
+The next definition provides a horizontal sequence of one or more columns:
+collist.example @Index { @Code "@ColList" example }
+@ID @Code {
+"def @ColList right col"
+"{"
+" def @Column"
+" { @VExpand { @ColPlace //1rt @OneRow { //@MidGap @ColFootSect } } }"
+""
+" col @Case {"
+" Single @Yield @Column"
+" Double @Yield { @DoubleColWidth @Wide @Column ||@ColGap @ColList col }"
+" Multi @Yield { @MultiColWidth @Wide @Column ||@ColGap @ColList col }"
+" }"
+"}"
+}
+Each column consists of a @Code "@ColPlace" at the top and a
+@Code "@FootSect" at the foot. The @@VExpand symbol ensures that
+whenever a column comes into existence, it will expand vertically so
+that the bottom-justification @Code "//1rt" has as much space as
+possible to work within. The @Code "col" parameter determines whether
+the result has a single column, double columns, or multiple columns.
+@PP
+The {@Code "@Page"} symbol places its parameter in a page of fixed width,
+height, and margins:
+page.example @Index { @Code "@Page" example }
+@ID @Code {
+"def @Page right x"
+"{"
+" @PageWidth @Wide @PageHeight @High {"
+" //@PageMargin ||@PageMargin"
+" @HExpand @VExpand x"
+" ||@PageMargin //@PageMargin"
+" }"
+"}"
+}
+@@HExpand and @@VExpand ensure that the right parameter occupies all the
+available space; this is important when the right parameter is unusually
+small. The @@High symbol gives the page a single row mark, ensuring that
+it will be printed on a single sheet of paper (page {@PageOf rootg}).
+@PP
+Next we have {@Code "@OnePage"}, defining a typical page of a book or
+other document:
+onepage.example @Index { @Code "@OnePage" example }
+@ID @Code {
+"def @OnePage"
+" named @Columns {}"
+" named @PageTop {}"
+" named @PageFoot {}"
+"{"
+" @Page {"
+" @PageTop"
+" //@MidGap @TopList"
+" //@MidGap @FullPlace"
+" //@MidGap @ColList @Columns"
+" // //1rt @OneRow { //@MidGap @FootSect //@MidGap @PageFoot }"
+" }"
+"}"
+}
+The page top and page foot, and the number of columns, are parameters
+that will be given later when @Code "@OnePage" is invoked. The body of
+the page is a straightforward combination of previous definitions. The
+@Code "//" symbol protects the following @Code "//1rt" from deletion in
+the unlikely event that all the preceding symbols are replaced by
+@@Null. The following object is enclosed in @@OneRow to ensure that
+all of it is bottom-justified, not just its first component.
+@PP
+Before presenting the definition of a sequence of pages, we must detour
+to describe how running page headers and footers (like those in the
+present document) are produced. These are based on the
+@Code "@Runner" symbol:
+runner.example @Index { @Code "@Runner" example }
+@ID @Code {
+"export @TopOdd @TopEven @FootOdd @FootEven"
+"def @Runner"
+" named @TopOdd right @PageNum { @Null }"
+" named @TopEven right @PageNum { @Null }"
+" named @FootOdd right @PageNum { @Null }"
+" named @FootEven right @PageNum { @Null }"
+" named @Tag {}"
+"{ @Null }"
+}
+The four parameters control the format of running headers and footers on
+odd and even pages respectively. Invocations of {@Code "@Runner"}, for
+example
+@ID @Code {
+"@Runner"
+" @TopEven { @B @PageNum |1rt @I { Chapter 4 } }"
+" @TopOdd { @I { Examples } |1rt @B @PageNum }"
+}
+will be embedded in the body text of the document, and, as we will see
+in a moment, are accessed by @Code "@Runner&&following" cross references
+on the pages. Notice how the @Code "@PageNum" parameter of each
+parameter allows the format of the running header to be specified while
+leaving the page number to be substituted later.
+@PP
+We may now define {@Code "@OddPageList"}, whose result is a sequence of
+pages beginning with an odd-numbered page:
+oddpagelist.example @Index { @Code "@OddPageList" example }
+@ID @Code {
+"def @OddPageList"
+" named @Columns {}"
+" right @PageNum"
+"{"
+" def @EvenPageList ..."
+""
+" @PageMarker @PageNum"
+" // @Runner&&following @Open {"
+" @OnePage"
+" @Columns { @Columns }"
+" @PageTop { @TopOdd @PageNum }"
+" @PageFoot { @FootOdd @PageNum }"
+" }"
+" // @EvenPageList"
+" @Columns { @Columns }"
+" @Next @PageNum"
+"}"
+}
+Ignoring @Code "@EvenPageList" for the moment, notice first that the
+invocation of @Code "@OnePage" is enclosed in
+{@Code "@Runner&&following @Open"}. Since {@Code "@Runner&&following"}
+refers to the first invocation of @Code "@Runner" appearing after itself
+in the final printed document, the symbols @Code "@TopOdd" and
+@Code "@FootOdd" will take their value from the first invocation of
+@Code "@Runner" following the top of the page, even though @Code "@FootOdd"
+appears at the foot of the page. Their @Code "@PageNum" parameters are
+replaced by {@Code "@PageNum"}, the actual page number parameter of
+{@Code "@OddPageList"}.
+@PP
+After producing the odd-numbered page, @Code "@OddPageList" invokes
+{@Code "@EvenPageList"}:
+evenpagelist.example @Index { @Code "@EvenPageList" example }
+@ID @Code {
+"def @EvenPageList"
+" named @Columns {}"
+" right @PageNum"
+"{"
+" @PageMarker @PageNum"
+" // @Runner&&following @Open {"
+" @OnePage"
+" @Columns { @Columns }"
+" @PageTop { @TopEven @PageNum }"
+" @PageFoot { @FootEven @PageNum }"
+" }"
+" // @OddPageList"
+" @Columns { @Columns }"
+" @Next @PageNum"
+"}"
+}
+This produces an even-numbered page, then passes the ball back to
+@Code "@OddPageList" -- a delightful example of what computer
+scientists call mutual recursion. The two page types differ only in
+their running headers and footers, but other changes could easily be made.
+@PP
+It was foreshadowed earlier that an invocation of @Code "@PageMarker"
+would precede each page, and this has been done. Although this @Code
+"@PageMarker" is a component of the root galley, it will not cause a
+page to be printed, because Basser Lout skips components of height zero.
+@End @Section
diff --git a/doc/expert/exa_para b/doc/expert/exa_para
new file mode 100644
index 0000000..6b9f60f
--- /dev/null
+++ b/doc/expert/exa_para
@@ -0,0 +1,236 @@
+@Section
+ @Title { Paragraphs, displays, and lists }
+ @Tag { paras }
+@Begin
+@PP
+The remaining sections of this chapter are all based on Version 2 of
+the DocumentLayout package. Version 3, which is similar but more elaborate,
+is described from the user's perspective in the
+document.layout @Index { DocumentLayout package }
+User's Guide @Cite { $kingston1995lout.user }. In 26 pages of Lout, the
+DocumentLaytout package defines many features required in the formatting
+of simple documents, technical reports, and books, including displays,
+lists, page layout, cross references, tables of contents, footnotes,
+figures, tables, references, chapters, sections, and sorted indexes.
+@PP
+The symbols used for separating paragraphs and producing displays and
+document.layout.paras @SubIndex { paragraphs }
+lists may lack the excitement of more exotic features, but they can
+teach some important lessons about robust design. The following macro
+for separating paragraphs produces a 0.3 cm vertical space and a 1 cm
+indent on the following line, and is clearly on the right track:
+@ID @Code "macro @PP { //0.3c &1c }"
+Nevertheless it has several major problems.
+@PP
+The @Code "&" symbol is subject to widening during line adjustment, so
+it should be replaced by {@Code "1c @Wide {}"}. But then white space
+following the symbol will affect the result, so an extra @Code "&0i" must
+be added. If the document is printed double spaced, this paragraph gap
+will fail to widen: it should be expressed in terms of the @Code "v" unit,
+with mark-to-mark spacing mode. Similarly, the paragraph indent should
+probably be made proportional to the font size.
+@PP
+`Magic numbers' like @Code "0.3c" should not be buried in definitions
+where they cannot be changed easily, or kept consistent with similar
+definitions during tuning. They are much better placed as symbols,
+possibly parameters of the enclosing package:
+@ID @Code {
+"def @DocumentLayout" pp.example @Index { @Code "@PP" example }
+" named @ParaGap { 1.3vx }"
+" named @ParaIndent { 2f }"
+" ..."
+"@Begin"
+""
+" macro @PP { //@ParaGap @ParaIndent @Wide &0i }"
+" macro @LP { //@ParaGap }"
+" ..."
+"@End @DocumentLayout"
+}
+and we have arrived at the definition of @Code "@PP" as it appears in
+the DocumentLayout package.
+@PP
+A display is a table in which the first column is blank:
+document.layout.displays @SubIndex { displays }
+@ID lines @Break {
+@I { preceding text }
+@Code "//@DispGap |@DispIndent" @I display
+@Code "//@DispGap"
+@I { following text }
+}
+Edge-to-edge is the appropriate spacing mode before and after displays,
+since the display could be a table or figure whose mark does not
+correspond to a baseline. Thus, @Code "1v" is a reasonable value for
+{@Code "@DispGap"}.
+@PP
+The ordinary user cannot be expected to type the Lout source shown
+above; a more appropriate syntax is
+indented.display.example @Index { @Code "@IndentedDisplay" example }
+@ID lines @Break {
+@I { preceding text }
+@Code "@IndentedDisplay {" @I display @Code "}"
+@I { following text }
+}
+This presents a problem: if @Code "@IndentedDisplay" is made a definition
+with a right parameter, its result will be an object separated from the
+surrounding text only by white space, hence part of the paragraph; while
+if it is a macro, the final @Code "//@DispGap" cannot be included in it.
+ The solution adopted in the DocumentLayout package uses a galley and a macro:
+@ID @Code {
+" def @DispPlace { @Galley }"
+" def @Disp into { @DispPlace&&preceding }"
+" right x"
+" {"
+" @OneRow x"
+" }"
+""
+" macro @IndentedDisplay"
+" {"
+" //@DispGap |@DispIndent @DispPlace |"
+" //@DispGap // @Disp"
+" }"
+}
+@Code "@DispPlace" and @Code "@Disp" are not exported, so there is
+no danger of a name clash with some other symbol. The ordinary user's
+syntax expands to
+@ID lines @Break {
+@I { preceding text }
+@Code "//@DispGap |@DispIndent @DispPlace |"
+@Code "//@DispGap // @Disp {" @I display @Code "}"
+@I { following text }
+}
+and the @Code "@Disp" galley appears at the preceding
+{@Code "@DispPlace"}, being itself replaced by @@Null. The @Code "//"
+symbol protects the preceding @Code "//@DispGap" from being deleted by
+this @@Null when there is no following text.
+@PP
+An automatically numbered list
+document.layout.lists @SubIndex { lists }
+numbered @Index { Numbered list }
+could have an arbitrarily large number of
+items, so, by analogy with sequences of pages, we see immmediately that
+recursion must be involved:
+@ID @Code {
+"def @List right num"
+"{"
+" @DispIndent @Wide num. | @ItemPlace"
+" //@DispGap @List @Next num"
+"}"
+}
+Notice how the @@Next symbol works in conjunction with the recursion to
+produce an ascending sequence of numbers; the result of @Code "@List 1"
+will be
+@ID @Code {
+"1. @ItemPlace"
+"2. @ItemPlace"
+"3. @ItemPlace"
+"..."
+}
+We can follow this with items which are galleys targeted to
+{@Code "@ItemPlace&&preceding"}, and @Code "@List" will expand just
+enough to accommodate them.
+@PP
+The usual problem with recursive-receptive symbols now arises: there is
+always one unexpanded {@Code "@List"}, and until it can be removed the
+galley containing it will appear to be incomplete and will be prevented at
+that point from flushing into its parent (see page {@PageOf forcing}). We
+adopt the usual solution: a forcing galley into a later target will
+replace the last @Code "@List" by @@Null. This brings us to the
+definitions as they appear in DocumentLayout:
+indented.list.example @Index { @Code "@IndentedList" example }
+@IndentedList
+@LI @Code {
+"def @ItemPlace { @Galley }"
+"def @ListItem into { @ItemPlace&&preceding }"
+" right x"
+"{ x }"
+}
+@LI @Code {
+"def @EndListPlace { @Galley }"
+"def @EndList force into { @EndListPlace&&preceding }"
+"{}"
+}
+@LI @Code {
+"def @RawIndentedList"
+" named style right tag {}"
+" named indent { @DispIndent }"
+" named gap { @DispGap }"
+" named start { 1 }"
+"{"
+" def @IList right num"
+" {"
+" indent @Wide {style num} | @ItemPlace"
+" //gap @IList @Next num"
+" }"
+""
+" @IList start // @EndListPlace"
+"}"
+}
+@EndList
+Now given the input
+@ID @Code {
+"@RawIndentedList"
+"@ListItem { first item }"
+"@ListItem { second item }"
+"..."
+"@ListItem { last item }"
+"@EndList"
+}
+@Code "@RawIndentedList" will expand to receive the items, and will be
+closed off by {@Code "@EndList"}.
+@PP
+The {@Code indent}, {@Code gap}, and {@Code start} parameters are
+straightforward (note that the burden of typing @Code 1 has been lifted
+from the ordinary user), but the @Code style parameter has a parameter
+of its own (see page {@PageOf strange}). It is used like this:
+@ID @Code {
+"def @RawNumberedList { @RawIndentedList style { tag. } }"
+"def @RawParenNumberedList { @RawIndentedList style { (tag) } }"
+}
+In {@Code "@RawNumberedList"}, @Code "style" is given the value
+{@Code "tag."}, where @Code tag is its own right parameter, so the value
+of @Code "{style num}" within @Code "@IList" is {@Code "num."}; while in
+{@Code "@RawParenNumberedList"}, @Code "{style num}" is {@Code "(num)"}. In
+this way we achieve an unlimited variety of numbering formats without
+having to rewrite @Code "@RawIndentedList" over and over.
+@PP
+These list symbols are objects without surrounding space, so macros
+similar to those used for displays are needed:
+@ID @Code {
+"macro @NumberedList { //@DispGap @RawNumberedList //@DispGap }"
+"macro @ParenNumberedList { //@DispGap @RawParenNumberedList //@DispGap }"
+}
+and so on.
+@PP
+Lists numbered by Roman numerals
+roman @Index { Roman numerals }
+present a problem, because @@Next will
+not increment Roman numerals. Instead, they must be stored in a
+database:
+@ID @Code {
+"def @Roman"
+" left @Tag"
+" right @Val"
+"{ @Val }"
+""
+"@SysDatabase @Roman { standard }"
+}
+@Code "@SysDatabase" is preferred over @Code "@Database" here because
+this database should be kept in a standard place and shared by
+everyone. The database itself, a file called @Code "standard.ld" in
+Basser Lout, contains invocations of {@Code "@Roman"}, each enclosed in
+braces:
+@ID @Code {
+"{ 1 @Roman i }"
+"{ 2 @Roman ii }"
+"..."
+"{ 100 @Roman c }"
+}
+Then @Code "@Roman&&12" for example has value {@Roman&&12}, and
+@ID @Code {
+"def @RawRomanList { @RawIndentedList style { {@Roman&&tag}. } }"
+}
+produces a list numbered by Roman numerals. The counting still
+proceeds in Arabic, but each Arabic numeral is converted to Roman by the
+cross reference. Since arbitrary objects may be stored in databases,
+arbitrary finite sequences of objects may be `counted' in this way.
+@End @Section
diff --git a/doc/expert/mydefs b/doc/expert/mydefs
new file mode 100644
index 0000000..e7f0d15
--- /dev/null
+++ b/doc/expert/mydefs
@@ -0,0 +1,442 @@
+
+ def "->" { {Symbol Base} @Font "\256" } #174 decimal
+ def "=>" { {Symbol Base} @Font "\336" } #222 decimal
+ macro @JP { /0.5v }
+
+ def @Code right x
+ { { Helvetica Base -1p } @Font lines @Break x }
+
+ macro @JL { //1vx }
+
+ ###################################################
+ # #
+ # Lout keywords. #
+ # #
+ ###################################################
+
+ def @@BackEnd { @Code "@BackEnd" }
+ def @@Background { @Code "@Background" }
+ def @@Begin { @Code "@Begin" }
+ def @@Break { @Code "@Break" }
+ def @@Case { @Code "@Case" }
+ def @@Char { @Code "@Char" }
+ def @@Common { @Code "@Common" }
+ def @@CurrLang { @Code "@CurrLang" }
+ def @@CurrFamily { @Code "@CurrFamily" }
+ def @@CurrFace { @Code "@CurrFace" }
+ def @@Database { @Code "@Database" }
+ def @@End { @Code "@End" }
+ def @@Enclose { @Code "@Enclose" }
+ def @@Font { @Code "@Font" }
+ def @@ForceGalley { @Code "@ForceGalley" }
+ def @@Galley { @Code "@Galley" }
+ def @@Graphic { @Code "@Graphic" }
+ def @@HAdjust { @Code "@HAdjust" }
+ def @@HCover { @Code "@HCover" }
+ def @@HContract { @Code "@HContract" }
+ def @@HExpand { @Code "@HExpand" }
+ def @@HLimited { @Code "@HLimited" }
+ def @@High { @Code "@High" }
+ def @@HScale { @Code "@HScale" }
+ def @@HShift { @Code "@HShift" }
+ def @@HSpan { @Code "@HSpan" }
+ def @@Include { @Code "@Include" }
+ def @@IncludeGraphic { @Code "@IncludeGraphic" }
+ def @@KernShrink { @Code "@KernShrink" }
+ def @@Key { @Code "@Key" }
+ def @@Language { @Code "@Language" }
+ def @@LClos { @Code "@LClos" }
+ def @@LEnv { @Code "@LEnv" }
+ def @@LInput { @Code "@LInput" }
+ def @@LUse { @Code "@LUse" }
+ def @@LVis { @Code "@LVis" }
+ def @@Meld { @Code "@Meld" }
+ def @@Merge { @Code "@Merge" }
+ def @@Moment { @Code "@Moment" }
+ def @@Next { @Code "@Next" }
+ def @@NotRevealed { @Code "@NotRevealed" }
+ def @@Null { @Code "@Null" }
+ def @@OneCol { @Code "@OneCol" }
+ def @@OneOf { @Code "@OneOf" }
+ def @@OneRow { @Code "@OneRow" }
+ def @@Open { @Code "@Open" }
+ def @@PAdjust { @Code "@PAdjust" }
+ def @@PageLabel { @Code "@PageLabel" }
+ def @@PlainGraphic { @Code "@PlainGraphic" }
+ def @@PrependGraphic { @Code "@PrependGraphic" }
+ def @@RawVerbatim { @Code "@RawVerbatim" }
+ def @@Rotate { @Code "@Rotate" }
+ def @@Rump { @Code "@Rump" }
+ def @@Insert { @Code "@Insert" }
+ def @@Scale { @Code "@Scale" }
+ def @@SetColor { @Code "@SetColor" }
+ def @@SetColour { @Code "@SetColour" }
+ def @@Space { @Code "@Space" }
+ def @@StartHSpan { @Code "@StartHSpan" }
+ def @@StartVSpan { @Code "@StartVSpan" }
+ def @@StartHVSpan { @Code "@StartHVSpan" }
+ def @@SysDatabase { @Code "@SysDatabase" }
+ def @@SysInclude { @Code "@SysInclude" }
+ def @@SysIncludeGraphic { @Code "@SysIncludeGraphic" }
+ def @@SysPrependGraphic { @Code "@SysPrependGraphic" }
+ def @@Tag { @Code "@Tag" }
+ def @@Tagged { @Code "@Tagged" }
+ def @@Underline { @Code "@Underline" }
+ def @@Use { @Code "@Use" }
+ def @@VAdjust { @Code "@VAdjust" }
+ def @@VContract { @Code "@VContract" }
+ def @@VCover { @Code "@VCover" }
+ def @@VExpand { @Code "@VExpand" }
+ def @@Verbatim { @Code "@Verbatim" }
+ def @@VLimited { @Code "@VLimited" }
+ def @@VScale { @Code "@VScale" }
+ def @@VShift { @Code "@VShift" }
+ def @@VSpan { @Code "@VSpan" }
+ def @@Wide { @Code "@Wide" }
+ def @@Yield { @Code "@Yield" }
+ def @@YUnit { @Code "@YUnit" }
+ def @@ZUnit { @Code "@ZUnit" }
+
+
+ ###################################################
+ # #
+ # Miscellaneous, mostly graphical definitions. #
+ # #
+ ###################################################
+
+
+ def @TeX
+ { @OneCol { T &0.4fo {-0.2f @VShift E} &0.45fo X }
+ }
+
+ export sp sb
+ def @Equation
+ body x
+ @Begin
+
+ def sp left x right y { @OneRow { | "-2p" @Font y ^/0.5fk x } }
+ def sb left x right y { @OneRow { x ^/0.5fk | "-2p" @Font y } }
+
+ Slope @Font x
+
+ @End @Equation
+
+ def @Super
+ left x
+ right y
+ { @OneRow { | -2p @Font y ^/0.5fk x }
+ }
+
+ def @NineSquare
+ right x
+ {
+ def @Three { x |0.2i x |0.2i x }
+
+ @Three /0.2i @Three /0.2i @Three
+ }
+
+ 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 {} }
+ }
+# { 0 0 moveto xsize 0 lineto stroke } @Graphic {}
+ }
+
+ def @VDashLine
+ right length
+ {
+ length @High {
+ @BackEnd @Case {
+ PostScript @Yield { { 0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke } @Graphic {} }
+
+# VT: double quotes required:
+ PDF @Yield { { "__pt 3 0 d 0 0 m 0 __ysize l s" } @Graphic {} }
+ }
+# { 0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke } @Graphic {}
+ }
+ }
+
+ def @LBox
+ right offset
+ { @HContract @VContract
+ {
+ { //0.2c
+ 0.6c @High 1.2c @Wide
+
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto closepath
+ gsave 0.9 setgray fill grestore stroke } @Graphic {}
+ }
+ PDF @Yield {
+ { 0 0 m __xsize 0 l
+ __xsize __ysize l 0 __ysize l h
+ q 0.9 g f Q s } @Graphic {}
+ }
+ }
+
+# { 0 0 moveto xsize 0 lineto
+# xsize ysize lineto 0 ysize lineto closepath
+# gsave 0.9 setgray fill grestore stroke }
+# @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
+ {
+ @HContract @VContract {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 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 {
+ { 0 0 m __xsize 0 l __xsize __ysize l
+ 0 __ysize l h s } @Graphic
+ { //0.3c ||0.3c
+ 9px @Break 8p @Font
+ 2.8c @Wide 3.8c @High x
+ ||0.3c //0.3c
+ }
+ }
+ }
+# { 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
+# }
+ }
+ }
+
+ 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 @ShowMarks
+ named linewidth {
+ @BackEnd @Case {
+ PostScript @Yield { 0.015 cm }
+ PDF @Yield { __mul(0.015, __cm) }
+ }
+ }
+ named linestyle { dashed }
+ named dashlength {
+ @BackEnd @Case {
+ PostScript @Yield { 0.15 cm }
+ PDF @Yield { __mul(0.15, __cm) }
+ }
+ }
+ named paint { lightgrey}
+ right x
+ {
+ @HContract @VContract @Fig
+ { @Box margin { 0c } linewidth { linewidth } paint { paint }
+ { @Figure
+ shape {
+ @BackEnd @Case {
+ PostScript @Yield {
+ -0.3 cm ymark
+ {xsize ymark} ++ {0.3 cm 0} []
+ xmark -0.3 cm
+ {xmark ysize} ++ {0 0.3 cm}
+ }
+ PDF @Yield { "" # VT: PDF currently has no output
+ }
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+
+ }
+ }
+
+ def @ShowVMark
+ named linewidth { 0.015 cm }
+ named linestyle { dashed }
+ named dashlength { 0.15 cm }
+ named paint { light }
+ right x
+ {
+ @Fig
+ {
+ @Figure
+ shape {
+ @BackEnd @Case {
+ PostScript @Yield {
+ xmark -0.3 cm
+ {xmark ysize} ++ {0 0.3 cm}
+ }
+ PDF @Yield { "" # VT: PDF currently has no output
+ }
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+ }
+
+ def @ShowHMark
+ named linewidth { 0.015 cm }
+ named linestyle { dashed }
+ named dashlength { 0.15 cm }
+ named paint { light }
+ right x
+ {
+ @Fig
+ {
+ @Figure
+ shape {
+ @BackEnd @Case {
+ PostScript @Yield {
+ -0.3 cm ymark
+ {xsize ymark} ++ {0.3 cm 0}
+ }
+ PDF @Yield { "" # VT: PDF currently has no output
+ }
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+ }
+
+ def @Strange
+ named @Format right @Val { [@Val] }
+ right x
+ { @Format x
+ }
+
+ def @TightBox right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke"
+ @Graphic x
+ }
+ PDF @Yield {
+ "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h s"
+ @Graphic x
+ }
+ }
+ }
+
+ def @GreyBox right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill"
+ @Graphic x
+ }
+ PDF @Yield {
+ "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h 0.8 g f"
+ @Graphic x
+ }
+ }
+ }
diff --git a/doc/expert/outfile.ps b/doc/expert/outfile.ps
new file mode 100644
index 0000000..477b7da
--- /dev/null
+++ b/doc/expert/outfile.ps
@@ -0,0 +1,15746 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.17 (September 1999)
+%%CreationDate: Fri Sep 17 12:08:04 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 Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica-Oblique
+/Helvetica-Obliquefnt36 vec2 /Helvetica-Oblique LoutRecode
+/fnt36 { /Helvetica-Obliquefnt36 LoutFont } def
+%%EndSetup
+
+%%Page: i 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Helvetica-Oblique
+/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
+600 fnt35 1355 12125(An)m 2215(Exper)s -24(t')k 30(s)k
+4518(Guide)s 6258(to)s 6902(the)s 3956 10685(Lout)m 616 9245(Document)m
+3500(F)s 18(or)k -15(matting)k 6490(System)s 240 fnt35
+3544 6059(Jeffre)m 4(y)k 4321(H.)s 4606(Kingston)s 3882 4395(V)m 19(ersion)k
+4725(3.17)s 3637 4107(September)m 12(,)k 4906(1999)s 240 fnt78
+0 342(\343)m 240 fnt36 315 340(Cop)m 7(yr)k -3(ight)k
+1493(1991,)s 2214(1999,)s 2935(Jeffre)s 4(y)k 3811(H.)s
+4173(Kingston,)s 5293(Basser)s 6203(Depar)s -9(tment)k 7619(of)s
+7990(Computer)s 0 52(Science)m 3(,)k 966(The)s 1449(Univ)s 6(ersity)k
+2583(of)s 2881(Sydne)s 4(y)k 3766(2006,)s 4415(A)s 7(ustr)k 2(alia.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: ii 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+480 fnt84 0 12955(Pr)m 8(eface)k 240 fnt82 540 12095(This)m
+1016(manual)s 1775(is)s 1984(addressed)s 2985(to)s 3224(those)s
+3784(who)s 4250(wish)s 4759(to)s 4997(become)s 5797(e)s 3(xpert)k
+6451(users)s 6992(of)s 7263(the)s 7611(Lout)s 8122(document)s
+0 11807(formatting)m 1092(system.)s 1952(An)s 2334(e)s 3(xpert)k
+3020(user)s 3510(is)s 3752(someone)s 4690(who)s 5188(understands)s
+6414(the)s 6794(principles)s 7819(of)s 8122(document)s 0 11519(formatting)m
+1083(that)s 1524(Lout)s 2059(embodies,)s 3105(and)s 3532(is)s
+3765(able)s 4242(to)s 4503(apply)s 5112(them,)s 5720(for)s
+6081(e)s 3(xample)k 6966(to)s 7228(design)s 7933(a)s
+8122(document)s 0 11231(format)m 690(or)s 943(a)s 1103(special-purpose)s
+2653(package.)s 3595(In)s 3845(contrast,)s 4701(a)s 4861(non-e)s 3(xpert)k
+5948(user)s 6400(is)s 6604(someone)s 7505(who)s 7965(simply)s
+8663(uses)s 0 10943(Lout)m 512(to)s 751(format)s 1447(documents.)s
+480 10569(Chapter)m 1295(1)s 1448(e)s 3(xplains)k 2291(these)s
+2836(principles,)s 3883(and)s 4285(it)s 4475(should)s 5170(be)s
+5450(read)s 5917(carefully)s 6817(and)s 7219(in)s 7460(sequence.)s
+8499(Chap)s 8998(-)s 0 10281(ters)m 412(2)s 604(and)s
+1025(3)s 1207(are)s 1571(for)s 1927(reference;)s 2943(respecti)s 6(v)k 3(ely)k 15(,)k
+4198(the)s 3(y)k 4678(contain)s 5457(descriptions)s 6680(of)s
+6969(the)s 7334(detailed)s 8166(operation)s 0 9993(of)m 277(Lout')s 13(s)k
+945(major)s 1568(components,)s 2838(and)s 3248(a)s 3420(complete)s
+4359(description)s 5484(of)s 5761(each)s 6262(prede\207ned)s 7336(symbol.)s
+8211(The)s 8646(\207nal)s 0 9705(chapter)m 763(presents)s 1597(a)s
+1763(collection)s 2762(of)s 3033(adv)s 6(anced)k 3989(e)s 3(xamples.)k
+480 9331(This)m 971(manual)s 1745(presents)s 2594(V)s 26(ersion)k
+3397(3)s 3576(of)s 3862(Basser)s 4574(Lout,)s 5148(publicly)s
+6001(released)s 6856(in)s 7114(September)s 8211(1994)s 8760([3)s
+8943(].)s 0 9043(This)m 480(manual)s 1244(w)s 2(as)k
+1670(rendered)s 2569(into)s 2999(PostScript)s 4046(by)s 4345(V)s 26(ersion)k
+5137(3.17)s 5610(of)s 5886(the)s 6239(Basser)s 6941(Lout)s
+7458(interpreter)s 9(,)k 8554(using)s 0 8755(the)m 348(symbols)s
+1197(described)s 2171(in)s 2414(the)s 2762(User')s 13(s)k
+3423(Guide)s 4064([4)s 4257(].)s 240 fnt84 0 8250(Ackno)m 2(wledgment.)k
+240 fnt82 1986 8251(V)m 26(ersion)k 2811(3)s 3012(has)s
+3419(bene\207ted)s 4391(from)s 4953(hundreds)s 5919(of)s 6227(comments)s
+7298(recei)s 6(v)k 3(ed)k 8193(since)s 8778(the)s
+0 7963(release)m 726(of)s 1006(V)s 26(ersion)k 1803(1)s
+1967(in)s 2219(October)s 3057(1991.)s 3710(Not)s 4138(e)s 6(v)k 3(ery)k
+4723(suggestion)s 5813(could)s 6411(be)s 6702(follo)s 6(wed,)k
+7662(b)s 4(ut)k 8033(man)s 3(y)k 8625(ha)s 4(v)k 3(e)k
+0 7675(been,)m 559(and)s 963(the)s 1311(encouragement)s 2832(w)s 2(as)k
+3253(greatly)s 3970(appreciated.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: iii 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+480 fnt84 0 12955(Contents)m 240 fnt84 0 11982(Chapter)m 908(1)s
+240 fnt82 1015 11983(.)m 240 fnt84 1179 11982(Principles)m 240 fnt82
+2738 11983(..)m 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8971(1)s 720 11638(1.1.)m 1184(Objects)s
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8971(1)s 720 11293(1.2.)m
+1184(De\207nitions)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8962(3)s 720 10948(1.3.)m
+1184(Cross)s 1780(references)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8958(7)s 720 10603(1.4.)m
+1184(Galle)s 3(ys)k 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8955(9)s 240 fnt84 0 9974(Chapter)m 908(2)s 240 fnt82
+1023 9975(.)m 240 fnt84 1187 9974(Details)m 240 fnt82 2394 9975(..)m
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8842(13)s 720 9630(2.1.)m 1184(Le)s 3(xical)k
+1952(structure)s 2843(\(w)s 2(ords,)k 3612(spaces,)s 4343(symbols\))s
+5269(and)s 5673(macros)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8842(13)s 720 9285(2.2.)m 1184(Named)s
+1933(parameters)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8840(15)s 720 8940(2.3.)m 1184(Nested)s 1906(de\207nitions,)s
+3023(body)s 3557(parameters,)s 4711(e)s 3(xtend,)k 5453(import,)s
+6197(and)s 6601(e)s 3(xport)k 7554(..)s 7898(..)s
+8242(..)s 8838(17)s 720 8595(2.4.)m 1184(Filtered)s 1984(right)s
+2495(and)s 2899(body)s 3433(parameters)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8831(20)s
+720 8250(2.5.)m 1184(Precedence)s 2328(and)s 2732(associati)s 6(vity)k
+3974(of)s 4245(symbols)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8832(22)s 720 7905(2.6.)m 1184(The)s 1612(style)s
+2119(and)s 2523(size)s 2950(of)s 3221(objects)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(23)s 720 7560(2.7.)m 1184(Galle)s 3(ys)k
+1962(and)s 2366(tar)s 4(gets)k 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(25)s 720 7215(2.8.)m
+1184(Sorted)s 1866(g)s 1(alle)k 3(ys)k 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8851(31)s 720 6870(2.9.)m 1184(Horizontal)s 2261(g)s 1(alle)k 3(ys)k
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8842(33)s 720 6525(2.10.)m 1304(Optimal)s 2142(g)s 1(alle)k 3(y)k
+2776(breaking)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8832(34)s
+240 fnt84 0 5896(Chapter)m 908(3)s 240 fnt82 1021 5897(.)m
+240 fnt84 1185 5896(Pr)m 4(ede\207ned)k 2338(symbols)s 240 fnt82
+3426 5897(..)m 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8833(36)s 720 5552(3.1.)m 1184(@Be)s 3(gin)k 2031(and)s
+2435(@End)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(36)s 720 5207(3.2.)m 1184(Concatenation)s 2623(symbols)s
+3472(and)s 3876(paragraphs)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(36)s 720 4862(3.3.)m 1184(@F)s 3(ont)k
+1901(and)s 2305(@Char)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8831(40)s 720 4517(3.4.)m 1184(@Break)s
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8832(42)s 720 4172(3.5.)m
+1184(@Space)s 2394(..)s 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8842(43)s
+720 3827(3.6.)m 1184(@YUnit)s 2063(and)s 2467(@ZUnit)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8832(44)s 720 3482(3.7.)m
+1184(@SetColour)s 2435(and)s 2839(@SetColor)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8832(44)s 720 3137(3.8.)m 1184(@Language)s 2405(and)s 2809(@CurrLang)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8840(45)s 720 2792(3.9.)m 1184(@OneCol)s
+2205(and)s 2609(@OneRo)s 6(w)k 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(46)s 720 2447(3.10.)m 1304(@W)s 9(ide)k
+2090(and)s 2494(@High)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8838(47)s 720 2102(3.11.)m 1304(@HShift)s 2222(and)s
+2626(@VShift)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8838(47)s 720 1757(3.12.)m 1304(@HExpand)s 2488(and)s 2892(@VExpand)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8839(48)s 720 1412(3.13.)m 1304(@HContract)s
+2581(and)s 2985(@VContract)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8839(48)s
+720 1067(3.14.)m 1304(@HLimited)s 2512(and)s 2916(@VLimited)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8839(48)s 720 722(3.15.)m 1304(@HAdjust,)s 2443(@V)s 32(Adjust,)k
+3550(and)s 3954(@P)s 22(Adjust)k 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8835(49)s 720 377(3.16.)m 1304(@HScale)s
+2271(and)s 2675(@VScale)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8835(49)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: iv 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+720 13808(3.17.)m 1304(@HCo)s 3(v)k 3(er)k 2337(and)s
+2741(@VCo)s 3(v)k 3(er)k 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8831(50)s 720 13463(3.18.)m 1304(@StartHSpan,@StartVSpan,)s 4117(@StartHVSpan,)s
+5720(@HSpan,)s 6700(and)s 7104(@VSpan)s 8242(..)s 8831(50)s
+720 13118(3.19.)m 1304(@Scale)s 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8851(51)s 720 12773(3.20.)m 1304(@Rotate)s 2394(..)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8832(52)s 720 12428(3.21.)m 1304(@Background)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8842(53)s 720 12083(3.22.)m 1304(@K)s 6(ernShrink)k 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8842(53)s 720 11738(3.23.)m 1304(@Common,)s 2524(@Rump,)s 3438(and)s
+3842(@Meld)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(53)s 720 11393(3.24.)m 1304(@Insert)s 2394(..)s
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(54)s 720 11048(3.25.)m 1304(@OneOf)s
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(54)s 720 10703(3.26.)m 1304(@Ne)s 3(xt)k
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8833(56)s 720 10358(3.27.)m
+1304(@Case)s 2394(..)s 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8833(56)s
+720 10013(3.28.)m 1304(@Moment)s 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8838(57)s
+720 9668(3.29.)m 1304(@Null)s 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8838(57)s 720 9323(3.30.)m 1304(@Galle)s 3(y)k 2213(and)s
+2617(@F)s 3(orceGalle)k 3(y)k 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8839(58)s 720 8978(3.31.)m 1304(@NotRe)s 6(v)k 3(ealed)k
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8839(58)s 720 8633(3.32.)m 1304(The)s 1732(cross)s
+2274(reference)s 3217(symbols)s 4066(&&)s 4492(and)s 4896(&&&)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8835(59)s 720 8288(3.33.)m
+1304(@T)s 19(agged)k 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8835(59)s
+720 7943(3.34.)m 1304(@Open and @Use)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8831(60)s 720 7598(3.35.)m 1304(@Database and @SysDatabase)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8831(60)s 720 7253(3.36.)m 1304(@Graphic)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8851(61)s 720 6908(3.37.)m 1304(@PlainGraphic)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8840(65)s 720 6563(3.38.)m 1304(@IncludeGraphic)s 3065(and)s 3469(@SysIncludeGraphic)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(65)s 720 6218(3.39.)m
+1304(@PrependGraphic and @SysPrependGraphic)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(65)s 720 5873(3.40.)m
+1304(@Include and @SysInclude)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8833(66)s 720 5528(3.41.)m
+1304(@BackEnd)s 2461(and)s 2865(the)s 3213(PlainT)s 16(e)k 3(xt)k
+4183(and)s 4587(PDF)s 5084(back)s 5597(ends)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8833(66)s 720 5183(3.42.)m 1304(@V)s 26(erbatim and @Ra)k 3(wV)k 26(erbatim)k
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8838(67)s 720 4838(3.43.)m 1304(@Underline)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8838(67)s 720 4493(3.44.)m 1304(@P)s 3(ageLabel)k
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8839(68)s 240 fnt84 0 3864(Chapter)m 908(4)s
+240 fnt82 1022 3865(.)m 240 fnt84 1186 3864(Examples)m 240 fnt82
+2738 3865(..)m 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8835(69)s 720 3520(4.1.)m 1184(An)s
+1534(equation)s 2415(formatting)s 3476(package)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8835(69)s
+720 3175(4.2.)m 1184(P)s 3(aragraphs,)k 2350(displays,)s 3241(and)s
+3645(lists)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8851(71)s 720 2830(4.3.)m
+1184(P)s 3(age)k 1702(layout)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8840(75)s 720 2485(4.4.)m 1184(Chapters)s 2085(and)s 2489(sections)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8831(80)s
+720 2140(4.5.)m 1184(Bibliographies)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(85)s 240 fnt84
+0 1511(Refer)m 4(ences)k 240 fnt82 1362 1512(..)m 1706(..)s
+2050(..)s 2394(..)s 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8831(90)s
+0 3(i)m 6(v)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: v 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt84 0 13843(Index)m 240 fnt82 1018 13844(..)m 1362(..)s
+1706(..)s 2050(..)s 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8851(91)s 8951 3(v)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: vi 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/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
+0 3(vi)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 1 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save 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
+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
+480 fnt84 0 12955(Chapter)m 1819(1.)s 2400(Principles)s 240 fnt82
+0 12004(The)m 414(Lout)s 911(document)s 1900(formatting)s 2946(language)s
+3852(is)s 4047(based)s 4635(on)s 4917(just)s 5307(four)s
+5751(k)s 2(e)k 3(y)k 6131(ideas:)s 6713(objects,)s
+7482(de\207nitions,)s 8584(cross)s 0 11716(references,)m 1087(and)s 1491(g)s 1(alle)k 3(ys.)k
+2328(This)s 2804(chapter)s 3567(concentrates)s 4812(on)s 5109(them,)s
+5694(postponing)s 6812(the)s 7160(ine)s 6(vitable)k 8152(details.)s
+240 fnt84 0 10923(1.1.)m 471(Objects)s 240 fnt82 480 10447(Since)m
+1075(our)s 1462(aim)s 1888(is)s 2106(to)s 2354(produce)s
+3189(neatly)s 3835(formatted)s 4829(documents,)s 5981(we)s 6325(should)s
+7030(be)s 3(gin)k 7624(by)s 7926(looking)s 8719(at)s
+8960(a)s 0 10159(typical)m 705(e)s 3(xample)k 1568(of)s
+1839(such)s 2335(a)s 2501(document:)s 1927 2494 0 2494 240 288 60 480 7325 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt84 560 1987(PURCELL)m
+128 fnt82 1316 2059(1)m 160 fnt82 170 1695(In)m 395(the)s
+681(w)s 1(orld)k 1145(of)s 1381(music)s 170 1515(England)m
+882(is)s 1163(supposed)s 170 1335(to)m 376(be)s 611(a)s
+768(mere)s 1171(pro)s 2(vince.)k 170 1155(If)m 465(she)s
+856(produces)s 1608(an)s 170 975(indif)m 4(ferent)k 1136(composer)s
+567 0 0 0 160 180 40 170 763 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 624(1)m 160 fnt82 221 552(Blom,)m 703(Eric.)s
+160 fnt83 1133 553(Some)m 170 373(Gr)m 5(eat)k 734(Composer)s 1(s.)k
+160 fnt82 170 192(Oxford,)m 703(1944.)s
+grestore
+1927 2494 0 2494 240 288 60 480 4831 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 170 2161(or)m
+453(performer)s 6(,)k 1267(that)s 1657(is)s 170 1981(re)m 2(garded)k
+862(else)s 4(where)k 1630(as)s 170 1801(perfectly)m 905(normal)s
+1527(and)s 170 1621(natural;)m 762(b)s 3(ut)k 1078(if)s
+1298(foreign)s 170 1441(students)m 905(of)s 1264(musical)s 170 1261(history)m
+976(ha)s 3(v)k 2(e)k 1637(to)s 170 1081(ackno)m 4(wledge)k
+1130(a)s 1326(British)s 170 901(musical)m 795(genius,)s 1376(he)s
+1657(is)s 170 721(considered)m 901(a)s 1012(freak.)s 490 488(Such)m
+957(a)s 1178(freak)s 1657(is)s 170 308(Henry)m 607(Purcell.)s
+1170(Y)s 16(et)k 1426(if)s 1574(we)s
+grestore
+1927 2494 0 2494 240 288 60 480 2337 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82
+170 2161(mak)m 1(e)k 565(a)s 690(choice)s 1157(of)s
+1352(\207fteen)s 170 1981(of)m 407(the)s 695(w)s 1(orld')k 8(s)k
+1264(musical)s 170 1801(classics,)m 740(as)s 918(here,)s 1276(we)s
+1510(\207nd)s 170 1621(that)m 464(we)s 703(cannot)s 1185(omit)s
+1533(this)s 170 1441(English)m 695(master)s 8(.)k
+grestore
+0 1886(It)m
+229(is)s 463(a)s 653(lar)s 4(ge)k 1206(rectangle)s
+2161(made)s 2759(from)s 3307(three)s 3864(smaller)s 4651(rectangles)s
+5694(\211)s 5898(its)s 6198(pages.)s 6931(Each)s 7490(page)s
+8022(is)s 8256(made)s 8855(of)s 0 1598(lines;)m 578(each)s
+1088(line)s 1517(is)s 1743(made)s 2332(of)s 2618(w)s 2(ords,)k
+3324(although)s 4234(it)s 4441(mak)s 2(es)k 5117(sense)s
+5706(for)s 6059(an)s 3(y)k 6472(rectangle)s 7418(\(e)s 6(v)k 3(en)k
+8012(a)s 8194(complete)s 0 1310(document\))m 1072(to)s 1311(be)s
+1593(part)s 2024(of)s 2295(a)s 2461(line,)s 2926(pro)s 3(vided)k
+3832(it)s 4024(is)s 4234(not)s 4600(too)s 4959(lar)s 4(ge.)k
+480 936(Lout)m 995(deals)s 1541(with)s 2027(something)s 3081(a)s
+3251(little)s 3747(more)s 4298(complicated)s 5528(than)s 6001(rectangles:)s
+240 fnt83 7079 938(objects.)m 240 fnt82 7914 936(An)m 8268(object)s
+8916(is)s 0 648(a)m 176(rectangle)s 1118(with)s 1611(at)s
+1854(least)s 2362(one)s 240 fnt83 2775 650(column)m 3545(mark)s
+240 fnt82 4112 648(protruding)m 5186(abo)s 3(v)k 3(e)k
+5819(and)s 6234(belo)s 6(w)k 6878(it,)s 7128(and)s
+7543(at)s 7786(least)s 8294(one)s 240 fnt83 8707 650(r)m 10(ow)k
+192 fnt84 4490 0(1)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(2)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 0 13205(mark)m 240 fnt82 557 13203(protruding)m 1621(to)s
+1861(the)s 2211(left)s 2589(and)s 2994(right.)s 3611(The)s
+4040(simplest)s 4897(objects)s 5627(contain)s 6389(w)s 2(ords)k
+7024(lik)s 2(e)k 7438(metempsychosis,)s 0 12915(and)m 404(ha)s 4(v)k 3(e)k
+905(one)s 1307(mark)s 1859(of)s 2130(each)s 2625(type:)s
+1572 215 0 106 240 288 60 480 12360 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 11909(The)m 441(rectangle)s 1386(e)s 3(xactly)k
+2141(encloses)s 3016(the)s 3377(w)s 2(ord;)k 3993(its)s
+4283(column)s 5072(mark)s 5637(is)s 5861(at)s 6107(the)s
+6469(left)s 6859(edge,)s 7432(and)s 7850(its)s 8140(ro)s 6(w)k
+8574(mark)s 0 11621(passes)m 668(through)s 1477(the)s 1831(middle)s
+2558(of)s 2835(the)s 3190(lo)s 6(wer)k 4(-case)k
+4276(letters.)s 5029(The)s 5463(rectangle)s 6401(and)s 6811(marks)s
+7453(do)s 7752(not)s 8125(appear)s 8829(on)s 0 11333(the)m
+348(printed)s 1083(page,)s 1642(b)s 4(ut)k 2004(to)s
+2243(understand)s 3351(what)s 3876(Lout)s 4388(is)s 4598(doing)s
+5197(you)s 5612(ha)s 4(v)k 3(e)k 6113(to)s
+6352(imagine)s 7178(them.)s 480 10959(T)m 19(o)k 782(place)s
+1344(tw)s 2(o)k 1756(objects)s 2487(side)s 2930(by)s
+3226(side,)s 3721(we)s 4058(separate)s 4898(them)s 5438(by)s
+5735(the)s 6085(symbol)s 220 fnt35 6847 10956(|,)m 240 fnt82
+7009 10959(which)m 7653(denotes)s 8437(the)s 8788(act)s 0 10671(of)m
+240 fnt83 271 10673(horizontal)m 1315(concatenation)s 240 fnt82 2665 10671(.)m
+2829(So,)s 3189(if)s 3406(we)s 3741(write)s 220 fnt35
+480 10189(USA | A)m 6(ustr)k 2(alia)k 240 fnt82 0 9734(the)m
+348(result)s 938(will)s 1364(be)s 1646(the)s 1994(object)s
+476 165 0 57 240 288 60 480 9228 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 165 0 56 240 288 60 956 9229 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
+0 8777(Notice)m 718(that)s 1162(this)s
+1583(object)s 2253(has)s 2648(tw)s 2(o)k 3084(column)s
+3884(marks,)s 4601(b)s 4(ut)k 4988(still)s 5426(only)s
+5931(one)s 6359(ro)s 6(w)k 6804(mark,)s 7428(because)s
+220 fnt35 8266 8774(|)m 240 fnt82 8389 8777(mer)m 4(ges)k
+0 8489(the)m 382(tw)s 2(o)k 827(ro)s 6(w)k
+1282(marks)s 1952(together)s 13(.)k 2921(This)s 3431(mer)s 4(ging)k
+4312(of)s 4618(ro)s 6(w)k 5073(marks)s 5743(\207x)s 3(es)k
+6277(the)s 6660(v)s 3(ertical)k 7462(position)s 8325(of)s
+8631(each)s 0 8201(object)m 647(with)s 1133(respect)s 1873(to)s
+2115(the)s 2467(other)s 9(,)k 3060(b)s 4(ut)k
+3425(it)s 3621(does)s 4115(not)s 4485(determine)s 5499(ho)s 6(w)k
+5964(f)s 2(ar)k 6290(apart)s 6830(the)s 3(y)k
+7297(are.)s 7756(This)s 8236(distance,)s 0 7913(or)m 240 fnt83
+276 7915(gap)m 240 fnt82 629 7913(,)m 753(may)s 1236(be)s
+1536(gi)s 6(v)k 3(en)k 2133(just)s 2555(after)s
+3069(the)s 3434(symbol,)s 4263(as)s 4531(in)s 220 fnt35
+4791 7910(|0.5i)m 240 fnt82 5264 7913(for)m 5620(e)s 3(xample,)k
+6551(which)s 7210(speci\207es)s 8102(horizontal)s 0 7625(concatenation)m 1385(with)s
+1867(a)s 2033(g)s 1(ap)k 2431(of)s 2702(half)s
+3145(an)s 3428(inch.)s 4004(If)s 4234(no)s 4527(g)s 1(ap)k
+4925(is)s 5135(gi)s 6(v)k 3(en,)k 5765(it)s
+5957(is)s 6167(assumed)s 7049(to)s 7288(be)s 220 fnt35
+7570 7622(0i)m 240 fnt82 7726 7625(.)m 240 fnt83 480 7253(V)m 26(ertical)k
+1283(concatenation)s 240 fnt82 2633 7251(,)m 2740(denoted)s 3556(by)s
+220 fnt35 3850 7248(/)m 240 fnt82 3914 7251(,)m 4021(is)s
+4231(the)s 4579(same)s 5126(apart)s 5663(from)s 6187(the)s
+6535(change)s 7269(of)s 7540(direction:)s 220 fnt35 480 6750(A)m 6(ustr)k 2(alia /0.1i USA)k
+240 fnt82 0 6295(has)m 370(result)s 875 165 0 56 240 288 60 480 5840 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
+476 165 0 57 240 288 60 480 5531 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 5080(The)m 485(usual)s 1102(mer)s 4(ging)k 2005(of)s
+2333(marks)s 3026(occurs,)s 3814(and)s 4275(no)s 6(w)k
+4793(the)s 5199(g)s 1(ap)k 5654(determines)s 6810(the)s
+7215(v)s 3(ertical)k 8040(separation.)s 0 4792(Horizontal)m 1077(and)s
+1481(v)s 3(ertical)k 2248(can)s 2637(be)s 2919(combined:)s
+220 fnt35 1000 4340(USA)m 2256(|0.2i)s 2772(A)s 6(ustr)k 2(alia)k
+480 4052(/0.1i)m 1000(W)s 8(ashington)k 2256(|)s 2772(Canberr)s 2(a)k
+240 fnt82 0 3553(has)m 370(result)s 476 165 0 57 240 288 60 480 3097 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 3097 LoutGr2
+0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+875 165 0 56 240 288 60 1903 3098 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
+1135 215 0 106 240 288 60 480 2738 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 166 0 57 240 288 60 1903 2787 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+876 166 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
+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 2287(There)m 655(are)s
+1044(se)s 6(v)k 3(eral)k 1808(things)s 2486(to)s
+2768(note)s 3278(carefully)s 4222(here.)s 4839(White)s 5522(space)s
+6151(\(including)s 7229(tabs)s 7707(and)s 8154(ne)s 6(wlines\))k
+0 1999(adjacent)m 848(to)s 1078(a)s 1236(concatenation)s 2612(symbol)s
+3364(is)s 3565(ignored,)s 4395(so)s 4652(it)s 4836(may)s
+5293(be)s 5567(used)s 6055(to)s 6286(lay)s 6623(out)s
+6981(the)s 7320(e)s 3(xpression)k 8388(clearly)s 15(.)k
+0 1711(The)m 425(symbol)s 220 fnt35 1182 1708(|)m 240 fnt82
+1275 1711(tak)m 2(es)k 1812(precedence)s 2940(o)s 3(v)k 3(er)k
+220 fnt35 3415 1708(/)m 240 fnt82 3479 1711(,)m 3583(which)s
+4221(means)s 4880(that)s 5295(the)s 5639(ro)s 6(ws)k
+6146(are)s 6490(formed)s 7234(\207rst,)s 7709(then)s 8174(v)s 3(ertically)k
+0 1423(concatenated.)m 1420(The)s 1856(symbol)s 220 fnt35 2625 1420(/)m
+240 fnt82 2757 1423(will)m 3191(mer)s 4(ge)k 3849(tw)s 2(o)k
+4267(or)s 4535(more)s 5090(column)s 5873(marks,)s 6573(creating)s
+7403(multiple)s 8264(columns)s 0 1135(\(and)m 220 fnt35 484 1132(|)m
+240 fnt82 583 1135(will)m 1011(mer)s 4(ge)k 1662(tw)s 2(o)k
+2073(or)s 2334(more)s 2883(ro)s 6(w)k 3305(marks\).)s
+4134(This)s 4611(implies)s 5367(that)s 5787(the)s 6137(g)s 1(ap)k
+220 fnt35 6536 1132(0.2i)m 240 fnt82 6937 1135(used)m 7436(abo)s 3(v)k 3(e)k
+8060(is)s 8272(between)s 0 847(columns,)m 910(not)s 1268(indi)s 6(vidual)k
+2278(items)s 2838(in)s 3072(columns;)s 3987(a)s 4144(g)s 1(ap)k
+4534(in)s 4768(the)s 5108(second)s 5822(ro)s 6(w)k
+6234(w)s 2(ould)k 6880(therefore)s 7789(be)s 8062(redundant,)s
+0 559(and)m 404(so)s 670(is)s 880(omitted.)s 480 185(A)m
+710(v)s 6(ariant)k 1427(of)s 220 fnt35 1698 182(/)m
+240 fnt82 1822 185(called)m 220 fnt35 2450 182(//)m 240 fnt82
+2635 185(left-justi\207es)m 3825(tw)s 2(o)k 4235(objects)s 4963(instead)s
+5698(of)s 5969(mer)s 4(ging)k 6815(their)s 7312(marks.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(1.1.)m 454(Objects)s 240 fnt84 8953 13840(3)m
+240 fnt82 480 13205(By)m 840(enclosing)s 1836(an)s 2145(object)s
+2815(in)s 3085(braces,)s 3828(it)s 4046(is)s 4282(possible)s
+5148(to)s 5414(o)s 3(v)k 3(erride)k 6286(the)s
+6660(set)s 7011(precedences.)s 8369(Here)s 8916(is)s 0 12917(another)m
+777(e)s 3(xpression)k 1854(for)s 2192(the)s 2540(table)s
+3060(abo)s 3(v)k 3(e,)k 3733(in)s 3976(which)s
+4618(the)s 4966(columns)s 5828(are)s 6175(formed)s 6923(\207rst:)s
+220 fnt35 996 12416({ USA)m 2089(/0.1i)s 2609(W)s 8(ashington })k
+480 12128(|0.2i)m 996({ A)s 6(ustr)k 2(alia)k 2089(/)s
+2609(Canberr)s 2(a })k 240 fnt82 0 11634(Braces)m 701(ha)s 4(v)k 3(e)k
+1202(no)s 1495(ef)s 6(fect)k 2091(other)s 2642(than)s
+3111(to)s 3350(alter)s 3833(the)s 4181(grouping.)s 240 fnt83
+480 11262(P)m 19(ar)k 3(a)k 2(gr)k 3(aph)k
+1569(br)s 8(eaking)k 240 fnt82 2476 11260(occurs)m 3160(when)s
+3746(an)s 4038(object)s 4692(is)s 4911(too)s 5280(wide)s
+5810(to)s 6059(\207t)s 6327(into)s 6762(the)s 7119(space)s
+7716(a)s 4(v)k 6(ailable)k 8633(to)s 8882(it;)s
+0 10972(by)m 286(breaking)s 1168(its)s 1436(paragraphs)s 2527(into)s
+2944(lines,)s 3494(its)s 3762(width)s 4355(is)s 4557(reduced)s
+5364(to)s 5595(an)s 5869(acceptable)s 6925(amount.)s 7799(The)s
+8218(a)s 4(v)k 6(ailable)k 0 10684(space)m 587(is)s
+797(determined)s 1930(by)s 2224(the)s 220 fnt35 2572 10681(@Wide)m
+240 fnt82 3346 10684(symbol,)m 4158(whose)s 4826(form)s 5350(is)s
+240 fnt83 480 10181(length)m 220 fnt35 1193 10176(@Wide)m 240 fnt83
+2027 10181(object)m 240 fnt82 0 9680(and)m 404(whose)s 1072(result)s
+1662(is)s 1872(the)s 2220(gi)s 6(v)k 3(en)k
+2800(object)s 3444(modi\207ed)s 4353(to)s 4592(ha)s 4(v)k 3(e)k
+5093(e)s 3(xactly)k 5834(the)s 6182(gi)s 6(v)k 3(en)k
+6762(length.)s 7524(F)s 3(or)k 7913(e)s 3(xample,)k
+220 fnt35 480 9179(5i @Wide {)m 480 8891(Macbeth w)m 3(as v)k 5(er)k -6(y ambitious)k 3(.)k 13( )k 11(This led him to wish to become king of)k
+480 8603(Scotland.)m 13( )k 11(The witches told him that this wish of his w)k 2(ould come tr)k -3(ue)k 3(.)k 13( )k 11(The)k
+480 8315(king of Scotland at this time w)m 3(as Duncan.)k 13( Encour)k 2(aged b)k 4(y his wif)k 6(e)k 3(, Macbeth)k
+480 8027(m)m 2(urdered Duncan.)k 13( He w)k 3(as thus enab)k 4(led to succeed Duncan as king.)k 13( \(51 w)k 2(ords\))k
+480 7739(|0.5i)m 480 7451(Encour)m 2(aged b)k 4(y his wif)k 6(e)k 3(, Macbeth achie)k 6(v)k 5(ed his ambition and realiz)k 3(ed the)k
+480 7163(prediction of the witches b)m 4(y m)k 2(urder)k -3(ing Duncan and becoming king of Scotland)k 480 6875(in his place)m 3(.)k 13( \(26 w)k 2(ords\))k
+480 6587(})m 240 fnt82 0 6093(has)m 370(for)s 708(its)s
+984(result)s 1574(the)s 1922(follo)s 6(wing)k 2899(\207v)s 3(e)k
+3311(inch)s 3780(wide)s 4301(object)s 4945([7)s 5132(]:)s
+480 5590(Macbeth)m 1356(w)s 2(as)k 1758(v)s 3(ery)k
+2216(ambitious.)s 3304(This)s 480 5302(led)m 828(him)s 1257(to)s
+1493(wish)s 2000(to)s 2236(become)s 3033(king)s 3509(of)s
+480 5014(Scotland.)m 1538(The)s 2023(witches)s 2861(told)s 3348(him)s
+480 4726(that)m 922(this)s 1343(wish)s 1876(of)s 2172(his)s
+2526(w)s 2(ould)k 3206(come)s 480 4438(true.)m 1025(The)s
+1464(king)s 1954(of)s 2235(Scotland)s 3141(at)s 3384(this)s
+480 4150(time)m 959(w)s 2(as)k 1379(Duncan.)s 2287(Encouraged)s
+3486(by)s 480 3862(his)m 818(wife,)s 1357(Macbeth)s 2259(murdered)s
+3242(Dun)s 3652(-)s 480 3574(can.)m 995(He)s 1350(w)s 2(as)k
+1790(thus)s 2260(enabled)s 3081(to)s 3340(suc)s 3652(-)s
+480 3286(ceed)m 976(Duncan)s 1778(as)s 2028(king.)s 2618(\(51)s
+2972(w)s 2(ords\))k 4440 5590(Encouraged)m 5653(by)s 5960(his)s
+6302(wife,)s 6846(Macbeth)s 4440 5302(achie)m 6(v)k 3(ed)k
+5409(his)s 5809(ambition)s 6786(and)s 7260(real)s 7612(-)s
+4440 5014(ized)m 4910(the)s 5272(prediction)s 6312(of)s 6597(the)s
+6959(witches)s 4440 4726(by)m 4731(murdering)s 5776(Duncan)s 6574(and)s
+6974(becom)s 7612(-)s 4440 4438(ing)m 4818(king)s 5316(of)s
+5606(Scotland)s 6520(in)s 6782(his)s 7132(place.)s 4440 4150(\(26)m
+4812(w)s 2(ords\))k 0 2783(A)m 232(paragraph)s 1247(of)s
+1520(te)s 3(xt)k 1937(can)s 2328(be)s 2612(included)s
+3496(an)s 3(ywhere,)k 4533(and)s 4939(it)s 5133(will)s
+5561(be)s 5845(brok)s 2(en)k 6567(automatically)s 7923(if)s
+8143(necessary)s 0 2495(to)m 239(\207t)s 498(the)s 846(a)s 4(v)k 6(ailable)k
+1754(space.)s 2449(The)s 2877(spaces)s 3552(between)s 4406(w)s 2(ords)k
+5040(are)s 5387(con)s 9(v)k 3(erted)k 6376(into)s
+6801(concatenation)s 8186(symbols.)s 480 2121(These)m 1136(are)s 1512(the)s
+1889(most)s 2443(signi\207cant)s 3528(of)s 3828(Lout')s 13(s)k
+4519(object-b)s 4(uilding)k 6058(symbols.)s 7049(There)s 7691(are)s
+8067(others,)s 8788(for)s 0 1833(changing)m 924(fonts,)s 1501(controlling)s
+2596(paragraph)s 3601(breaking,)s 4538(printing)s 5340(graphical)s 6277(objects)s
+6997(lik)s 2(e)k 7402(box)s 3(es)k 8001(and)s
+8397(circles,)s 0 1545(and)m 404(so)s 670(on,)s 1017(b)s 4(ut)k
+1379(the)s 3(y)k 1842(do)s 2135(not)s 2501(add)s
+2905(an)s 3(ything)k 3793(ne)s 6(w)k 4240(in)s
+4483(principle.)s 240 fnt84 0 752(1.2.)m 471(De\207nitions)s 240 fnt82
+480 321(The)m 897(features)s 1691(of)s 1950(Lout)s 2451(are)s
+2786(v)s 3(ery)k 3250(general.)s 4105(The)s 3(y)k
+4637(do)s 4918(not)s 5272(assume)s 6020(that)s 6427(documents)s
+7503(are)s 7838(composed)s 8855(of)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(4)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13204(pages,)m 637(nor)s 1001(that)s
+1403(there)s 1921(are)s 2252(such)s 2733(things)s 3353(as)s
+3588(mar)s 4(gins)k 4389(and)s 4778(footnotes,)s 5759(for)s
+6082(e)s 3(xample.)k 240 fnt83 7037 13206(De\207nitions)m 240 fnt82
+8127 13204(bridge)m 8778(the)s 0 12916(g)m 1(ap)k 397(between)s
+1249(Lout')s 13(s)k 1910(general)s 2666(features)s 3470(and)s
+3873(the)s 4219(special)s 4935(features)s 5740(\211)s 5918(footnotes,)s
+6913(equations,)s 7936(pages)s 8530(\211)s 8708(that)s 0 12628(particular)m
+991(documents)s 2097(require.)s 2954(The)s 3(y)k 3515(hold)s
+4017(the)s 4382(instr)s 4806(uct)s 5098(ions)s 5566(for)s
+5922(producing)s 6963(these)s 7528(special)s 8264(features,)s 0 12340(con)m 9(v)k 3(eniently)k
+1278(packaged)s 2240(ready)s 2825(for)s 3163(use.)s 480 11966(F)m 3(or)k
+885(e)s 3(xample,)k 1815(consider)s 2701(the)s 3065(challenge)s
+4053(posed)s 4686(by)s 4996(`)s 5057(T)s 5153 11918(E)m
+5261 11966(X)m 5430(',)s 5633(which)s 6291(is)s 6517(the)s
+6881(name)s 7471(of)s 7758(one)s 8176(of)s 8464(Lout')s 13(s)k
+0 11678(most)m 525(illustrious)s 1531(ri)s 6(v)k 6(als)k
+2100([5)s 2285(].)s 2528(Lout)s 3040(solv)s 3(es)k
+3686(it)s 3878(easily)s 4489(enough,)s 5302(lik)s 2(e)k
+5714(this:)s 220 fnt35 480 11177(T{ /0.2f)m 6(o E }X)k 240 fnt82
+0 10683(b)m 4(ut)k 373(to)s 624(type)s 1103(this)s
+1511(e)s 6(v)k 3(ery)k 2098(time)s 2590(T)s
+2686 10635(E)m 2794 10683(X)m 3035(is)s 3256(mentioned)s 4336(w)s 2(ould)k
+5002(be)s 5296(tedious)s 6050(and)s 6465(error)s 4(-prone.)k
+7724(So)s 8041(we)s 8388(place)s 8960(a)s 0 10395(de\207nition)m
+974(at)s 1206(the)s 1554(be)s 3(ginning)k 2562(of)s
+2833(the)s 3181(document:)s 220 fnt35 480 9894(def @T)m 26(eX { )k 11(T{ /0.2f)k 6(o E }X })k
+240 fnt82 0 9400(No)m 6(w)k 220 fnt35 514 9397(@T)m 26(eX)k
+240 fnt82 1169 9400(stands)m 1818(for)s 2156(the)s 2504(object)s
+3148(follo)s 6(wing)k 4125(it)s 4317(between)s 5171(braces,)s
+5888(and)s 6292(we)s 6627(may)s 7093(write)s 220 fnt35
+480 8899(consider)m 1370(the)s 1728(challenge)s 2719(posed)s 3366(b)s 4(y)k
+3653(`@T)s 26(eX',)k 4451(\202)s 240 fnt82 0 8400(as)m
+250(the)s 598(author)s 1269(did)s 1633(earlier)s 2301(in)s
+2544(this)s 2940(paragraph.)s 480 8026(A)m 240 fnt83 706 8028(symbol)m
+240 fnt82 1440 8026(is)m 1646(a)s 1808(name,)s 2429(lik)s 2(e)k
+220 fnt35 2837 8023(@T)m 26(eX)k 240 fnt82 3432 8026(,)m
+3535(which)s 4172(stands)s 4817(for)s 5151(something)s 6197(other)s
+6744(than)s 7209(itself.)s 7845(The)s 8269(initial)s 220 fnt35
+8875 8023(@)m 240 fnt82 0 7738(is)m 201(not)s 558(compulsory)s 15(,)k
+1771(b)s 4(ut)k 2124(it)s 2307(does)s 2788(mak)s 2(e)k
+3351(the)s 3690(name)s 4254(stand)s 4808(out)s 5165(clearly)s 15(.)k
+5954(A)s 240 fnt83 6175 7740(de\207nition)m 240 fnt82 7124 7738(of)m
+7386(a)s 7543(symbol)s 8293(declares)s 0 7450(a)m 164(name)s
+736(to)s 973(be)s 1253(a)s 1417(symbol,)s 2227(and)s
+2629(says)s 3090(what)s 3613(the)s 3959(symbol)s 4717(stands)s
+5364(for)s 13(.)k 5791(The)s 240 fnt83 6217 7452(body)m
+240 fnt82 6737 7450(of)m 7006(a)s 7170(de\207nition)s 8142(is)s
+8350(the)s 8695(part)s 0 7162(follo)m 6(wing)k 977(the)s
+1325(name,)s 1950(between)s 2804(the)s 3152(braces.)s 3926(T)s 19(o)k
+240 fnt83 4226 7164(in)m 9(vok)k 2(e)k 240 fnt82
+4892 7162(a)m 5058(symbol)s 5818(is)s 6028(to)s 6267(mak)s 2(e)k
+6839(use)s 7214(of)s 7485(it.)s 480 6788(Another)m 1324(e)s 3(xpression)k
+2401(ripe)s 2828(for)s 3166(packaging)s 4203(in)s 4446(a)s
+4612(de\207nition)s 5586(is)s 220 fnt35 480 6287(@OneRo)m 3(w { | -2p @F)k 6(ont n ^/0.5fk 2 })k
+240 fnt82 0 5745(which)m 642(produces)s 200 fnt82 1671 5862(n)m
+240 fnt82 1557 5745(2)m 1828(\(see)s 2268(Chapter)s 3085(2\).)s
+3448(But)s 3854(this)s 4250(time)s 4730(we)s 5065(w)s 2(ould)k
+5720(lik)s 2(e)k 6132(to)s 6371(be)s 6653(able)s
+7107(to)s 7346(write)s 240 fnt83 480 5242(object)m 220 fnt35
+1188 5237(@Super)m 240 fnt83 2116 5242(object)m 240 fnt82 0 4640(so)m
+296(that)s 220 fnt35 745 4637(a)m 953(@Super)s 1853(2)s
+240 fnt82 2055 4640(w)m 2(ould)k 2741(come)s 3345(out)s
+3742(as)s 200 fnt82 4128 4769(2)m 240 fnt82 4022 4640(a)m
+4223(,)s 4361(and)s 4796(so)s 5092(on,)s 5470(for)s
+5838(in)s 6112(this)s 6538(w)s 2(ay)k 7020(the)s
+7398(usefulness)s 8476(of)s 8778(the)s 0 4352(de\207nition)m 974(is)s
+1184(greatly)s 1901(increased.)s 2967(Here)s 3487(is)s 3697(ho)s 6(w)k
+4158(it)s 4350(is)s 4560(done:)s 220 fnt35 480 3851(def @Super)m
+480 3563( left x)m 480 3275( r)m -3(ight y)k 480 2987({ @OneRo)m 3(w { | -2p @F)k 6(ont y ^/0.5fk x })k
+480 2699(})m 240 fnt82 0 2205(This)m 492(de\207nition)s 1483(says)s
+1963(that)s 220 fnt35 2398 2202(@Super)m 240 fnt82 3283 2205(has)m
+3669(tw)s 2(o)k 240 fnt83 4096 2207(par)m 3(ameter)k 2(s)k
+240 fnt82 5176 2205(,)m 220 fnt35 5300 2202(x)m 240 fnt82
+5485 2205(and)m 220 fnt35 5906 2202(y)m 240 fnt82 6014 2205(.)m
+6194(When)s 220 fnt35 6840 2202(@Super)m 240 fnt82 7725 2205(is)m
+7952(in)s 9(v)k 4(ok)k 2(ed,)k 8833(all)s
+0 1917(occurrences)m 1205(of)s 220 fnt35 1490 1914(x)m 240 fnt82
+1671 1917(in)m 1928(the)s 2289(body)s 2837(will)s 3276(be)s
+3572(replaced)s 4452(by)s 4760(the)s 5121(object)s 5779(just)s
+6197(to)s 6450(the)s 6811(left)s 7202(of)s 220 fnt35
+7486 1914(@Super)m 240 fnt82 8294 1917(,)m 8415(and)s 8833(all)s
+0 1629(occurrences)m 1192(of)s 220 fnt35 1462 1626(y)m 240 fnt82
+1630 1629(will)m 2055(be)s 2337(replaced)s 3203(by)s 3496(the)s
+3844(object)s 4487(just)s 4892(to)s 5130(the)s 5477(right.)s
+6092(So,)s 6451(for)s 6789(e)s 3(xample,)k 7702(the)s
+8049(e)s 3(xpression)k 220 fnt35 480 1128(2 @Super { Slope @F)m 6(ont n })k
+240 fnt82 0 632(is)m 210(equal)s 783(to)s 220 fnt35
+480 131(@OneRo)m 3(w { | -2p @F)k 6(ont { Slope @F)k 6(ont n } ^/0.5fk 2 })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13844(1.2.)m 454(De\207nitions)s 240 fnt84 8953 13841(5)m
+240 fnt82 0 13151(and)m 404(so)s 670(comes)s 1332(out)s
+1698(as)s 200 fnt83 2062 13281(n)m 240 fnt82 1948 13151(2)m
+2157(.)s 480 12777(Lout)m 994(permits)s 1764(de\207nitions)s 2828(to)s
+3070(in)s 9(v)k 4(ok)k 2(e)k 3765(themselv)s 3(es,)k
+4934(a)s 5103(peculiarly)s 6115(circular)s 6905(thing)s 7453(to)s
+7695(do)s 7991(which)s 8636(goes)s 0 12489(by)m 294(the)s
+642(name)s 1216(of)s 240 fnt83 1487 12491(r)m 8(ecur)k 2(sion.)k
+240 fnt82 2548 12489(Here)m 3068(is)s 3278(an)s 3561(e)s 3(xample)k
+4424(of)s 4695(a)s 4861(recursi)s 6(v)k 3(e)k
+5783(de\207nition:)s 220 fnt35 480 11988(def @Leaders { ..)m 13( @Leaders })k 240 fnt82
+0 11494(The)m 418(usual)s 968(rule)s 1384(is)s 1584(that)s
+1991(the)s 2329(v)s 6(alue)k 2886(of)s 3147(an)s
+3420(in)s 9(v)k 4(ocation)k 4463(of)s 4724(a)s
+4879(symbol)s 5629(is)s 5828(a)s 5984(cop)s 2(y)k
+6492(of)s 6752(the)s 7090(body)s 7613(of)s 7874(the)s
+8211(symbol')s 13(s)k 0 11206(de\207nition,)m 1024(so)s 1290(the)s
+1638(v)s 6(alue)k 2206(of)s 220 fnt35 2477 11203(@Leaders)m
+240 fnt82 3546 11206(must)m 4071(be)s 220 fnt35 480 10724(..)m 13( @Leaders)k
+240 fnt82 0 10269(But)m 406(no)s 6(w)k 867(this)s
+1263(rule)s 1690(applies)s 2418(to)s 2657(this)s 3053(ne)s 6(w)k
+3500(in)s 9(v)k 4(ocation)k 4554(of)s 220 fnt35
+4825 10266(@Leaders)m 240 fnt82 5834 10269(;)m 5946(substituting)s 7115(its)s
+7391(body)s 7925(gi)s 6(v)k 3(es)k 220 fnt35
+480 9768(..)m 13( ..)k 13( @Leaders)k 240 fnt82 0 9313(and)m
+408(so)s 679(on)s 980(fore)s 6(v)k 3(er)k 13(.)k
+1816(In)s 2076(order)s 2645(to)s 2888(mak)s 2(e)k
+3465(this)s 3865(useful,)s 4561(an)s 4848(in)s 9(v)k 4(ocation)k
+5907(of)s 6182(a)s 6353(recursi)s 6(v)k 3(e)k
+7279(symbol)s 8044(is)s 8259(replaced)s 0 9025(by)m 294(its)s
+570(body)s 1104(only)s 1584(if)s 1801(suf\207cient)s 2750(space)s
+3337(is)s 3547(a)s 4(v)k 6(ailable.)k 4563(So,)s
+4923(for)s 5261(e)s 3(xample,)k 220 fnt35 480 8524(4i @Wide { Chapter 7 @Leaders 62 })m
+240 fnt82 0 8028(has)m 370(for)s 708(its)s 984(result)s
+1574(the)s 1922(object)s 480 7524(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(62)s
+0 7021(with)m 478(Lout)s 985(checking)s 1897(before)s 2558(each)s
+3049(replacement)s 4271(of)s 220 fnt35 4537 7018(@Leaders)m 240 fnt82
+5601 7021(by)m 220 fnt35 5891 7018(..)m 6177(@Leaders)s 240 fnt82
+7241 7021(that)m 7654(the)s 7997(total)s 8471(length)s 0 6733(afterw)m 2(ards,)k
+1112(including)s 2069(the)s 2417(other)s 2968(w)s 2(ords,)k
+3658(w)s 2(ould)k 4313(not)s 4679(e)s 3(xceed)k
+5398(four)s 5856(inches.)s 480 6359(The)m 902(remaining)s 1918(issue)s
+2445(is)s 2649(what)s 3168(happens)s 3997(when)s 4567(Lout)s
+5072(decides)s 5834(that)s 6246(it)s 6431(is)s 6635(time)s
+7109(to)s 7341(stop.)s 7898(The)s 8319(ob)s 3(vious)k
+0 6071(thing)m 545(to)s 784(do)s 1077(is)s 1287(to)s
+1526(replace)s 2271(the)s 2619(last)s 3010(in)s 9(v)k 4(ocation)k
+4064(by)s 4358(an)s 4641(empty)s 5293(object:)s 220 fnt35
+480 5573(..)m 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( {})k
+240 fnt82 0 5079(As)m 316(the)s 662(e)s 3(xample)k
+1524(sho)s 6(ws,)k 2222(this)s 2617(w)s 2(ould)k
+3270(lea)s 4(v)k 3(e)k 3822(a)s 3986(small)s
+4556(trailing)s 5297(space,)s 5933(which)s 6574(is)s 6782(a)s
+6947(major)s 7562(headache.)s 8614(Lout)s 0 4791(\207x)m 3(es)k
+517(this)s 930(by)s 1242(replacing)s 2201(the)s 2566(last)s
+2975(in)s 9(v)k 4(ocation)k 4046(with)s 4545(a)s
+4729(dif)s 6(ferent)k 5621(kind)s 6122(of)s 6411(empty)s
+7080(object,)s 7788(called)s 220 fnt35 8434 4788(@Null)m 240 fnt82
+9019 4791(,)m 0 4503(whose)m 677(ef)s 6(fect)k 1282(is)s
+1501(to)s 1749(mak)s 2(e)k 2330(an)s 2623(adjacent)s
+3488(concatenation)s 4882(symbol)s 5651(disappear)s 9(,)k 6674(preferably)s
+7718(one)s 8130(preceding)s 0 4215(the)m 220 fnt35 348 4212(@Null)m
+240 fnt82 933 4215(.)m 1097(Thus,)s 1683(when)s 2259(Lout)s
+2771(replaces)s 220 fnt35 3604 4212(@Leaders)m 240 fnt82 4673 4215(by)m
+220 fnt35 4967 4212(@Null)m 240 fnt82 5612 4215(in)m 5855(the)s
+6203(e)s 3(xpression)k 220 fnt35 480 3714(..)m 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( @Leaders)k
+240 fnt82 0 3259(the)m 348(trailing)s 1089(space,)s 1727(which)s
+2368(is)s 2577(really)s 3174(a)s 3339(horizontal)s 4362(concatenation)s
+5747(symbol,)s 6558(disappears)s 7617(as)s 7867(well.)s 8441(This)s
+8916(is)s 0 2971(tak)m 2(en)k 573(into)s 998(account)s
+1802(when)s 2378(deciding)s 3255(whether)s 4085(there)s 4618(is)s
+4828(room)s 5393(to)s 5632(replace)s 220 fnt35 6377 2968(@Leaders)m
+240 fnt82 7446 2971(by)m 7740(its)s 8016(body)s 15(.)k
+480 2597(The)m 903(remainder)s 1926(of)s 2192(this)s 2583(section)s
+3312(is)s 3517(de)s 6(v)k 4(oted)k 4318(to)s
+4552(sho)s 6(wing)k 5406(ho)s 6(w)k 5862(de\207nitions)s
+6918(may)s 7379(be)s 7656(used)s 8148(to)s 8382(specify)s
+0 2309(the)m 240 fnt83 348 2311(pa)m 2(g)k 2(e)k
+863(layout)s 240 fnt82 1525 2309(of)m 1796(a)s 1962(document.)s
+3070(T)s 19(o)k 3370(be)s 3(gin)k 3956(with,)s
+4488(we)s 4823(can)s 5212(de\207ne)s 5853(a)s 6019(page)s
+6527(lik)s 2(e)k 6939(this:)s 220 fnt35 480 1808(def @P)m 8(age)k
+480 1520({)m 480 1232( //1i ||1i)m 480 944( 6i @Wide 9.5i @High)m 480 656( { @T)m 26(e)k 6(xtPlace //1r)k -8(t @F)k 6(ootSect })k
+480 368( ||1i //1i)m 480 80(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save 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
+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
+240 fnt84 0 13840(6)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(No)m 6(w)k 220 fnt35
+520 13202(@P)m 8(age)k 240 fnt82 1306 13205(is)m 1523(an)s
+1813(eight)s 2358(by)s 2659(ele)s 6(v)k 3(en)k
+3338(and)s 3749(a)s 3922(half)s 4371(inch)s 4847(object,)s
+5545(with)s 6034(one)s 6443(inch)s 6919(mar)s 4(gins,)k
+7799(a)s 7972(place)s 8539(at)s 8778(the)s 0 12917(top)m
+367(for)s 713(te)s 3(xt,)k 1183(and)s 1595(a)s
+1769(section)s 2511(at)s 2751(the)s 3108(bottom)s 3854(for)s
+4200(footnotes)s 5149(\(since)s 220 fnt35 5783 12914(//1r)m -8(t)k
+240 fnt82 6233 12917(bottom-justi\207es)m 7792(the)s 8149(follo)s 6(wing)k
+0 12629(object\).)m 827(It)s 1032(will)s 1458(be)s 1740(con)s 9(v)k 3(enient)k
+2838(for)s 3176(us)s 3440(to)s 3679(sho)s 6(w)k
+4233(the)s 4581(ef)s 6(fect)k 5177(of)s 5448(in)s 9(v)k 4(oking)k
+220 fnt35 6340 12626(@P)m 8(age)k 240 fnt82 7119 12629(lik)m 2(e)k
+7531(this:)s 160 fnt35 480 11528(@P)m 6(age)k 220 fnt78
+1240 11514(\336)m gsave
+1690 9795 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+240 fnt82 0 9344(with)m 482(the)s
+830(in)s 9(v)k 4(ok)k 2(ed)k 1645(symbol)s
+2405(appearing)s 3401(to)s 3640(the)s 3988(left)s 4365(of)s
+4636(the)s 4984(arro)s 6(w)k 15(,)k 5627(and)s
+6031(its)s 6307(body)s 6841(to)s 7080(the)s 7428(right.)s
+480 8970(The)m 908(de\207nition)s 1882(of)s 2153(a)s 2319(v)s 3(ertical)k
+3086(list)s 3437(of)s 3708(pages)s 4304(should)s 5001(come)s
+5575(as)s 5825(no)s 6118(surprise:)s 220 fnt35 480 8469(def @P)m 8(ageList)k
+480 8181({)m 480 7893( @P)m 8(age // @P)k 8(ageList)k 480 7605(})m
+240 fnt82 0 7111(This)m 476(allo)s 6(ws)k 1145(in)s 9(v)k 4(ocations)k
+2286(lik)s 2(e)k 2698(the)s 3046(follo)s 6(wing:)k
+gsave
+480 0 translate
+1.0867 1.0000 scale
+160 fnt35 0 6010(@P)m 6(ageList)k 220 fnt78 890 5996(\336)m
+gsave
+1220 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 1220 4047(@P)m 6(ageList)k 220 fnt78 3267 5996(\336)m
+gsave
+3597 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+3597 1783 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 3597 1553(@P)m 6(ageList)k 220 fnt78 5644 5996(\336)m
+gsave
+5974 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+5974 1783 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+
+grestore
+0 1067(setting)m 220 fnt35 750 1064(@P)m 8(ageList)k 240 fnt82
+1874 1067(to)m 200 fnt35 2113 1069(@Null)m 240 fnt82 2706 1067(on)m
+3003(the)s 3351(last)s 3742(step.)s 4291(An)s 3(y)k
+4755(number)s 5546(of)s 5817(pages)s 6413(can)s 6802(be)s
+7084(generated.)s 480 693(A)m 703(de\207nition)s 1669(for)s 220 fnt35
+1999 690(@T)m 26(e)k 6(xtPlace)k 240 fnt82 3209 693(is)m
+3411(be)s 3(yond)k 4164(us)s 4420(at)s 4644(present,)s
+5433(since)s 220 fnt35 5972 690(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 7182 693(must)m 7699(be)s 7973(replaced)s 8832(by)s
+0 405(dif)m 6(ferent)k 877(parts)s 1394(of)s 1667(the)s
+2018(te)s 3(xt)k 2435(of)s 2708(the)s 3059(document)s
+4065(on)s 4364(dif)s 6(ferent)k 5242(pages.)s 5953(But)s
+6361(we)s 6699(can)s 7090(de\207ne)s 220 fnt35 7733 402(@F)m 6(ootSect)k
+240 fnt82 8887 405(to)m 0 117(be)m 282(a)s 448(small)s
+1020(space)s 1607(follo)s 6(wed)k 2509(by)s 2803(a)s
+2969(horizontal)s 3993(line)s 4407(follo)s 6(wed)k 5309(by)s
+5603(a)s 5769(list)s 6120(of)s 6391(places)s 7039(where)s
+7679(footnotes)s 8620(go:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13844(1.2.)m 454(De\207nitions)s 240 fnt84 8951 13841(7)m
+220 fnt35 480 13208(def @F)m 6(ootList )k 480 12920({ )m 480 12632( @F)m 6(ootPlace //0.3v @F)k 6(ootList)k
+480 12344(} )m 480 12056( )m 480 11768(def @F)m 6(ootSect)k 480 11480({ )m
+480 11192( //0.3v 1i @Wide @HLine)m 480 10904( //0.3v @F)m 6(ootList )k 480 10616(} )m 240 fnt82
+0 10122(assuming)m 950(that)s 220 fnt35 1360 10119(@HLine)m 240 fnt82
+2199 10122(will)m 2617(produce)s 3436(a)s 3594(horizontal)s 4610(line)s
+5016(of)s 5279(the)s 5619(indicated)s 6545(width.)s 7246(W)s 9(ith)k
+7764(this)s 8152(de\207nition)s 0 9834(we)m 335(can)s 724(generate)s
+1589(pages)s 2185(lik)s 2(e)k 2597(this:)s gsave
+480 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35
+170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+220 fnt78 2647 8719(\336)m gsave
+3097 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+567 0 0 0 160 180 44 170 346 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+170 173(@F)m 4(ootList)k
+grestore
+5264(\336)s gsave
+5714 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+567 0 0 0 160 180 44 170 522 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+170 349(@F)m 4(ootPlace)k 170 173(@F)m 4(ootList)k
+grestore
+240 fnt82
+0 6549(and)m 404(so)s 670(on)s 967(for)s 1305(arbitrarily)s
+2312(man)s 3(y)k 2895(footnotes.)s 480 6175(W)m 19(e)k
+852(will)s 1281(see)s 1646(in)s 1892(the)s 2244(ne)s 3(xt)k
+2716(section)s 3454(ho)s 6(w)k 3918(in)s 9(v)k 4(ocations)k
+5063(of)s 220 fnt35 5337 6172(@P)m 8(ageList,)k 6511(@F)s 6(ootSect)k
+240 fnt82 7665 6175(and)m 220 fnt35 8073 6172(@F)m 6(ootList)k
+240 fnt82 0 5887(are)m 356(replaced)s 1232(by)s 1535(their)s
+2041(bodies)s 2726(only)s 3216(when)s 3801(the)s 4158(need)s
+4677(to)s 4925(insert)s 5524(te)s 3(xt)k 5949(and)s
+6362(footnotes)s 7312(obliges)s 8063(Lout)s 8584(to)s 8833(do)s
+0 5599(so;)m 352(otherwise)s 1364(the)s 1740(in)s 9(v)k 4(ocations)k
+2908(are)s 3283(replaced)s 4177(by)s 220 fnt35 4499 5596(@Null)m
+240 fnt82 5084 5599(.)m 5275(In)s 5559(this)s 5982(w)s 2(ay)k 15(,)k
+6499(the)s 6874(right)s 7413(number)s 8231(of)s 8530(pages)s
+0 5311(is)m 223(made,)s 862(the)s 1224(small)s 1810(line)s
+2238(appears)s 3033(only)s 3527(on)s 3838(pages)s 4447(that)s
+4879(ha)s 4(v)k 3(e)k 5394(at)s 5640(least)s
+6151(one)s 6567(footnote,)s 7485(and)s 7903(unnecessary)s 0 5023(concatenation)m
+1385(symbols)s 2234(disappear)s 13(.)k 480 4649(This)m 958(approach)s
+1894(to)s 2135(page)s 2645(layout)s 3305(is)s 3517(the)s
+3867(most)s 4394(original)s 5194(contrib)s 4(ution)k 6418(Lout)s
+6932(has)s 7304(made)s 7880(to)s 8122(document)s 0 4361(formatting.)m
+1172(It)s 1377(is)s 1587(e)s 3(xtraordinarily)k 3057(\210e)s 3(xible.)k
+3935(T)s 19(w)k 2(o-column)k 5207(pages?)s 5971(Use)s
+220 fnt35 480 3860({2.8i @Wide @T)m 26(e)k 6(xtPlace} ||0.4i {2.8i @Wide @T)k 26(e)k 6(xtPlace})k
+240 fnt82 0 3366(instead)m 768(of)s 220 fnt35 1072 3363(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 2230 3366(.)m 2427(F)s 3(ootnotes)k 3452(in)s
+3728(smaller)s 4523(type?)s 5187(Use)s 220 fnt35 5648 3363(-2p)m
+6051(@F)s 6(ont)k 6797(@F)s 6(ootPlace)k 240 fnt82
+8086 3366(instead)m 8855(of)s 220 fnt35 0 3075(@F)m 6(ootPlace)k
+240 fnt82 1196 3078(.)m 1360(And)s 1831(on)s 2128(and)s
+2532(on.)s 240 fnt84 0 2330(1.3.)m 471(Cr)s 4(oss)k
+1106(r)s 4(efer)k 4(ences)k 240 fnt82 480 1898(A)m
+705(cross)s 1241(reference)s 2178(in)s 2415(common)s 3304(terminology)s
+4521(is)s 4725(something)s 5769(lik)s 2(e)k 6176(`see)s
+6610(T)s 19(able)k 7185(6')s 7411(or)s 7664(`see)s
+8098(page)s 8600(57')s 8946(\211)s 0 1610(a)m 168(reference)s
+1114(within)s 1785(a)s 1954(document)s 2961(to)s 3202(some)s
+3766(other)s 4320(part)s 4754(of)s 5028(it.)s 5327(Readers)s
+6150(\207nd)s 6584(them)s 7125(v)s 3(ery)k 7604(useful,)s
+8298(b)s 4(ut)k 8663(the)s 3(y)k 0 1322(are)m
+343(a)s 504(major)s 1116(problem)s 1969(for)s 2302(authors.)s
+3165(As)s 3478(the)s 3821(document)s 4820(is)s 5025(re)s 6(vised,)k
+5812(T)s 19(able)k 6388(6)s 6556(becomes)s 7440(T)s 19(able)k
+8016(7,)s 8238(the)s 8581(thing)s 0 1034(on)m 297(page)s
+805(57)s 1093(mo)s 3(v)k 3(es)k 1763(to)s
+2002(page)s 2510(63,)s 2857(and)s 3261(all)s 3554(the)s
+3902(cross)s 4444(references)s 5475(must)s 6000(be)s 6282(changed.)s
+480 660(The)m 917(Scribe)s 1593(document)s 2606(formatter)s 9(,)k
+3601(de)s 6(v)k 3(eloped)k 4644(by)s 4947(Brian)s
+5545(K.)s 5831(Reid)s 6351([6)s 6543(],)s 6739(introduced)s
+7829(a)s 8005(scheme)s 8788(for)s 0 372(k)m 2(eeping)k
+804(track)s 1337(of)s 1603(cross)s 2140(references.)s 3279(It)s
+3479(allo)s 6(ws)k 4143(you)s 4553(to)s 4787(gi)s 6(v)k 3(e)k
+5241(names)s 5898(to)s 6132(tables,)s 6791(\207gures,)s 7544(etc.,)s
+7984(and)s 8383(to)s 8617(refer)s 0 84(to)m 233(them)s
+764(by)s 1051(name.)s 1726(The)s 2147(formatter)s 3087(inserts)s
+3754(the)s 4095(appropriate)s 5233(numbers)s 6101(in)s 6337(place)s
+6890(of)s 7154(the)s 7495(names,)s 8206(so)s 8465(that)s
+8876(as)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(8)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(the)m 342(document)s 1339(is)s
+1543(re)s 6(vised,)k 2327(the)s 2669(cross)s 3204(references)s
+4229(are)s 4569(k)s 2(ept)k 5033(up)s 5319(to)s
+5552(date)s 5999(automatically)s 15(.)k 7442(Lout)s 7947(has)s
+8310(adopted)s 0 12917(and)m 404(e)s 3(xtended)k 1323(this)s
+1719(scheme.)s 480 12543(In)m 726(Lout,)s 1275(automatic)s 2260(cross)s
+2792(referencing)s 3922(w)s 2(orks)k 4546(in)s 4779(the)s
+5117(follo)s 6(wing)k 6084(w)s 2(ay)k 15(.)k
+6620(First)s 7107(de\207ne)s 7738(a)s 7894(symbol)s 8644(with)s
+0 12255(a)m 166(parameter)s 1180(with)s 1662(the)s 2010(special)s
+2728(name)s 220 fnt35 3302 12252(@T)m 26(ag:)k 480 11754(def @T)m 26(ab)k 4(le)k
+480 11466( left @T)m 26(ag)k 480 11178( r)m -3(ight @V)k 15(alue)k
+480 10890({)m 480 10602( ||1i @V)m 15(alue)k 480 10314(})m 240 fnt82
+0 9820(When)m 643(this)s 1054(symbol)s 1829(is)s 2054(in)s 9(v)k 4(ok)k 2(ed,)k
+2933(the)s 3296(v)s 6(alue)k 3879(gi)s 6(v)k 3(en)k
+4474(to)s 220 fnt35 4727 9817(@T)m 26(ag)k 240 fnt82
+5365 9820(should)m 6077(be)s 6374(a)s 6555(simple)s 7263(w)s 2(ord)k
+7826(lik)s 2(e)k 220 fnt35 8253 9817(cities)m 240 fnt82
+8745 9820(,)m 8867(or)s 0 9532(se)m 6(v)k 3(eral)k
+722(simple)s 1415(w)s 2(ords)k 2049(juxtaposed)s 3144(lik)s 2(e)k
+220 fnt35 3556 9529(cities compare)m 240 fnt82 4962 9532(;)m 5074(it)s
+5266(serv)s 3(es)k 5911(to)s 6150(name)s 6724(the)s
+7072(in)s 9(v)k 4(ocation:)k 220 fnt35 480 9031({ cities compare } @T)m 26(ab)k 4(le)k
+480 8743({)m 480 8455( )m 8(W)k 8(ashington |0.5i Canberr)k 2(a)k
+480 8167(})m 240 fnt82 0 7673(W)m 19(e)k 410(may)s
+917(no)s 6(w)k 1419(refer)s 1969(to)s 2249(this)s
+2686(in)s 9(v)k 4(ocation)k 3782(else)s 6(where)k
+4828(in)s 5112(the)s 5501(document,)s 6593(using)s 7206(the)s
+240 fnt83 7595 7675(cr)m 10(oss)k 8187(r)s 8(efer)k 8(ence)k
+220 fnt35 0 7382(@T)m 26(ab)k 4(le&&{ cities compare }.)k 240 fnt82
+2918 7385(Here)m 220 fnt35 3480 7382(&&)m 240 fnt82 3870 7385(is)m
+4122(the)s 240 fnt83 4511 7387(cr)m 10(oss)k 5103(r)s 8(efer)k 8(ence)k
+6084(symbol)s 240 fnt82 6762 7385(;)m 6916(its)s 7233(left)s
+7652(parameter)s 8708(is)s 8960(a)s 0 7097(symbol)m 772(and)s
+1189(its)s 1478(right)s 2002(parameter)s 3028(is)s 3251(the)s
+3612(v)s 6(alue)k 4193(of)s 4476(the)s 220 fnt35
+4837 7094(@T)m 26(ag)k 240 fnt82 5473 7097(parameter)m 6500(of)s
+6783(some)s 7357(in)s 9(v)k 4(ocation)k 8424(of)s
+8708(that)s 0 6809(symbol.)m 869(Of)s 1193(course)s 1873(it')s 13(s)k
+2215(simplest)s 3071(if)s 3288(you)s 3703(use)s 4078(just)s
+4483(a)s 4649(one-w)s 2(ord)k 5622(tag;)s 6026(then)s
+6495(no)s 6788(braces)s 7449(are)s 7796(needed.)s 480 6435(A)m
+695(cross)s 1222(reference)s 2150(is)s 2345(not)s 2696(an)s
+2964(object;)s 3645(the)s 3978(reader)s 4619(should)s 5301(think)s
+5839(of)s 6095(it)s 6272(as)s 6507(an)s 6775(arro)s 6(w)k
+7365(in)s 7593(the)s 7926(\207nal)s 8391(printed)s 0 6147(document,)m
+1049(be)s 3(ginning)k 2054(at)s 2284(the)s 2629(cross)s
+3169(reference)s 4109(and)s 4511(ending)s 5213(at)s 5443(the)s
+5788(top)s 6145(of)s 6413(the)s 6759(tar)s 4(get)k
+7355(in)s 9(v)k 4(ocation.)k 8513(Three)s 0 5859(special)m
+715(v)s 6(alues)k 1367(may)s 1830(be)s 2108(gi)s 6(v)k 3(en)k
+2685(to)s 2920(the)s 3264(right)s 3772(parameter)s 4782(of)s
+220 fnt35 5050 5856(&&)m 240 fnt82 5338 5859(:)m 220 fnt35
+5500 5856(preceding)m 240 fnt82 6451 5859(,)m 220 fnt35 6555 5856(f)m 6(ollo)k 3(wing)k
+240 fnt82 7385 5859(,)m 7488(and)s 220 fnt35 7888 5856(f)m 6(oll_or_prec)k
+240 fnt82 9022 5859(.)m 0 5571(The)m 467(cross)s 1049(reference)s
+220 fnt35 2032 5568(@T)m 26(ab)k 4(le&&preceding)k 240 fnt82
+4116 5571(points)m 4792(to)s 5071(some)s 5671(table)s 6231(appearing)s
+7267(earlier)s 7975(in)s 8258(the)s 8646(\207nal)s 0 5283(printed)m
+760(document)s 1790(than)s 2285(itself;)s 2899(that)s 3343(is,)s
+3635(the)s 4009(arro)s 6(w)k 4640(is)s 4876(guaranteed)s
+6009(to)s 6274(point)s 6852(backw)s 2(ards)k 7950(through)s
+8778(the)s 0 4995(document.)m 1108(Usually)s 1907(it)s 2100(points)s
+2737(to)s 2977(the)s 3326(nearest)s 4063(preceding)s 5060(in)s 9(v)k 4(ocation.)k
+6222(Similarly)s 15(,)k 220 fnt35 7203 4992(@T)m 26(ab)k 4(le&&f)k 6(ollo)k 3(wing)k
+240 fnt82 0 4707(points)m 636(forw)s 2(ards,)k 1590(usually)s
+2335(to)s 2574(the)s 2922(nearest)s 3657(follo)s 6(wing)k
+4634(in)s 9(v)k 4(ocation.)k 220 fnt35 5795 4704(@T)m 26(ab)k 4(le&&f)k 6(oll_or_prec)k
+240 fnt82 8022 4707(is)m 8232(the)s 8579(same)s 0 4419(as)m
+220 fnt35 250 4416(@T)m 26(ab)k 4(le&&f)k 6(ollo)k 3(wing)k
+240 fnt82 2173 4419(if)m 2390(it)s 2582(e)s 3(xists,)k
+3230(otherwise)s 4215(it)s 4407(is)s 4617(the)s 4965(same)s
+5512(as)s 220 fnt35 5762 4416(@T)m 26(ab)k 4(le&&preceding)k
+240 fnt82 7746 4419(.)m 480 4045(This)m 962(section)s 1702(has)s
+2079(been)s 2594(concerned)s 3641(with)s 4130(what)s 4661(a)s
+4834(cross)s 5382(reference)s 6331(is)s 6548(\211)s 6734(an)s
+7023(arro)s 6(w)k 7635(from)s 8165(one)s 8574(point)s
+0 3757(in)m 242(a)s 407(document)s 1410(to)s 1648(another)s
+2424(\211)s 2603(b)s 4(ut)k 2963(not)s 3328(with)s
+3809(ho)s 6(w)k 4269(it)s 4460(is)s 4669(used.)s
+5271(One)s 5724(simple)s 6416(w)s 2(ay)k 6866(to)s
+7104(use)s 7478(a)s 7643(cross)s 8183(reference)s 0 3469(is)m
+210(to)s 449(put)s 815(it)s 1007(where)s 1647(an)s
+1930(object)s 2574(is)s 2784(e)s 3(xpected,)k 3738(lik)s 2(e)k
+4150(this:)s 220 fnt35 480 2968(a | @T)m 26(ab)k 4(le&&cities | c)k
+240 fnt82 0 2513(In)m 265(this)s 670(case)s 1146(the)s
+1504(cross)s 2055(reference)s 3007(will)s 3443(be)s 3734(replaced)s
+4610(by)s 4914(a)s 5089(cop)s 2(y)k 5616(of)s
+5897(the)s 6254(in)s 9(v)k 4(ocation)k 7317(it)s
+7519(points)s 8164(to:)s 8525(in)s 8778(the)s 0 2225(e)m 3(xample)k
+866(just)s 1275(gi)s 6(v)k 3(en,)k 1909(a)s
+2079(table)s 2603(will)s 3033(appear)s 3734(between)s 220 fnt35
+4591 2222(a)m 240 fnt82 4772 2225(and)m 220 fnt35 5180 2222(c.)m
+240 fnt82 5456 2225(Other)m 6064(applications)s 7274(of)s 7549(cross)s
+8095(references)s 0 1937(may)m 466(be)s 747(found)s 1364(in)s
+1606(Chapter)s 2423(4,)s 2649(including)s 3606(\207nding)s 4337(the)s
+4685(number)s 5475(of)s 5746(the)s 6093(page)s 6601(where)s
+7240(something)s 8289(appears,)s 0 1649(producing)m 1018(running)s 1809(page)s
+2311(headers)s 3085(and)s 3483(footers,)s 4246(and)s 4643(accessing)s
+5606(databases)s 6566(of)s 6831(Roman)s 7573(numerals,)s 8549(refer)s
+8998(-)s 0 1361(ences,)m 638(etc.)s 1080(Cross)s 1676(references)s
+2707(are)s 3054(also)s 3492(used)s 3989(by)s 4283(g)s 1(alle)k 3(ys,)k
+5063(as)s 5313(will)s 5739(be)s 6021(e)s 3(xplained)k
+7006(in)s 7249(the)s 7597(ne)s 3(xt)k 8066(section.)s
+480 987(The)m 943(implementation)s 2535(of)s 2841(cross)s 3418(referencing)s
+4593(copies)s 5290(e)s 6(v)k 3(ery)k 5901(symbol)s
+6696(in)s 9(v)k 4(ocation)k 7785(with)s 8302(a)s
+220 fnt35 8503 984(@T)m 26(ag)k 240 fnt82 0 699(parameter)m
+1008(into)s 1427(the)s 240 fnt83 1768 701(cr)m 10(oss-r)k 8(efer)k 8(ence)k
+3275(database)s 240 fnt82 4133 699(,)m 4233(a)s 4393(collection)s
+5385(of)s 5650(\207les)s 6093(whose)s 6754(names)s 7410(end)s
+7807(in)s 220 fnt35 8044 696(.ld)m 240 fnt82 8316 699(inde)m 3(x)k 3(ed)k
+0 411(by)m 286(one)s 679(\207le)s 1032(whose)s 1691(name)s
+2256(is)s 220 fnt35 2458 408(lout.li)m 240 fnt82 2954 411(.)m
+3109(It)s 3306(is)s 3507(generally)s 4441(the)s 4781(case)s
+5239(that)s 5649(the)s 5988(b)s 4(ulk)k 6462(content)s
+7218(of)s 7480(a)s 7638(symbol)s 8389(such)s 8876(as)s
+0 123(the)m 337(table)s 845(abo)s 3(v)k 3(e)k
+1455(is)s 1653(contained)s 2629(in)s 2860(its)s 3124(right)s
+3623(or)s 3870(body)s 4393(parameter)s 9(,)k 5433(and)s
+5825(that)s 6231(this)s 6615(b)s 4(ulk)k 7086(content)s
+7838(is)s 8036(not)s 8390(needed)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13845(1.3.)m 454(Cr)s 10(oss)k 1058(r)s 8(efer)k 8(ences)k
+240 fnt84 8952 13842(9)m 240 fnt82 0 13207(by)m 297(cross)s
+843(references)s 1878(to)s 2121(the)s 2472(symbol.)s 3345(Hence,)s
+4067(to)s 4310(sa)s 4(v)k 3(e)k 4787(space)s
+5378(in)s 5625(the)s 5977(database,)s 6910(Lout)s 7426(replaces)s
+8263(the)s 8615(right)s 0 12919(parameter)m 1011(of)s 1279(each)s
+1771(symbol)s 2527(it)s 2716(writes)s 3347(into)s 3768(it)s
+3957(by)s 4248(the)s 4592(w)s 2(ord)k 5137(???)s
+5505(whene)s 6(v)k 3(er)k 6482(the)s 6827(right)s
+7335(parameter)s 8345(appears)s 0 12631(to)m 249(be)s 542(lar)s 4(ge.)k
+1190(The)s 1629(table)s 2160(abo)s 3(v)k 3(e)k
+2792(w)s 2(ould)k 3458(appear)s 4166(as)s 4427(???)s
+4809(because)s 5632(of)s 5914(this)s 6321(optimization,)s 7647(and)s
+8062(in)s 8316(general,)s 0 12343(the)m 367(user)s 845(must)s
+1390(ensure)s 2089(that)s 2527(an)s 3(y)k 2944(content)s
+3728(required)s 4601(by)s 4915(cross)s 5477(references)s 6527(is)s
+6757(contained)s 7765(in)s 8028(parameters)s 0 12055(other)m 545(than)s
+1007(the)s 1348(right)s 1852(or)s 2104(body)s 2631(parameter)s 13(.)k
+3729(This)s 4199(optimization)s 5457(does)s 5940(not)s 6299(apply)s
+6878(when)s 7447(the)s 7788(symbol)s 8541(being)s 0 11767(written)m
+733(into)s 1158(the)s 1506(cross-reference)s 3019(database)s 3898(is)s
+4108(a)s 4274(g)s 1(alle)k 3(y)k 15(.)k
+240 fnt84 0 10974(1.4.)m 471(Galleys)s 240 fnt82 480 10497(It)m
+695(is)s 915(time)s 1406(to)s 1655(pause)s 2267(and)s
+2681(ask)s 3072(ourselv)s 3(es)k 4033(ho)s 6(w)k
+4505(close)s 5062(we)s 5408(are)s 5765(to)s 6015(achie)s 6(ving)k
+7002(our)s 7392(aim)s 7820(of)s 8102(producing)s 0 10209(neatly)m
+638(formatted)s 1624(documents.)s 2825(W)s 19(e)k 3194(can)s
+3583(certainly)s 4472(produce)s 5299(the)s 5647(pieces)s 6295(of)s
+6566(a)s 6732(document:)s 160 fnt84 870 9532(PURCELL)m 128 fnt82
+1626 9604(1)m 160 fnt82 480 9240(In)m 705(the)s 991(w)s 1(orld)k
+1455(of)s 1691(music)s 480 9060(England)m 1192(is)s 1473(supposed)s
+480 8880(to)m 686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 8700(If)m 775(she)s 1166(produces)s 1918(an)s 480 8520(indif)m 4(ferent)k
+1446(composer)s 480 8340(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 8160(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 7980(perfectly)m 1215(normal)s 1837(and)s 480 7800(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 7620(students)m
+1215(of)s 1574(musical)s 480 7440(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 7260(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 7080(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 6900(considered)m
+1211(a)s 1322(freak.)s 800 6667(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 6487(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 6307(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 6127(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 5947(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 5767(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 5587(English)m
+1005(master)s 8(.)k 128 fnt82 2634 9784(1)m 160 fnt82
+2685 9712(Blom,)m 3107(Eric.)s 160 fnt83 3476 9713(Some)m 3852(Gr)s 5(eat)k
+2634 9533(Composer)m 1(s.)k 160 fnt82 3728 9532(Oxford,)m 2634 9352(1944.)m
+gsave
+4788 7375 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+4788 4881 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+4788 2387 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 4788 2157(@P)m 6(ageList)k 240 fnt82 0 1671(b)m 4(ut)k
+362(when)s 938(we)s 1273(try)s 1592(to)s 1831(mer)s 4(ge)k
+2480(them)s 3018(together)s 9(,)k 3899(we)s 4234(encounter)s
+5237(tw)s 2(o)k 5647(obstacles.)s 480 1297(First,)m 1029(when)s
+1610(an)s 1899(object)s 2548(is)s 2763(entered)s 3530(at)s
+3767(a)s 3938(certain)s 4650(place)s 5215(in)s 5463(the)s
+5817(document,)s 6873(it)s 7070(appears)s 7857(at)s 8094(that)s
+8518(place.)s 0 1009(But)m 393(a)s 546(footnote)s 1385(is)s
+1582(naturally)s 2472(entered)s 3219(immediately)s 4454(after)s 4936(the)s
+5271(point)s 5810(it)s 5988(refers)s 6568(to)s 6794(\(`)s
+200 fnt82 6934 1018(PURCELL)m 240 fnt82 7819 1009(')m 7917(in)s
+8147(this)s 8529(case\),)s 0 721(yet)m 352(it)s 544(appears)s
+1325(some)s 6(where)k 2464(else:)s 2941(at)s 3173(the)s
+3521(bottom)s 4259(of)s 4530(a)s 4696(page.)s 480 347(Second,)m
+1285(all)s 1570(our)s 1942(features)s 2740(b)s 4(uild)k
+3278(up)s 3564(lar)s 4(ger)k 4168(objects)s 4889(out)s
+5247(of)s 5510(smaller)s 6265(ones,)s 6803(b)s 4(ut)k
+7158(the)s 200 fnt82 7498 356(PURCELL)m 240 fnt82 8435 347(object,)m
+0 59(for)m 333(e)s 3(xample,)k 1242(must)s 1762(be)s
+2039(brok)s 2(en)k 2753(do)s 6(wn)k 3332(into)s
+3752(page-sized)s 4827(pieces.)s 5583(This)s 6053(occurs)s 6723(when)s
+7294(the)s 7637(a)s 4(v)k 6(ailable)k 8539(space)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(10)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(at)m 230(the)s 575(`some)s 6(where)k
+1790(else')s 2270(is)s 2477(insuf\207cient)s 3610(to)s 3846(hold)s
+4327(the)s 4672(entire)s 5268(object,)s 5957(so)s 6220(this)s
+6613(second)s 7333(obstacle)s 8169(arises)s 8760(out)s 0 12917(of)m
+271(the)s 619(\207rst.)s 480 12543(Lout')m 13(s)k 1135(last)s
+1518(major)s 2127(feature,)s 2888(which)s 3523(we)s 3850(introduce)s
+4801(to)s 5032(o)s 3(v)k 3(ercome)k 6017(these)s
+6557(obstacles,)s 7532(is)s 7734(the)s 240 fnt83 8074 12545(galle)m 7(y)k
+240 fnt82 8699 12543(\(the)m 0 12255(name)m 564(is)s 764(borro)s 6(wed)k
+1723(from)s 2237(the)s 2575(g)s 1(alle)k 3(ys)k
+3288(used)s 3775(in)s 4008(manual)s 4757(typesetting\).)s 6039(A)s
+6259(g)s 1(alle)k 3(y)k 6882(is)s 7082(an)s
+7355(object)s 7989(plus)s 8429(a)s 8584(cross)s 0 11967(reference)m
+943(which)s 1585(points)s 2221(to)s 2460(where)s 3100(the)s
+3448(object)s 4092(is)s 4302(to)s 4541(appear)s 13(.)k
+5329(The)s 5757(e)s 3(xample)k 6620(abo)s 3(v)k 3(e)k
+7242(has)s 7612(three)s 8145(g)s 1(alle)k 3(ys:)k
+160 fnt84 870 11234(PURCELL)m 128 fnt82 1626 11306(1)m 160 fnt82
+480 10942(In)m 705(the)s 991(w)s 1(orld)k 1455(of)s
+1691(music)s 480 10762(England)m 1192(is)s 1473(supposed)s 480 10582(to)m
+686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 10402(If)m 775(she)s 1166(produces)s 1918(an)s 480 10222(indif)m 4(ferent)k
+1446(composer)s 480 10042(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 9862(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 9682(perfectly)m 1215(normal)s 1837(and)s 480 9502(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 9322(students)m
+1215(of)s 1574(musical)s 480 9142(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 8962(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 8782(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 8602(considered)m
+1211(a)s 1322(freak.)s 800 8369(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 8189(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 8009(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 7829(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 7649(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 7469(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 7289(English)m
+1005(master)s 8(.)k gsave
+3321 11312 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1134 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3201 9047 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+gsave
+3201 6553 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+gsave
+3201 4059 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+160 fnt35 3201 3829(@P)m 6(ageList)k
+gsave
+6688 11541 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6748 11497(to)m 6947(printer)s gsave
+4335 9295 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+4335 9295 translate
+240 fnt82 963 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+4335 9295 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+128 fnt82 5418 9331(1)m
+160 fnt82 5469 9259(Blom,)m 5891(Eric.)s 160 fnt83 6260 9260(Some)m
+6636(Gr)s 5(eat)k 5418 9080(Composer)m 1(s.)k 160 fnt82
+6512 9079(Oxford,)m 5418 8899(1944.)m 240 fnt82 0 3343(A)m 229(g)s 1(alle)k 3(y)k
+861(replaces)s 1693(the)s 2039(in)s 9(v)k 4(ocation)k
+3091(pointed)s 3866(to)s 4103(by)s 4395(its)s 4670(cross)s
+5210(reference.)s 6260(If)s 6488(space)s 7073(is)s 7282(not)s
+7646(suf\207cient)s 8593(there)s 0 3055(to)m 232(hold)s 708(it)s
+892(all,)s 1230(the)s 1570(remainder)s 2590(of)s 2854(the)s
+3194(g)s 1(alle)k 3(y)k 3820(is)s 4023(split)s
+4486(of)s 6(f)k 4822(\(the)s 5242(v)s 3(ertical)k
+6001(concatenation)s 7378(symbol)s 8130(preceding)s 0 2767(it)m 199(being)s
+791(discarded\))s 1842(and)s 2253(it)s 2452(replaces)s 3293(later)s
+3783(in)s 9(v)k 4(ocations)k 4931(of)s 5209(the)s
+5564(same)s 6119(symbol.)s 6935(This)s 7418(is)s 7635(e)s 3(xactly)k
+8383(what)s 8916(is)s 0 2479(required)m 854(to)s 1093(get)s
+1445(te)s 3(xt)k 1860(and)s 2264(footnotes)s 3205(onto)s
+3684(pages.)s 480 2105(T)m 19(o)k 780(create)s 1405(a)s
+1571(g)s 1(alle)k 3(y)k 15(,)k 2243(\207rst)s
+2674(de\207ne)s 3315(a)s 3481(symbol)s 4241(with)s 4723(a)s
+4889(special)s 220 fnt35 5607 2102(into)m 240 fnt82 6013 2105(clause,)m
+6717(lik)s 2(e)k 7129(this:)s 220 fnt35 480 1604(def @F)m 6(ootNote into { @F)k 6(ootPlace&&f)k 6(ollo)k 3(wing })k
+480 1316( r)m -3(ight x)k 480 1028({)m 480 740( 8p @F)m 6(ont x)k
+480 452(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(1.4.)m 454(Galle)s 7(ys)k 240 fnt84
+8839 13840(11)m 240 fnt82 0 13205(An)m 343(in)s 9(v)k 4(ocation)k
+1390(of)s 1654(such)s 2142(a)s 2301(symbol)s 3054(will)s
+3473(then)s 3934(be)s 4209(a)s 4368(g)s 1(alle)k 3(y)k
+4994(whose)s 5655(object)s 6292(is)s 6495(the)s 6835(result)s
+7418(of)s 7682(the)s 8022(in)s 9(v)k 4(ocation,)k
+0 12917(and)m 399(whose)s 1062(cross)s 1598(reference)s 2536(is)s
+2740(gi)s 6(v)k 3(en)k 3315(by)s 3603(the)s
+220 fnt35 3946 12914(into)m 240 fnt82 4347 12917(clause.)m 5102(The)s
+5525(right)s 6030(parameter)s 7039(of)s 7304(the)s 7647(cross)s
+8183(reference)s 0 12629(must)m 525(be)s 807(one)s 1209(of)s
+220 fnt35 1480 12626(preceding)m 240 fnt82 2431 12629(,)m 220 fnt35
+2538 12626(f)m 6(ollo)k 3(wing)k 240 fnt82 3368 12629(,)m
+3475(and)s 220 fnt35 3879 12626(f)m 6(oll_or_prec)k 240 fnt82
+5013 12629(.)m 480 12255(A)m 700(symbol,)s 1502(lik)s 2(e)k
+220 fnt35 1903 12252(@F)m 6(ootPlace)k 3(,)k 240 fnt82
+3196 12255(which)m 3827(is)s 4027(the)s 240 fnt83 4364 12257(tar)m 8(g)k 2(et)k
+240 fnt82 4979 12255(of)m 5239(a)s 5395(g)s 1(alle)k 3(y)k 15(,)k
+6056(must)s 6571(contain)s 7321(the)s 7659(special)s 8366(symbol)s
+220 fnt35 0 11964(@Galle)m 4(y)k 240 fnt82 898 11967(e)m 3(xactly)k
+1639(once)s 2147(in)s 2390(its)s 2666(body;)s 3258(often)s
+3806(this)s 4202(is)s 4412(all)s 4705(that)s 5123(the)s
+5471(body)s 6005(contains:)s 220 fnt35 480 11466(def @F)m 6(ootPlace { @Galle)k 4(y })k
+240 fnt82 0 10968(It)m 229(is)s 464(this)s 885(special)s
+1628(symbol)s 2412(that)s 2855(is)s 3090(replaced)s 3982(by)s
+4300(the)s 4673(incoming)s 5655(g)s 1(alle)k 3(y)k 15(,)k
+6352(in)s 6619(f)s 2(act,)k 7106(not)s 7497(the)s
+220 fnt35 7870 10965(@F)m 6(ootPlace)k 240 fnt82 0 10680(symbol)m
+760(as)s 1010(a)s 1176(whole.)s 480 10306(A)m 718(symbol)s
+1487(which)s 2138(contains)s 220 fnt35 2994 10303(@Galle)m 4(y)k
+240 fnt82 3832 10306(,)m 3948(either)s 4560(directly)s 5351(within)s
+6028(its)s 6313(body)s 6855(or)s 7123(indirectly)s 8101(within)s
+8778(the)s 0 10018(body)m 533(of)s 802(a)s 966(symbol)s
+1725(it)s 1915(in)s 9(v)k 4(ok)k 2(es,)k
+2750(is)s 2959(called)s 3585(a)s 240 fnt83 3749 10020(r)m 8(eceptive)k
+240 fnt82 4668 10018(symbol,)m 5478(meaning)s 6353(recepti)s 6(v)k 3(e)k
+7274(to)s 7511(g)s 1(alle)k 3(ys.)k 220 fnt35
+8346 10015(@F)m 6(oot)k 240 fnt82 8998 10018(-)m 220 fnt35
+0 9727(Place)m 240 fnt82 630 9730(is)m 870(recepti)s 6(v)k 3(e,)k
+1873(which)s 2545(mak)s 2(es)k 220 fnt35 3235 9727(@F)m 6(ootList,)k
+4364(@F)s 6(ootSect)k 240 fnt82 5545 9730(and)m 220 fnt35
+5979 9727(@P)m 8(ageList)k 240 fnt82 7133 9730(recepti)m 6(v)k 3(e)k
+8085(since)s 8663(the)s 3(y)k 0 9442(in)m 9(v)k 4(ok)k 2(e)k
+220 fnt35 704 9439(@F)m 6(ootPlace)k 3(.)k 240 fnt82
+2078 9442(If)m 2319(no)s 2623(g)s 1(alle)k 3(y)k
+3268(replaces)s 4112(an)s 3(y)k 220 fnt35 4520 9439(@Galle)m 4(y)k
+240 fnt82 5429 9442(within)m 6108(some)s 6680(in)s 9(v)k 4(ocation)k
+7745(of)s 8027(a)s 8204(recepti)s 6(v)k 3(e)k
+0 9154(symbol,)m 816(that)s 1239(in)s 9(v)k 4(ocation)k
+2297(is)s 2512(replaced)s 3383(by)s 220 fnt35 3682 9151(@Null)m
+240 fnt82 4267 9154(.)m 4435(The)s 4868(adv)s 6(antages)k
+5980(of)s 6256(this)s 6656(rule)s 7088(for)s 7430(page)s
+7943(layout)s 8606(were)s 0 8866(e)m 3(xplained)k 985(at)s
+1217(the)s 1565(end)s 1969(of)s 2240(Section)s 3014(1.2.)s
+480 8492(Let)m 852(us)s 1109(no)s 6(w)k 1563(follo)s 6(w)k
+2228(through)s 3023(the)s 3364(construction)s 4596(of)s 4861(our)s
+5233(e)s 3(xample)k 6089(document.)s 7190(Initially)s 7992(there)s
+8518(is)s 8721(just)s 0 8204(the)m 348(one)s 240 fnt83
+750 8206(r)m 10(oot)k 240 fnt82 1203 8204(g)m 1(alle)k 3(y)k 15(,)k
+1875(containing)s 2938(an)s 3221(une)s 3(xpanded)k 4434(in)s 9(v)k 4(ocation)k
+5488(of)s 220 fnt35 5759 8201(@P)m 8(ageList:)k 180 fnt35
+3315 7732(@P)m 7(ageList)k gsave
+5746 7778 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 5806 7734(to)m 6005(printer)s
+240 fnt82 0 7241(Then)m 602(the)s 200 fnt82 1004 7250(PURCELL)m
+240 fnt82 2002 7241(g)m 1(alle)k 3(y)k 2690(appears,)s
+3580(tar)s 4(geted)k 4457(to)s 4750(a)s 220 fnt35
+4969 7238(@T)m 26(e)k 6(xtPlace)k 3(.)k 240 fnt82
+6348 7241(Lout)m 6913(kno)s 6(ws)k 7638(that)s 8109(there)s
+8696(is)s 8960(a)s 220 fnt35 0 6950(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 1218 6953(hidden)m 1927(inside)s 220 fnt35 2554 6950(@P)m 8(ageList,)k
+240 fnt82 3724 6953(so)m 3990(it)s 4182(e)s 3(xpands)k
+220 fnt35 5015 6950(@P)m 8(ageList:)k 160 fnt84 870 6220(PURCELL)m
+128 fnt82 1626 6292(1)m 160 fnt82 480 5928(In)m 705(the)s
+991(w)s 1(orld)k 1455(of)s 1691(music)s 480 5748(England)m
+1192(is)s 1473(supposed)s 480 5568(to)m 686(be)s 921(a)s
+1078(mere)s 1481(pro)s 2(vince.)k 480 5388(If)m 775(she)s
+1166(produces)s 1918(an)s 480 5208(indif)m 4(ferent)k 1446(composer)s
+480 5028(or)m 763(performer)s 6(,)k 1577(that)s 1967(is)s
+480 4848(re)m 2(garded)k 1172(else)s 4(where)k 1940(as)s
+480 4668(perfectly)m 1215(normal)s 1837(and)s 480 4488(natural;)m 1072(b)s 3(ut)k
+1388(if)s 1608(foreign)s 480 4308(students)m 1215(of)s 1574(musical)s
+480 4128(history)m 1286(ha)s 3(v)k 2(e)k 1947(to)s
+480 3948(ackno)m 4(wledge)k 1440(a)s 1636(British)s 480 3768(musical)m
+1105(genius,)s 1686(he)s 1967(is)s 480 3588(considered)m 1211(a)s
+1322(freak.)s 800 3355(Such)m 1267(a)s 1488(freak)s 1967(is)s
+480 3175(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k 1736(if)s
+1884(we)s 480 2995(mak)m 1(e)k 875(a)s 1000(choice)s
+1467(of)s 1662(\207fteen)s 480 2815(of)m 717(the)s 1005(w)s 1(orld')k 8(s)k
+1574(musical)s 480 2635(classics,)m 1050(as)s 1228(here,)s 1586(we)s
+1820(\207nd)s 480 2455(that)m 774(we)s 1013(cannot)s 1495(omit)s
+1843(this)s 480 2275(English)m 1005(master)s 8(.)k gsave
+3434 6298 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 4033 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35
+170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 3315 3803(@P)m 6(ageList)k gsave
+6802 6527 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 6483(to)m
+7061(printer)s 240 fnt82 0 1790(After)m 586(promoting)s 1659(the)s
+2030(\207rst)s 2484(line)s 2922(into)s 220 fnt35 3370 1787(@T)m 26(e)k 6(xtPlace)k 3(,)k
+240 fnt82 4658 1790(the)m 5029(footnote)s 5905(g)s 1(alle)k 3(y)k
+6563(attached)s 7440(to)s 7702(it)s 7917(appears)s 8722(and)s
+0 1502(demands)m 938(an)s 1257(in)s 9(v)k 4(ocation)k
+2347(of)s 220 fnt35 2654 1499(@F)m 6(ootPlace)k 240 fnt82
+3946 1502(follo)m 6(wing)k 4960(its)s 5272(attachment)s 6416(point)s
+7004(\(`)s 200 fnt82 7144 1511(PURCELL)m 240 fnt82 8029 1502('\).)m
+8387(Such)s 8960(a)s 220 fnt35 0 1211(@F)m 6(ootPlace)k
+240 fnt82 1274 1214(is)m 1502(found)s 2138(at)s 2388(the)s
+2754(bottom)s 3511(of)s 3800(the)s 4166(\207rst)s 4616(page,)s
+5193(inside)s 220 fnt35 5838 1211(@F)m 6(ootSect,)k 240 fnt82
+7054 1214(which)m 7714(is)s 7943(accordingly)s 0 926(e)m 3(xpanded,)k
+1022(and)s 1426(the)s 1774(footnote)s 2627(is)s 2837(promoted)s
+3812(onto)s 4291(the)s 4639(page:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(12)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 160 fnt82 480 12579(In)m 705(the)s 991(w)s 1(orld)k
+1455(of)s 1691(music)s 480 12399(England)m 1192(is)s 1473(supposed)s
+480 12219(to)m 686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 12039(If)m 775(she)s 1166(produces)s 1918(an)s 480 11859(indif)m 4(ferent)k
+1446(composer)s 480 11679(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 11499(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 11319(perfectly)m 1215(normal)s 1837(and)s 480 11139(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 10959(students)m
+1215(of)s 1574(musical)s 480 10779(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 10599(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 10419(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 10239(considered)m
+1211(a)s 1322(freak.)s 800 10006(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 9826(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 9646(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 9466(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 9286(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 9106(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 8926(English)m
+1005(master)s 8(.)k gsave
+3434 12615 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 10788 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 fnt84 560 1987(PURCELL)m 128 fnt82
+1316 2059(1)m 140 fnt35 170 1807(@T)m 16(e)k 4(xtPlace)k
+gsave
+170 924 translate
+160 fnt82 567 0 0 0 160 180 40 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 785(1)m 160 fnt82 221 713(Blom,)m 703(Eric.)s
+160 fnt83 1133 714(Some)m 170 534(Gr)m 5(eat)k 734(Composer)s 1(s.)k
+160 fnt82 170 353(Oxford,)m 703(1944.)s 140 fnt35 170 173(@F)m 4(ootList)k
+
+grestore
+140 fnt35 3315 10573(@P)m 5(ageList)k gsave
+6802 13282 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 13238(to)m
+7061(printer)s 240 fnt82 0 8441(No)m 6(w)k 512(the)s
+858(promotion)s 1910(of)s 2179(the)s 200 fnt82 2525 8450(PURCELL)m
+240 fnt82 3468 8441(g)m 1(alle)k 3(y)k 4100(resumes.)s
+5045(When)s 5672(the)s 6018(\207rst)s 6447(page)s 6953(is)s
+7161(\207lled,)s 7757(Lout)s 8266(searches)s 0 8153(forw)m 2(ards)k
+898(for)s 1236(another)s 220 fnt35 2013 8150(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 3231 8153(to)m 3470(recei)s 6(v)k 3(e)k
+4206(the)s 4554(remainder)s 9(,)k 5620(once)s 6128(ag)s 1(ain)k
+6702(e)s 3(xpanding)k 7750(a)s 220 fnt35 7916 8150(@P)m 8(ageList:)k
+160 fnt82 480 4955(performer)m 6(,)k 1436(that)s 1967(is)s
+480 4775(re)m 2(garded)k 1172(else)s 4(where)k 1940(as)s
+480 4595(perfectly)m 1215(normal)s 1837(and)s 480 4415(natural;)m 1072(b)s 3(ut)k
+1388(if)s 1608(foreign)s 480 4235(students)m 1215(of)s 1574(musical)s
+480 4055(history)m 1286(ha)s 3(v)k 2(e)k 1947(to)s
+480 3875(ackno)m 4(wledge)k 1440(a)s 1636(British)s 480 3695(musical)m
+1105(genius,)s 1686(he)s 1967(is)s 480 3515(considered)m 1211(a)s
+1322(freak.)s 800 3282(Such)m 1267(a)s 1488(freak)s 1967(is)s
+480 3102(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k 1736(if)s
+1884(we)s 480 2922(mak)m 1(e)k 875(a)s 1000(choice)s
+1467(of)s 1662(\207fteen)s 480 2742(of)m 717(the)s 1005(w)s 1(orld')k 8(s)k
+1574(musical)s 480 2562(classics,)m 1050(as)s 1228(here,)s 1586(we)s
+1820(\207nd)s 480 2382(that)m 774(we)s 1013(cannot)s 1495(omit)s
+1843(this)s 480 2202(English)m 1005(master)s 8(.)k gsave
+3434 4991 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 5233 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 fnt84
+560 1987(PURCELL)m 128 fnt82 1316 2059(1)m 160 fnt82 170 1695(In)m
+341(the)s 573(w)s 1(orld)k 983(of)s 1164(music)s
+170 1515(England)m 741(is)s 881(supposed)s 1515(to)s 170 1335(be)m
+358(a)s 469(mere)s 825(pro)s 2(vince.)k 1491(If)s
+170 1155(she)m 708(produces)s 1608(an)s 170 975(indif)m 4(ferent)k
+879(composer)s 1540(or)s 567 0 0 0 160 180 40 170 763 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 624(1)m 160 fnt82
+221 552(Blom,)m 703(Eric.)s 160 fnt83 1133 553(Some)m 170 373(Gr)m 5(eat)k
+734(Composer)s 1(s.)k 160 fnt82 170 192(Oxford,)m 703(1944.)s
+
+grestore
+gsave
+3315 2739 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
+140 fnt35 170 2222(@T)m 16(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+140 fnt35 3315 2524(@P)m 5(ageList)k gsave
+6802 7727 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 7683(to)m
+7061(printer)s 240 fnt82 0 1717(and)m 404(so)s 671(on.)s
+1076(All)s 1437(these)s 1985(e)s 3(xpansions)k 3098(and)s
+3503(replacements)s 4814(are)s 5162(done)s 5685(with)s 6168(total)s
+6648(inte)s 3(grity)k 15(.)k 7604(F)s 3(or)k
+7994(e)s 3(xample,)k 8909(if)s 0 1429(Lout)m 510(\207nds)s
+1024(after)s 1517(e)s 3(xpanding)k 220 fnt35 2563 1426(@F)m 6(ootSect)k
+240 fnt82 3711 1429(that)m 4126(the)s 4472(page)s 4977(is)s
+5184(too)s 5541(full)s 5924(to)s 6160(accept)s 6828(e)s 6(v)k 3(en)k
+7325(the)s 7670(\207rst)s 8099(line)s 8510(of)s 8778(the)s
+0 1141(footnote,)m 220 fnt35 915 1138(@F)m 6(ootSect)k 240 fnt82
+2077 1141(is)m 2298(reset)s 2819(to)s 3070(une)s 3(xpanded)k
+4294(and)s 4709(the)s 5068(search)s 5746(for)s 6096(a)s
+6273(tar)s 4(get)k 6883(for)s 7232(the)s 7591(footnote)s
+8456(mo)s 3(v)k 3(es)k 0 853(on.)m 396(And)s
+858(the)s 1197(cross)s 1730(reference)s 2664(direction,)s 220 fnt35
+3611 850(preceding)m 240 fnt82 4613 853(or)m 220 fnt35 4864 850(f)m 6(ollo)k 3(wing,)k
+240 fnt82 5799 853(is)m 6000(al)s 2(w)k 2(ays)k
+6702(obe)s 3(yed)k 7440(\(although)s 8405(lack)s 8855(of)s
+0 565(space)m 586(sometimes)s 1658(pre)s 6(v)k 3(ents)k
+2509(Lout)s 3020(from)s 3543(choosing)s 4460(the)s 4807(nearest)s
+5542(tar)s 4(get\).)k 6323(Only)s 6855(the)s 7202(root)s
+7646(g)s 1(alle)k 3(y)k 8278(contains)s 0 277(recepti)m 6(v)k 3(e)k
+922(symbols)s 1771(in)s 2014(our)s 2393(running)s 3191(e)s 3(xample,)k
+4105(b)s 4(ut)k 4467(an)s 3(y)k 4864(g)s 1(alle)k 3(y)k
+5498(may)s 5964(contain)s 6725(them.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+480 fnt84 0 12955(Chapter)m 1819(2.)s 2400(Details)s 240 fnt84
+0 11690(2.1.)m 471(Lexical)s 1270(structur)s 4(e)k 2263(\(w)s 2(ords,)k
+3079(spaces,)s 3844(symbols\))s 4796(and)s 5237(macr)s 4(os)k
+240 fnt82 480 11213(The)m 902(input)s 1447(to)s 1679(Lout)s
+2184(consists)s 2985(of)s 3249(a)s 3408(sequence)s 4334(of)s
+240 fnt83 4598 11215(te)m 4(xtual)k 5297(units)s 240 fnt82
+5757 11213(,)m 5857(which)s 6492(may)s 6951(be)s 7226(either)s
+240 fnt83 7822 11215(white)m 8386(spaces)s 240 fnt82 9019 11213(,)m
+240 fnt83 0 10927(identi\207er)m 2(s,)k 1047(delimiter)s 2(s,)k
+240 fnt82 2093 10925(or)m 240 fnt83 2352 10927(liter)m 3(al)k
+2992(wor)s 8(ds)k 240 fnt82 3565 10925(.)m 3729(Each)s
+4264(is)s 4474(a)s 4640(sequence)s 5573(of)s 240 fnt83
+5844 10927(c)m 3(har)k 3(acter)k 2(s)k 240 fnt82
+6914 10925(chosen)m 7636(from:)s 480 10387(letter)m 220 fnt35 1934 10384(@ab-zAB-Z_)m
+240 fnt82 480 10099(white)m 1067(space)s 240 fnt83 1934 10101(space)m
+2592(formfeed)s 3568(tab)s 3988(ne)s 3(wline)k 240 fnt82
+480 9811(quote)m 220 fnt35 1934 9808(")m 240 fnt82 480 9523(escape)m
+220 fnt35 1934 9520(\\)m 240 fnt82 480 9235(comment)m 220 fnt35
+1934 9232(#)m 240 fnt82 480 8947(other)m 220 fnt35 1934 8944(!$%&'\(\)*+,-./0123456789:;<=>?[]^`{|}~)m
+240 fnt82 0 8406(Notice)m 732(that)s 220 fnt35 1189 8403(@)m
+240 fnt82 1480 8406(and)m 220 fnt35 1923 8403(_)m 240 fnt82
+2144 8406(are)m 2531(classed)s 3318(as)s 3608(letters.)s 4393(Basser)s
+5129(Lout)s 5681(accepts)s 6474(the)s 6861(accented)s 7795(letters)s
+8467(of)s 8778(the)s 0 8118(ISO-LA)m 26(TIN-1)k 1421(character)s
+2388(set)s 2746(\(depending)s 3909(on)s 4238(ho)s 6(w)k
+4732(it)s 4957(is)s 5200(installed\),)s 6228(and)s 6664(these)s
+7244(are)s 7624(also)s 8095(classed)s 8876(as)s 0 7830(letters.)m
+756(The)s 1195(ten)s 1555(digits)s 2148(are)s 2505(classed)s
+3264(as)s 3525(`other')s 4218(characters,)s 5302(and)s 5717(in)s
+5971(f)s 2(act)k 6397(the)s 6755(`other')s 7448(class)s
+7974(contains)s 8833(all)s 0 7542(8-bit)m 511(characters)s 1529(\(e)s 3(xcept)k
+2289(octal)s 2808(0\))s 3056(not)s 3422(assigned)s 4304(to)s
+4543(pre)s 6(vious)k 5412(classes.)s 480 7168(A)m 240 fnt83
+698 7170(white)m 1256(space)s 240 fnt82 1841 7168(is)m 2038(a)s
+2191(sequence)s 3111(of)s 3369(one)s 3758(or)s 4005(more)s
+4539(white)s 5113(space)s 5687(characters.)s 6805(Lout)s 7304(treats)s
+7858(the)s 8193(formfeed)s 0 6880(character)m 931(e)s 3(xactly)k
+1668(lik)s 2(e)k 2076(the)s 2420(space)s 3003(character;)s
+3985(it)s 4173(is)s 4379(useful)s 5014(for)s 5348(getting)s
+6061(page)s 6565(breaks)s 7236(when)s 7808(printing)s 8614(Lout)s
+0 6592(source)m 680(code.)s 480 6218(A)m 240 fnt83 709 6220(delimiter)m
+240 fnt82 1635 6218(is)m 1844(a)s 2009(sequence)s 2941(of)s
+3211(one)s 3612(or)s 3870(more)s 4415(`other')s 5096(characters)s
+6113(which)s 6754(is)s 6963(the)s 7310(name)s 7883(of)s
+8153(a)s 8317(symbol.)s 0 5930(F)m 3(or)k 417(e)s 3(xample,)k
+220 fnt35 1360 5927({)m 240 fnt82 1512 5930(and)m 220 fnt35
+1945 5927(//)m 240 fnt82 2159 5930(are)m 2534(delimiters.)s 3681(When)s
+4338(de\207ning)s 5205(a)s 5400(delimiter)s 9(,)k 6387(the)s
+6764(name)s 7366(must)s 7920(be)s 8231(enclosed)s 0 5642(in)m
+243(quotes:)s 220 fnt35 480 5143(def "^" { {} ^& {} })m 240 fnt82 0 4649(b)m 4(ut)k
+361(quotes)s 1036(are)s 1381(not)s 1746(used)s 2242(when)s
+2816(the)s 3163(delimiter)s 4082(is)s 4291(in)s 9(v)k 4(ok)k 2(ed.)k
+5211(A)s 5439(delimiter)s 6359(may)s 6824(ha)s 4(v)k 3(e)k
+7323(delimiters)s 8327(and)s 8729(an)s 3(y)k 0 4361(other)m
+558(characters)s 1584(adjacent,)s 2495(whereas)s 3337(identi\207ers)s 4351(may)s
+4825(not)s 5199(be)s 5489(adjacent)s 6353(to)s 6600(letters)s
+7241(or)s 7508(other)s 8067(identi\207ers.)s 0 4073(The)m 428(complete)s
+1360(list)s 1711(of)s 1982(prede\207ned)s 3050(delimiters)s 4055(is)s
+220 fnt35 480 3572(/)m 480 3284(//)m 480 2996(^/)m 480 2708(^//)m
+1727 3572(|)m 1727 3284(||)m 1727 2996(^|)m 1727 2708(^||)m 2974 3572(&)m
+2974 3284(^&)m 4221 3572(&&)m 4221 3284({)m 4221 2996(})m 240 fnt82
+0 2253(A)m 230(longer)s 901(delimiter)s 1822(lik)s 2(e)k
+220 fnt35 2234 2250(<=)m 240 fnt82 2542 2253(will)m 2968(be)s
+3250(recognised)s 4344(in)s 4587(preference)s 5650(to)s 5889(a)s
+6055(shorter)s 6778(one)s 7180(lik)s 2(e)k 220 fnt35
+7592 2250(<)m 240 fnt82 7710 2253(.)m 480 1879(An)m 240 fnt83
+855 1881(identi\207er)m 240 fnt82 1808 1879(is)m 2043(a)s 2234(sequence)s
+3192(of)s 3488(one)s 3915(or)s 4199(more)s 4772(letters)s
+5430(which)s 6097(is)s 6332(the)s 6705(name)s 7304(of)s
+7600(a)s 7791(symbol.)s 8685(It)s 8916(is)s 0 1591(con)m 9(v)k 3(entional)k
+1308(b)s 4(ut)k 1700(not)s 2096(essential)s 3003(to)s
+3272(be)s 3(gin)k 3888(identi\207ers)s 4924(with)s 220 fnt35
+5436 1588(@)m 240 fnt82 5627 1591(;)m 5829(Basser)s 6556(Lout)s
+7098(will)s 7554(print)s 8095(a)s 8291(w)s 2(arning)k
+0 1303(message)m 865(if)s 1081(it)s 1272(\207nds)s 1788(an)s
+2070(unquoted)s 3019(literal)s 3628(w)s 2(ord)k 4175(\(see)s
+4614(belo)s 6(w\))k 5320(be)s 3(ginning)k 6327(with)s
+220 fnt35 6808 1300(@)m 240 fnt82 6999 1303(,)m 7105(since)s
+7651(such)s 8146(w)s 2(ords)k 8779(are)s 192 fnt84
+4440 2(13)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(14)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(usually)m 748(misspelt)s 1608(identi\207ers.)s
+2730(The)s 3162(ten)s 3515(digits)s 4100(are)s 4451(not)s
+4820(letters)s 5457(and)s 5865(may)s 6334(not)s 6704(appear)s
+7404(in)s 7651(identi\207ers;)s 8722(and)s 0 12917(although)m 890(the)s
+1233(underscore)s 2333(character)s 3262(is)s 3467(a)s 3628(letter)s
+4172(and)s 4570(may)s 5031(be)s 5308(used)s 5800(in)s
+6038(identi\207ers,)s 7095(it)s 7282(is)s 7487(not)s 7847(con)s 9(v)k 3(entional)k
+0 12629(to)m 239(do)s 532(so.)s 909(The)s 1337(complete)s
+2269(list)s 2620(of)s 2891(prede\207ned)s 3959(identi\207ers)s 4965(is)s
+220 fnt35 480 12128(@Bac)m 4(kEnd)k 480 11840(@Bac)m 4(kg)k 2(round)k
+480 11552(@Begin)m 480 11264(@Break)m 480 10976(@Case)m 480 10688(@Common)m 480 10400(@Char)m
+480 10112(@CurrF)m 11(ace)k 480 9824(@CurrF)m 11(amily)k 480 9536(@CurrLang)m
+480 9248(@Database)m 480 8960(@End)m 480 8672(@Enclose)m 480 8384(@Filter)m 480 8096(@FilterErr)m
+480 7808(@FilterIn)m 480 7520(@FilterOut)m 480 7232(@F)m 6(ont)k 480 6944(@F)m 6(orceGalle)k 4(y)k
+480 6656(@Galle)m 4(y)k 480 6368(@Gr)m 2(aphic)k 480 6080(@HAdjust)m
+480 5792(@HContr)m 2(act)k 480 5504(@HCo)m 3(v)k 5(er)k
+480 5216(@HExpand)m 480 4928(@High)m 480 4640(@HLimited)m 480 4352(@HScale)m 480 4064(@HShift)m
+480 3776(@HSpan)m 2974 12128(@Include)m 2974 11840(@IncludeGr)m 2(aphic)k 2974 11552(@Inser)m -8(t)k
+2974 11264(@K)m 8(er)k -5(nShr)k -3(ink)k 2974 10976(@K)m 8(e)k 4(y)k
+2974 10688(@Language)m 2974 10400(@LClos)m 2974 10112(@LEn)m 4(v)k 2974 9824(@LInput)m
+2974 9536(@L)m 24(Vis)k 2974 9248(@LUse)m 2974 8960(@Meld)m 2974 8672(@Merge)m
+2974 8384(@Min)m 2(us)k 2974 8096(@Moment)m 2974 7808(@Ne)m 6(xt)k
+2974 7520(@NotRe)m 6(v)k 5(ealed)k 2974 7232(@Null)m 2974 6944(@OneCol)m
+2974 6656(@OneOf)m 2974 6368(@OneRo)m 3(w)k 2974 6080(@Open)m 2974 5792(@Optimiz)m 3(e)k
+2974 5504(@P)m 26(Adjust)k 2974 5216(@P)m 8(ageLabel)k 2974 4928(@PlainGr)m 2(aphic)k
+2974 4640(@Plus)m 2974 4352(@PrependGr)m 2(aphic)k 2974 4064(@Ra)m 4(wV)k 17(erbatim)k
+2974 3776(@Rotate)m 5468 12128(@Rump)m 5468 11840(@Scale)m 5468 11552(@SetColor)m 5468 11264(@SetColour)m
+5468 10976(@Space)m 5468 10688(@Star)m -8(tHSpan)k 5468 10400(@Star)m -8(tHVSpan)k
+5468 10112(@Star)m -8(tVSpan)k 5468 9824(@SysDatabase)m 5468 9536(@SysInclude)m 5468 9248(@SysIncludeGr)m 2(aphic)k
+5468 8960(@SysPrependGr)m 2(aphic)k 5468 8672(@T)m 26(ag)k 5468 8384(@T)m 26(agged)k
+5468 8096(@T)m 26(arget)k 5468 7808(@Under)m -3(line)k 5468 7520(@Use)m
+5468 7232(@V)m 17(Adjust)k 5468 6944(@VContr)m 2(act)k 5468 6656(@VCo)m 3(v)k 5(er)k
+5468 6368(@V)m 17(erbatim)k 5468 6080(@VExpand)m 5468 5792(@VLimited)m 5468 5504(@VScale)m
+5468 5216(@VShift)m 5468 4928(@VSpan)m 5468 4640(@Wide)m 5468 4352(@Y)m 4(ield)k
+5468 4064(@YUnit)m 5468 3776(@ZUnit)m 240 fnt82 0 3280(plus)m 498(the)s
+894(names)s 1605(of)s 1924(the)s 2321(parameters)s 3467(of)s
+220 fnt35 3786 3277(@Moment)m 240 fnt82 4798 3280(.)m 5011(The)s
+5487(symbols)s 220 fnt35 6385 3277(@LClos)m 240 fnt82 7161 3280(,)m
+220 fnt35 7316 3277(@LEn)m 4(v)k 240 fnt82 8034 3280(,)m
+220 fnt35 8190 3277(@LInput)m 240 fnt82 9019 3280(,)m 220 fnt35
+0 2989(@L)m 24(Vis)k 240 fnt82 722 2992(and)m 220 fnt35
+1170 2989(@LUse)m 240 fnt82 2001 2992(appear)m 2742(in)s 3029(cross)s
+3615(reference)s 4602(databases)s 5613(generated)s 6644(by)s 6982(Lout)s
+7538(and)s 7986(are)s 8377(not)s 8788(for)s 0 2704(use)m
+375(else)s 6(where.)k 480 2330(A)m 728(sequence)s 1679(of)s
+1968(characters)s 3004(which)s 3664(is)s 3892(neither)s 4633(a)s
+4817(white)s 5422(space,)s 6078(an)s 6379(identi\207er)s 9(,)k
+7357(nor)s 7754(a)s 7938(delimiter)s 9(,)k 8916(is)s
+0 2042(by)m 304(def)s 2(ault)k 1036(a)s 240 fnt83
+1213 2044(liter)m 3(al)k 1864(wor)s 8(d)k 240 fnt82
+2355 2042(,)m 2473(which)s 3126(means)s 3799(that)s 4227(it)s
+4430(will)s 4867(pass)s 5341(through)s 6154(Lout)s 6677(unchanged.)s
+7890(An)s 8251(arbitrary)s 0 1754(sequence)m 926(of)s 1190(characters)s
+2201(enclosed)s 3089(in)s 3325(double)s 4026(quotes,)s 4751(for)s
+5082(e)s 3(xample)k 220 fnt35 5938 1751("{ }",)m 240 fnt82
+6457 1754(is)m 6660(also)s 7091(a)s 7250(literal)s 7853(w)s 2(ord.)k
+8499(Space)s 0 1466(characters)m 1005(may)s 1458(be)s 1726(included,)s
+2644(b)s 4(ut)k 2992(not)s 3345(tabs)s 3767(or)s
+4013(ne)s 6(wlines.)k 5008(There)s 5607(are)s 5941(special)s
+6645(character)s 7566(sequences,)s 8629(used)s 0 1178(only)m 480(between)s
+1334(quotes,)s 2066(for)s 2404(obtaining)s 3361(otherwise)s 4346(inaccessible)s
+5556(characters:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.1.)m 454(Le)s 4(xical)k 1213(structur)s 8(e)k
+2121(\(wor)s 8(ds,)k 2871(spaces,)s 3602(symbols\))s 4502(and)s
+4928(macr)s 10(os)k 240 fnt84 8833 13840(15)m 220 fnt35
+480 13167(\\")m 240 fnt82 1235 13170(produces)m 220 fnt35 2150 13167(")m
+480 12879(\\\\)m 240 fnt82 1235 12882(\\)m 220 fnt35 480 12591(\\ddd)m
+240 fnt82 1235 12594(the)m 1583(character)s 2517(whose)s 3185(ASCII)s
+3865(code)s 4373(is)s 1235 12306(the)m 1583(up)s 1876(to)s
+2115(three)s 2648(digit)s 3146(octal)s 3665(number)s 220 fnt35
+4456 12303(ddd)m 240 fnt82 0 11765(So,)m 360(for)s 698(e)s 3(xample,)k
+220 fnt35 1612 11762("\\"@PP\\"")m 240 fnt82 2606 11765(produces)m 220 fnt35
+3521 11762("@PP")m 240 fnt82 4177 11765(.)m 480 11391(When)m 1106(the)s
+1451(comment)s 2398(character)s 220 fnt35 3328 11388(#)m 240 fnt82
+3502 11391(is)m 3709(encountered,)s 4982(e)s 6(v)k 3(erything)k
+6045(from)s 6566(that)s 6981(point)s 7530(to)s 7765(the)s
+8110(end)s 8511(of)s 8778(the)s 0 11103(line)m 414(is)s
+624(ignored.)s 1519(This)s 1995(is)s 2205(useful)s 2844(for)s
+3182(including)s 4139(reminders)s 5145(to)s 5384(oneself,)s 6181(lik)s 2(e)k
+6593(this:)s 220 fnt35 480 10606(# Lout user man)m 2(ual)k 480 10318(# J)m 6(.)k 13( Kingston, J)k 4(une 1989)k
+240 fnt82 0 9819(for)m 338(temporarily)s 1506(deleting)s 2329(parts)s
+2844(of)s 3115(the)s 3463(document,)s 4514(and)s 4918(so)s
+5184(on.)s 240 fnt83 480 9447(Macr)m 10(os)k 240 fnt82
+1268 9445(pro)m 3(vide)k 2064(a)s 2242(means)s 2916(of)s
+3199(de\207ning)s 4049(symbols)s 4910(which)s 5564(stand)s 6139(for)s
+6489(a)s 6667(sequence)s 7612(of)s 7895(te)s 3(xtual)k
+8610(units)s 0 9157(rather)m 616(than)s 1085(an)s 1368(object.)s
+2116(F)s 3(or)k 2505(e)s 3(xample,)k 3419(the)s
+3767(macro)s 4417(de\207nition)s 220 fnt35 480 8656(macro @PP { //1.3vx 2.0f @Wide &0i })m 240 fnt82
+0 8162(mak)m 2(es)k 663(Lout)s 1178(replace)s 1926(the)s
+2277(symbol)s 220 fnt35 3040 8159(@PP)m 240 fnt82 3609 8162(by)m
+3906(the)s 4258(gi)s 6(v)k 3(en)k 4841(te)s 3(xtual)k
+5546(units)s 6065(before)s 6734(assembling)s 7866(its)s 8145(input)s
+8701(into)s 0 7874(objects.)m 841(A)s 1071(similar)s 1793(macro)s
+2443(to)s 2682(this)s 3077(one)s 3479(is)s 3689(used)s
+4186(to)s 4425(separate)s 5262(the)s 5610(paragraphs)s 6710(of)s
+6981(the)s 7329(present)s 8078(document.)s 0 7586(The)m 450(enclosing)s
+1442(braces)s 2126(and)s 2552(an)s 3(y)k 2972(spaces)s
+3669(adjacent)s 4548(to)s 4809(them)s 5370(are)s 5739(dropped,)s
+6654(which)s 7318(can)s 7730(be)s 8034(a)s 8223(problem:)s
+220 fnt35 0 7295(@PP2i)m 240 fnt82 731 7298(has)m 1101(result)s
+220 fnt35 1691 7295(//1.3vx 2.0f @Wide &0i2i)m 240 fnt82 4141 7298(which)m 4783(is)s
+4993(erroneous.)s 480 6924(The)m 938(meaning)s 1846(of)s 2148(symbols)s
+3028(used)s 3556(within)s 4254(the)s 4633(body)s 5198(of)s
+5500(a)s 5697(macro)s 6377(is)s 6618(determined)s 7782(by)s
+8107(where)s 8778(the)s 0 6636(macro)m 667(is)s 895(de\207ned,)s
+1724(not)s 2108(by)s 2419(where)s 3077(it)s 3287(is)s
+3514(used.)s 4135(Due)s 4607(to)s 4864(implementation)s 6438(problems,)s
+220 fnt35 7453 6633(@Open)m 240 fnt82 8277 6636(symbols)m 0 6348(will)m
+423(not)s 786(w)s 2(ork)k 1333(within)s 1998(macros.)s
+2849(Named)s 3594(and)s 3995(body)s 4525(parameters)s 5620(will)s
+6043(w)s 2(ork)k 6590(if)s 6804(the)s 7149(symbol)s
+7905(that)s 8320(the)s 3(y)k 8779(are)s 0 6060(parameters)m
+1090(of)s 1352(is)s 1553(also)s 1983(present.)s 2828(There)s
+3432(is)s 3633(no)s 3918(w)s 2(ay)k 4360(to)s
+4590(get)s 4934(a)s 5091(left)s 5459(or)s 5709(right)s
+6212(brace)s 6776(into)s 7192(the)s 7532(body)s 8057(of)s
+8319(a)s 8476(macro)s 0 5772(without)m 791(the)s 1139(matching)s
+2082(brace.)s 480 5398(Macros)m 1253(may)s 1724(be)s 2011(nested)s
+2685(within)s 3358(other)s 3914(de\207nitions)s 4980(and)s 5389(e)s 3(xported,)k
+6335(b)s 4(ut)k 6702(the)s 3(y)k 7170(may)s
+7641(not)s 8012(be)s 8299(parame)s 8998(-)s 0 5110(ters.)m
+511(The)s 3(y)k 1058(may)s 1528(not)s 1898(ha)s 4(v)k 3(e)k
+2403(parameters)s 3504(or)s 3767(nested)s 4440(de\207nitions)s 5505(of)s
+5780(their)s 6280(o)s 6(wn,)k 6798(and)s 7206(consequently)s
+8527(a)s 8697(pre)s 8998(-)s 0 4822(ceding)m 220 fnt35
+691 4819(e)m 6(xpor)k -8(t)k 240 fnt82 1359 4822(clause)m
+2012(\(Section)s 2865(2.3\))s 3293(w)s 2(ould)k 3948(be)s
+4230(pointless;)s 5192(ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6099(an)s 220 fnt35 6382 4819(impor)m -8(t)k 240 fnt82
+7055 4822(clause)m 7708(is)s 7918(permitted.)s 240 fnt84 0 4030(2.2.)m
+471(Named)s 1257(parameters)s 240 fnt82 480 3553(In)m 728(addition)s
+1560(to)s 1790(left)s 2159(and)s 2554(right)s 3056(\(or)s
+3386(body\))s 3985(parameters,)s 5130(a)s 5288(symbol)s 6039(may)s
+6496(ha)s 4(v)k 3(e)k 6989(an)s 3(y)k
+7377(number)s 8159(of)s 240 fnt83 8421 3555(named)m 0 3267(par)m 3(ameter)k 2(s)k
+240 fnt82 1080 3265(:)m 220 fnt35 480 2768(def @Chapter)m 480 2480( named @T)m 26(ag {})k
+480 2192( named @Title {})m 480 1904( r)m -3(ight x)k 480 1616({)m 480 1328( ...)m
+480 1040(})m 240 fnt82 0 546(Their)m 577(de\207nitions)s 1639(appear)s
+2336(in)s 2580(between)s 3434(those)s 3996(of)s 4267(an)s 3(y)k
+4665(left)s 5042(and)s 5447(right)s 5958(parameters,)s 7113(and)s
+7517(each)s 8013(is)s 8224(follo)s 6(wed)k 0 258(by)m
+293(a)s 240 fnt83 457 260(default)m 1183(value)s 240 fnt82
+1753 258(between)m 2605(braces.)s 3377(When)s 220 fnt35 4004 255(@Chapter)m
+240 fnt82 5066 258(is)m 5274(in)s 9(v)k 4(ok)k 2(ed,)k
+6136(its)s 6411(named)s 7105(parameters)s 8201(are)s 8546(gi)s 6(v)k 3(en)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(16)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(v)m 6(alues)k 656(in)s
+899(the)s 1247(follo)s 6(wing)k 2224(w)s 2(ay:)k
+220 fnt35 480 12704(@Chapter)m 480 12416( @T)m 26(ag { intro })k 480 12128( @Title { Introduction })m
+480 11840({)m 480 11552( ...)m 480 11264(})m 240 fnt82 0 10770(That)m
+485(is,)s 737(a)s 889(list)s 1226(of)s 1483(named)s
+2166(parameters)s 3250(appears)s 4017(immediately)s 5251(follo)s 6(wing)k
+6214(the)s 6549(symbol,)s 7347(each)s 7828(with)s 8296(its)s
+8558(v)s 6(alue)k 0 10482(enclosed)m 900(in)s 1149(braces.)s
+1929(An)s 3(y)k 2399(right)s 2916(parameter)s 3936(follo)s 6(ws)k
+4704(after)s 5206(them.)s 5854(The)s 3(y)k 6403(do)s
+6702(not)s 7074(ha)s 4(v)k 3(e)k 7581(to)s
+7826(appear)s 8529(in)s 8778(the)s 0 10194(order)m 558(the)s 3(y)k
+1015(were)s 1529(de\207ned,)s 2334(and)s 2732(the)s 3(y)k
+3189(can)s 3571(e)s 6(v)k 3(en)k 4065(be)s
+4341(omitted)s 5122(altogether)s 9(,)k 6169(in)s 6406(which)s
+7041(case)s 7502(the)s 7844(def)s 2(ault)k 8558(v)s 6(alue)k
+0 9906(from)m 524(the)s 872(de\207nition)s 1846(is)s 2056(used)s
+2553(instead.)s 480 9532(If)m 699(the)s 1036(k)s 2(e)k 3(yw)k 2(ord)k
+220 fnt35 1913 9529(compulsor)m -6(y)k 240 fnt82 3088 9532(appears)m
+3858(after)s 220 fnt35 4342 9529(named)m 240 fnt82 5050 9532(and)m
+5442(before)s 6097(the)s 6434(parameter')s 13(s)k 7586(name,)s
+8200(Lout)s 8700(will)s 0 9244(print)m 501(a)s 657(w)s 2(arning)k
+1481(message)s 2337(whene)s 6(v)k 3(er)k 3307(this)s
+3693(parameter)s 4696(is)s 4896(missing.)s 5793(Ho)s 6(we)k 6(v)k 3(er)k
+6705(it)s 6886(will)s 7302(still)s 7703(use)s 8068(the)s
+8405(def)s 2(ault)k 0 8956(v)m 6(alue)k 568(as)s
+818(just)s 1223(described.)s 480 8582(A)m 719(named)s 220 fnt35
+1424 8579(@T)m 26(ag)k 240 fnt82 2057 8582(parameter)m 3080(does)s
+3580(not)s 3955(tak)s 2(e)k 4417(its)s 4702(def)s 2(ault)k
+5433(v)s 6(alue)k 6010(from)s 6544(the)s 6901(de\207nition;)s
+7940(instead,)s 8733(if)s 8960(a)s 0 8294(def)m 2(ault)k
+726(v)s 6(alue)k 1300(is)s 1516(needed,)s 2306(Lout)s
+2824(in)s 9(v)k 3(ents)k 3560(a)s 3731(simple)s
+4430(w)s 2(ord)k 4984(which)s 5631(dif)s 6(fers)k
+6304(from)s 6834(e)s 6(v)k 3(ery)k 7415(other)s
+7972(tag.)s 8434(This)s 8916(is)s 0 8006(important,)m 1034(for)s
+1370(e)s 3(xample,)k 2282(in)s 2523(the)s 2868(production)s
+3960(of)s 4229(numbered)s 5242(chapters)s 6086(and)s 6488(sections)s
+7307(\(Section)s 8158(4.4\).)s 8698(The)s 0 7718(same)m 551(thing)s
+1101(occurs)s 1781(if)s 2003(there)s 2541(is)s 2756(a)s
+220 fnt35 2927 7715(@T)m 26(ag)k 240 fnt82 3555 7718(parameter)m
+4574(b)s 4(ut)k 4940(its)s 5221(v)s 6(alue)k
+5794(is)s 6009(the)s 6362(empty)s 7019(object:)s 7774(the)s
+8127(v)s 6(alue)k 8700(will)s 0 7430(be)m 282(replaced)s
+1149(by)s 1443(an)s 1726(in)s 9(v)k 3(ented)k
+2596(one.)s 480 7056(Named)m 1229(parameters)s 2327(may)s 2793(ha)s 4(v)k 3(e)k
+3294(parameters,)s 4448(as)s 4698(in)s 4941(the)s 5289(follo)s 6(wing)k
+6266(de\207nition:)s 220 fnt35 480 6555(def @Str)m 2(ange)k 480 6267( named @F)m 6(or)k -5(mat r)k -3(ight @V)k 15(al { [@V)k 15(al] })k
+480 5979( r)m -3(ight x)k 480 5691({)m 480 5403( @F)m 6(or)k -5(mat x)k
+480 5115(})m 240 fnt82 0 4621(The)m 428(named)s 1125(parameter)s
+220 fnt35 2139 4618(@F)m 6(or)k -5(mat)k 240 fnt82
+3113 4621(has)m 3483(right)s 3995(parameter)s 220 fnt35 5010 4618(@V)m 15(al)k
+240 fnt82 5520 4621(,)m 5627(and)s 6032(the)s 6380(def)s 2(ault)k
+7102(v)s 6(alue)k 7670(of)s 220 fnt35 7942 4618(@F)m 6(or)k -5(mat)k
+240 fnt82 8916 4621(is)m 0 4333(this)m 394(parameter)s 1406(enclosed)s
+2299(in)s 2539(brack)s 2(ets.)k 3495(When)s 220 fnt35
+4122 4330(@F)m 6(or)k -5(mat)k 240 fnt82 5093 4333(is)m
+5300(in)s 9(v)k 4(ok)k 2(ed)k 6113(it)s
+6303(must)s 6826(be)s 7105(supplied)s 7972(with)s 8452(a)s
+8615(right)s 0 4045(parameter)m 9(,)k 1052(which)s 1694(will)s
+2120(replace)s 220 fnt35 2865 4042(@V)m 15(al)k 240 fnt82
+3375 4045(.)m 3539(Thus,)s 220 fnt35 480 3544(@Str)m 2(ange 27)k
+240 fnt82 0 3045(equals)m 220 fnt35 662 3042(@F)m 6(or)k -5(mat 27)k
+240 fnt82 1937 3045(and)m 2341(so)s 2607(has)s 2977(result)s
+480 2543([27])m 0 2055(The)m 220 fnt35 428 2052(@F)m 6(or)k -5(mat)k
+240 fnt82 1401 2055(symbol)m 2161(is)s 2371(lik)s 2(e)k
+2783(a)s 2949(de\207nition)s 3923(with)s 4405(parameters)s 5503(whose)s
+6171(body)s 6705(can)s 7094(be)s 7376(changed:)s 220 fnt35
+480 1554(@Str)m 2(ange)k 480 1266( @F)m 6(or)k -5(mat { Slope @F)k 6(ont @V)k 15(al.)k 13( })k
+480 978(27)m 240 fnt82 0 527(still)m 412(equals)s 220 fnt35
+1074 524(@F)m 6(or)k -5(mat 27)k 240 fnt82 2289 527(,)m
+2396(b)s 4(ut)k 2758(this)s 3154(time)s 3634(the)s
+3982(result)s 4572(is)s 240 fnt83 480 26(27.)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.2.)m 454(Named)s 1199(par)s 3(ameter)k 2(s)k
+240 fnt84 8831 13840(17)m 240 fnt82 0 13205(In)m 252(practice,)s
+1110(e)s 3(xamples)k 2057(of)s 2323(named)s 3015(parameters)s
+4109(with)s 4586(parameters)s 5680(all)s 5969(ha)s 4(v)k 3(e)k
+6466(this)s 6857(\210a)s 4(v)k 4(our)k 7583(of)s
+7850(format)s 8541(being)s 0 12917(separated)m 996(from)s 1556(content;)s
+2409(running)s 3243(headers)s 4060(\(Section)s 4950(4.3\))s 5414(and)s
+5854(printing)s 6701(styles)s 7332(for)s 7707(bibliographies)s 0 12629(\(Section)m
+853(4.5\))s 1281(are)s 1628(tw)s 2(o)k 2038(major)s
+2655(ones.)s 240 fnt84 0 11836(2.3.)m 471(Nested)s 1216(de\207nitions,)s
+2392(body)s 2954(parameters,)s 4236(extend,)s 5027(import,)s 5844(and)s
+6285(export)s 240 fnt82 480 11359(A)m 710(de\207nition)s 1684(may)s
+2150(contain)s 2911(other)s 3462(de\207nitions)s 4523(at)s 4755(the)s
+5103(be)s 3(ginning)k 6111(of)s 6382(its)s 6658(body:)s
+220 fnt35 480 10858(def @NineSquare)m 480 10570( r)m -3(ight x)k 480 10282({)m
+480 9994( def @Three { x |0.2i x |0.2i x })m 480 9418( @Three /0.2i @Three /0.2i @Three)m 480 9130(})m 240 fnt82 0 8636(A)m
+227(parameter)s 1238(lik)s 2(e)k 220 fnt35 1646 8633(x)m
+240 fnt82 1811 8636(may)m 2274(be)s 2552(in)s 9(v)k 4(ok)k 2(ed)k
+3364(an)s 3(ywhere)k 4343(within)s 5008(the)s 5353(body)s
+5883(of)s 6151(the)s 6495(symbol)s 7252(it)s 7441(is)s
+7647(a)s 7810(parameter)s 8820(of,)s 0 8348(including)m 973(within)s
+1657(nested)s 2342(de\207nitions.)s 3532(A)s 3778(nested)s 4463(symbol)s
+5239(lik)s 2(e)k 220 fnt35 5667 8345(@Three)m 240 fnt82
+6531 8348(may)m 7013(be)s 7311(in)s 9(v)k 4(ok)k 2(ed)k
+8143(an)s 3(ywhere)k 0 8060(from)m 518(the)s 860(be)s 3(ginning)k
+1862(of)s 2127(its)s 2397(o)s 6(wn)k 2855(body)s
+3383(to)s 3616(the)s 3958(end)s 4355(of)s 4620(the)s
+4962(body)s 5490(of)s 5755(the)s 6097(symbol)s 6851(it)s
+7037(is)s 7241(de\207ned)s 7998(within.)s 8766(So,)s 0 7772(assuming)m
+957(an)s 1240(appropriate)s 2384(de\207nition)s 3358(of)s 220 fnt35
+3629 7769(@Bo)m 6(x)k 240 fnt82 4222 7772(,)m 220 fnt35
+480 7271(@NineSquare @Bo)m 6(x)k 240 fnt82 0 6775(has)m 370(result)s
+2796 2796 226 2570 240 288 60 480 3689 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+740 740 226 514 240 288 60 0 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 0 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 3238(Nested)m 722(de\207nitions)s 1783(may)s 2249(themselv)s 3(es)k
+3359(contain)s 4120(nested)s 4789(de\207nitions,)s 5906(to)s 6145(arbitrary)s
+7020(depth.)s 480 2864(There)m 1100(are)s 1454(three)s 1994(special)s
+2719(features)s 3532(which)s 4181(permit)s 4872(a)s 5045(nested)s
+5721(symbol)s 6488(or)s 6754(parameter)s 7775(to)s 8021(be)s
+8311(in)s 9(v)k 4(ok)k 2(ed)k 0 2576(outside)m
+737(its)s 1003(normal)s 1725(range;)s 2358(that)s 2766(is,)s
+3022(outside)s 3759(the)s 4096(body)s 4620(of)s 4881(the)s
+5219(enclosing)s 6179(symbol.)s 7038(The)s 7456(\207rst)s 7877(and)s
+8270(simplest)s 0 2288(of)m 267(these)s 810(features)s 1611(is)s
+1817(the)s 240 fnt83 2161 2290(body)m 2678(par)s 3(ameter)k
+240 fnt82 3677 2288(,)m 3780(an)s 4059(alternati)s 6(v)k 3(e)k
+5108(form)s 5628(of)s 5895(right)s 6401(parameter)s 13(.)k
+7502(The)s 7926(Eq)s 8245(equation)s 0 2000(formatting)m 1052(package)s
+1883([4)s 2076(,)s 2174(Chapter)s 2982(7])s 3211(is)s
+3412(a)s 3569(classic)s 4249(e)s 3(xample)k 5102(of)s
+5364(the)s 5703(use)s 6069(of)s 6331(a)s 6488(body)s
+7013(parameter)s 13(.)k 8109(In)s 8355(outline,)s 0 1712(it)m
+192(looks)s 762(lik)s 2(e)k 1174(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save 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
+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
+240 fnt84 0 13840(18)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 220 fnt35 480 13211(e)m 6(xpor)k -8(t "+" sup o)k 3(v)k 5(er)k
+480 12635(def @Eq)m 480 12347( body x)m 480 12059({)m 480 11771( def "+" ...)m 480 11483( def sup ...)m
+480 11195( def o)m 3(v)k 5(er ...)k 480 10907( ...)m 480 10331( Slope @F)m 6(ont x)k
+480 10043(})m 240 fnt82 0 9549(First)m 518(we)s 874(list)s
+1246(those)s 1828(nested)s 2518(symbols)s 3388(and)s 3813(parameters)s
+4932(that)s 5371(we)s 5727(intend)s 6404(to)s 6664(refer)s
+7194(to)s 7454(outside)s 8222(the)s 8592(body)s 0 9261(of)m
+220 fnt35 274 9258(@Eq)m 240 fnt82 815 9261(in)m 1061(an)s
+220 fnt35 1347 9258(e)m 6(xpor)k -8(t)k 240 fnt82
+2018 9261(clause,)m 2725(preceding)s 3724(the)s 4075(de\207nition)s 5052(as)s
+5305(sho)s 6(wn.)k 6092(Only)s 6628(e)s 3(xported)k
+7523(symbols)s 8375(may)s 8844(be)s 0 8973(in)m 9(v)k 4(ok)k 2(ed)k
+817(outside)s 1566(the)s 1916(body)s 2452(of)s 220 fnt35
+2725 8970(@Eq)m 240 fnt82 3203 8973(.)m 3369(The)s 3799(body)s
+4335(parameter)s 5351(is)s 5563(lik)s 2(e)k 5977(a)s
+6145(right)s 6658(parameter)s 7674(e)s 3(xcept)k 8357(that)s
+8778(the)s 0 8685(e)m 3(xported)k 892(symbols)s 1741(are)s
+2088(visible)s 2781(within)s 3449(it:)s 220 fnt35 480 8184(@Eq { {x sup 2 + y sup 2} o)m 3(v)k 5(er 2 })k
+240 fnt82 0 7686(calls)m 488(on)s 785(the)s 1133(nested)s
+1802(de\207nitions)s 2863(of)s 220 fnt35 3134 7683(@Eq)m 240 fnt82
+3672 7686(to)m 3911(produce)s 4738(the)s 5086(result)s 168 fnt78
+586 7231(2)m 240 fnt83 480 7171(x)m 240 fnt78 738 7163(+)m
+168 fnt78 1041 7231(2)m 240 fnt83 939 7171(y)m 641 0 0 0 240 288 12 480 7073 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+240 fnt78
+743 6845(2)m 240 fnt82 0 6334(The)m 416(body)s 937(parameter')s 13(s)k
+2089(v)s 6(alue)k 2644(must)s 3156(be)s 3426(enclosed)s
+4308(in)s 4539(braces.)s 5300(The)s 5715(term)s 6200(`body)s
+6800(parameter')s 7854(is)s 8051(a)s 8204(reminder)s 0 6046(that)m
+418(the)s 766(v)s 6(alue)k 1334(is)s 1544(interpreted)s
+2636(as)s 2886(if)s 3103(it)s 3295(w)s 2(as)k
+3716(within)s 4384(the)s 4732(body)s 5266(of)s 5537(the)s
+5885(symbol.)s 480 5672(A)m 710(body)s 1244(parameter)s 2257(may)s
+2723(not)s 3089(be)s 3370(e)s 3(xported,)k 4311(and)s
+4714(in)s 4957(f)s 2(act)k 5372(a)s 5537(body)s
+6071(parameter)s 7085(may)s 7550(be)s 7832(in)s 9(v)k 4(ok)k 2(ed)k
+8646(only)s 0 5384(within)m 656(the)s 991(body)s 1512(of)s
+1770(the)s 2105(enclosing)s 3063(symbol,)s 3862(not)s 4215(within)s
+4870(an)s 3(y)k 5254(nested)s 5911(de\207nitions.)s 7072(F)s 3(or)k
+7448(e)s 3(xample,)k 220 fnt35 8349 5381(x)m 240 fnt82
+8504 5384(abo)m 3(v)k 3(e)k 0 5096(may)m 471(not)s
+843(be)s 1131(in)s 9(v)k 4(ok)k 2(ed)k
+1952(within)s 220 fnt35 2626 5093(sup)m 240 fnt82 2972 5096(.)m
+3141(This)s 3623(restriction)s 4653(is)s 4869(needed)s 5611(to)s
+5855(a)s 4(v)k 4(oid)k 6443(the)s 6797(possibility)s
+7853(of)s 8130(recursion,)s 0 4808(when)m 585(the)s 943(actual)s
+1577(body)s 2121(parameter)s 3145(in)s 9(v)k 4(ok)k 2(es)k
+3935(an)s 4228(e)s 3(xported)k 5129(nested)s 5808(de\207nition)s
+6792(which)s 7443(in)s 9(v)k 4(ok)k 2(es)k
+8234(the)s 8592(body)s 0 4520(parameter)m 9(,)k 1052(etc.)s
+480 4146(The)m 932(second)s 1679(place)s 2263(where)s 2928(e)s 3(xported)k
+3844(symbols)s 4717(may)s 5207(be)s 5514(used)s 6035(is)s
+6269(in)s 6536(the)s 6909(right)s 7444(parameter)s 8482(of)s
+8778(the)s 220 fnt35 0 3855(@Open)m 240 fnt82 806 3858(symbol,)m
+1618(and)s 2022(follo)s 6(wing)k 2999(its)s 3275(alternati)s 6(v)k 3(e)k
+4329(form,)s 220 fnt35 4900 3855(@Use)m 240 fnt82 5565 3858(\(Section)m
+6418(3.34\).)s 480 3484(Exported)m 1480(nested)s 2214(symbols)s 3128(and)s
+3598(parameters)s 4761(may)s 5292(be)s 5639(made)s 6279(visible)s
+7037(within)s 7770(a)s 8002(subsequent)s 0 3196(de\207nition)m 974(or)s
+1233(macro)s 1883(by)s 2177(preceding)s 3173(it)s 3365(with)s
+3847(an)s 220 fnt35 4130 3193(impor)m -8(t)k 240 fnt82
+4803 3196(clause,)m 5507(lik)s 2(e)k 5919(this:)s 220 fnt35
+480 2695(impor)m -8(t @Eq)k 480 2407(def p)m 6(ythag { sqr)k -8(t { x sup 2 + y sup 2 } })k
+240 fnt82 0 1908(Note)m 548(ho)s 6(we)k 6(v)k 3(er)k
+1444(that)s 220 fnt35 1889 1905(p)m 6(ythag)k 240 fnt82
+2617 1908(can)m 3033(only)s 3540(be)s 3849(used)s 4374(with)s
+4883(some)s 5471(in)s 9(v)k 4(ocation)k 6552(of)s
+220 fnt35 6850 1905(@Eq)m 240 fnt82 7328 1908(:)m 7521(within)s
+8216(the)s 8592(body)s 0 1620(parameter)m 1036(of)s 1329(an)s
+1635(in)s 9(v)k 4(ocation)k 2711(of)s 220 fnt35
+3005 1617(@Eq)m 240 fnt82 3483 1620(,)m 3612(within)s 4303(the)s
+4673(right)s 5207(parameter)s 6243(of)s 6537(an)s 220 fnt35
+6842 1617(@Eq&&tag @Open)m 240 fnt82 8737 1620(,)m 8867(or)s 0 1332(follo)m 6(wing)k
+977(a)s 220 fnt35 1143 1329(@Use { @Eq ...)m 13( })k 240 fnt82
+2798 1332(.)m 2962(There)s 3575(may)s 4041(be)s 4323(se)s 6(v)k 3(eral)k
+5045(symbols)s 5894(in)s 6137(the)s 220 fnt35 6485 1329(impor)m -8(t)k
+240 fnt82 7158 1332(clause.)m 480 958(In)m 760(a)s 951(similar)s
+1698(w)s 2(ay)k 2174(to)s 220 fnt35 2438 955(impor)m -8(t)k
+240 fnt82 3051 958(,)m 3183(a)s 3374(de\207nition)s 4373(may)s
+4864(be)s 5171(preceded)s 6117(by)s 220 fnt35 6436 955(e)m 6(xtend)k
+240 fnt82 7162 958(follo)m 6(wed)k 8089(by)s 8408(a)s
+8599(sym)s 8998(-)s 0 670(bol)m 361(name:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.3.)m 454(Nested)s 1171(de\207nitions,)s 2261(body)s
+2783(par)s 3(ameter)k 2(s,)k 3961(e)s 4(xtend,)k
+4674(import,)s 5405(and)s 5831(e)s 4(xport)k 240 fnt84
+8832 13840(19)m 220 fnt35 480 13207(e)m 6(xtend @Eq)k 480 12919(def p)m 6(ythag { sqr)k -8(t { x sup 2 + y sup 2 } })k
+240 fnt82 0 12420(The)m 418(ef)s 6(fect)k 1003(of)s
+1264(this)s 1649(is)s 1849(just)s 2243(as)s 2483(though)s
+3195(the)s 3533(de\207nition)s 4496(of)s 220 fnt35 4757 12417(p)m 6(ythag)k
+240 fnt82 5447 12420(had)m 5841(occurred)s 6724(directly)s 7497(after)s
+7982(the)s 8319(e)s 3(xisting)k 0 12132(de\207nitions)m 1058(within)s
+220 fnt35 1722 12129(@Eq)m 240 fnt82 2200 12132(,)m 2303(with)s
+220 fnt35 2782 12129(p)m 6(ythag)k 240 fnt82 3479 12132(added)m
+4105(to)s 220 fnt35 4340 12129(@Eq)m 240 fnt82 4818 12132(')m 13(s)k
+5025(e)s 3(xport)k 5689(list.)s 6140(This)s 6612(is)s
+6819(useful)s 7454(for)s 7788(e)s 3(xtending)k 8778(the)s
+0 11844(capabilities)m 1128(of)s 1389(a)s 1545(package)s 2375(of)s
+2636(de\207nitions)s 3687(lik)s 2(e)k 220 fnt35 4088 11841(@Eq)m
+240 fnt82 4616 11844(without)m 5397(modifying)s 6437(its)s 6703(source)s
+7373(\207le.)s 7832(The)s 8249(essential)s 0 11556(dif)m 6(ferences)k
+1106(to)s 220 fnt35 1346 11553(impor)m -8(t)k 240 fnt82
+2020 11556(are)m 2368(that)s 2787(all)s 3081(the)s 3430(symbols)s
+4280(of)s 220 fnt35 4552 11553(@Eq)m 240 fnt82 5091 11556(become)m
+5892(visible)s 6586(within)s 220 fnt35 7255 11553(p)m 6(ythag)k
+240 fnt82 7896 11556(,)m 8004(not)s 8371(just)s 8778(the)s
+0 11268(e)m 3(xported)k 892(ones,)s 1438(and)s 1842(only)s
+2322(one)s 2724(symbol)s 3484(may)s 3950(follo)s 6(w)k
+4622(the)s 220 fnt35 4970 11265(e)m 6(xtend)k 240 fnt82
+5671 11268(k)m 2(e)k 3(yw)k 2(ord.)k 480 10894(Actually)m 15(,)k
+1399(more)s 1951(than)s 2424(one)s 2831(symbol)s 3595(may)s
+4066(follo)s 6(w)k 220 fnt35 4743 10891(e)m 6(xtend)k
+240 fnt82 5384 10894(,)m 5495(b)s 4(ut)k 5862(this)s
+6262(usage)s 6868(indicates)s 7772(a)s 7943(`path)s 8496(name')s
+0 10606(of)m 271(the)s 619(symbol.)s 1488(F)s 3(or)k
+1877(e)s 3(xample,)k 220 fnt35 480 10105(e)m 6(xtend @DocumentLa)k 6(y)k 4(out @Repor)k -8(tLa)k 6(y)k 4(out)k
+480 9817(def @K)m 8(e)k 4(yw)k 2(ords ...)k 240 fnt82
+0 9319(causes)m 676(the)s 1026(de\207nition)s 2002(of)s 220 fnt35
+2275 9316(@K)m 8(e)k 4(yw)k 2(ords)k 240 fnt82
+3502 9319(to)m 3743(occur)s 4335(directly)s 5120(after)s 5618(the)s
+5968(e)s 3(xisting)k 6777(de\207nitions)s 7840(of)s 220 fnt35
+8113 9316(@Repor)m -8(t)k 240 fnt82 8998 9319(-)m 220 fnt35
+0 9028(La)m 6(y)k 4(out)k 240 fnt82 645 9031(,)m
+752(which)s 1394(itself)s 1942(lies)s 2324(within)s 220 fnt35
+2992 9028(@DocumentLa)m 6(y)k 4(out)k 240 fnt82 4860 9031(.)m
+480 8657(A)m 702(named)s 1390(parameter)s 2395(may)s 2853(also)s
+3283(be)s 3556(preceded)s 4469(by)s 4754(an)s 220 fnt35
+5029 8654(impor)m -8(t)k 240 fnt82 5694 8657(clause.)m 6386(As)s
+6695(usual,)s 7299(the)s 7638(meaning)s 8507(is)s 8708(that)s
+0 8369(the)m 336(visible)s 1016(local)s 1522(de\207nitions)s 2570(of)s
+2828(the)s 3163(import)s 3847(symbol\(s\))s 4839(are)s 5173(visible)s
+5853(within)s 6508(the)s 6843(body)s 7364(\(the)s 7778(def)s 2(ault)k
+8486(v)s 6(alue\))k 0 8081(of)m 281(the)s 640(named)s
+1347(parameter)s 13(.)k 2463(But)s 2879(furthermore,)s 4137(those)s
+4709(symbols)s 5569(will)s 6005(be)s 6298(visible)s 7002(within)s
+7681(all)s 7985(in)s 9(v)k 4(ocations)k 0 7793(of)m
+271(the)s 619(parameter)s 13(.)k 1724(F)s 3(or)k
+2113(e)s 3(xample,)k 3027(suppose)s 3855(we)s 4190(de\207ne)s
+220 fnt35 480 7292(def @Diag)m 480 7004( impor)m -8(t @Algebr)k 2(a named line)k 4(width { 1p })k
+480 6716( impor)m -8(t @Algebr)k 2(a named dashlength { 2p })k 480 6428( ...)m 240 fnt82
+0 5977(Then,)m 599(if)s 220 fnt35 816 5974(@Algebr)m 2(a)k
+240 fnt82 1847 5977(e)m 3(xports)k 2599(symbols)s 220 fnt35
+3448 5974(+)m 240 fnt82 3568 5977(,)m 220 fnt35 3675 5974(-)m
+240 fnt82 3739 5977(,)m 3846(and)s 4250(so)s 4516(on,)s
+4863(we)s 5198(may)s 5664(write)s 220 fnt35 480 5476(@Diag)m
+480 5188( line)m 4(width { 1f - 2p })k 480 4900( dashlength { 1f + 2p })m 240 fnt82 0 4401(using)m
+565(the)s 905(symbols)s 1747(from)s 220 fnt35 2263 4398(@Algebr)m 2(a)k
+240 fnt82 3234 4401(.)m 3391(There)s 3996(may)s 4454(be)s
+4729(se)s 6(v)k 3(eral)k 5443(symbols)s 6285(after)s
+6773(the)s 220 fnt35 7114 4398(impor)m -8(t)k 240 fnt82
+7779 4401(k)m 2(e)k 3(yw)k 2(ord.)k 8766(All)s
+0 4113(these)m 558(symbols)s 1418(share)s 1990(an)s 2284(important)s
+3285(restriction:)s 4429(the)s 3(y)k 4904(may)s 5381(not)s
+5759(ha)s 4(v)k 3(e)k 6271(parameters.)s 7434(This)s
+7921(is)s 8143(necessary)s 0 3825(because)m 841(Lout)s 1382(w)s 2(ould)k
+2065(be)s 2376(unable)s 3098(to)s 3366(determine)s 4406(suitable)s
+5233(v)s 6(alues)k 5918(for)s 6284(an)s 3(y)k
+6710(such)s 7234(parameters,)s 8417(if)s 8663(the)s 3(y)k
+0 3537(did)m 364(e)s 3(xist.)k 480 3163(As)m 814(an)s
+1115(e)s 3(xception)k 2116(to)s 2373(the)s 2738(rule)s
+3183(just)s 3605(gi)s 6(v)k 3(en,)k 4253(a)s
+4436(named)s 5150(parameter)s 6181(may)s 6665(import)s 7379(the)s
+7745(symbol)s 8522(it)s 8732(is)s 8960(a)s 0 2875(parameter)m
+1014(of:)s 220 fnt35 480 2374(e)m 6(xpor)k -8(t @Cell)k
+480 2086(def @Tb)m 4(l)k 480 1798( impor)m -8(t @Tb)k 4(l named @F)k 6(or)k -5(mat { ...)k 13( })k
+240 fnt82 0 1302(In)m 274(this)s 688(e)s 3(xample)k
+1569(the)s 1936(e)s 3(xported)k 2846(de\207nitions)s 3925(of)s
+220 fnt35 4215 1299(@Tb)m 4(l)k 240 fnt82 4802 1302(\(i.e.)m
+220 fnt35 5235 1299(@Cell)m 240 fnt82 5820 1302(\))m 5966(will)s
+6411(be)s 6711(visible)s 7422(within)s 220 fnt35 8109 1299(@F)m 6(or)k -5(mat)k
+240 fnt82 9022 1302(.)m 0 1014(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k
+984(the)s 3(y)k 1472(may)s 1963(only)s 2467(be)s
+2774(used)s 3296(in)s 3563(actual)s 4213(parameters,)s 5392(not)s
+5782(in)s 6050(the)s 6423(def)s 2(ault)k 7168(v)s 6(alue)k
+7761(of)s 8057(the)s 8430(named)s 0 726(parameter)m 13(.)k
+1098(This)s 1567(is)s 1769(o)s 6(wing)k 2408(to)s
+2639(implementation)s 4189(problems:)s 5237(at)s 5462(the)s 5803(time)s
+6275(the)s 6616(def)s 2(ault)k 7329(v)s 6(alue)k
+7890(of)s 220 fnt35 8153 723(@F)m 6(or)k -5(mat)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(20)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(is)m 210(read,)s 728(the)s
+1076(e)s 3(xported)k 1968(symbols)s 2817(ha)s 4(v)k 3(e)k
+3318(not)s 3684(been)s 4193(read)s 4662(and)s 5066(are)s
+5413(consequently)s 6730(not)s 7096(kno)s 6(wn.)k 480 12831(Since)m
+220 fnt35 1064 12828(@Cell)m 240 fnt82 1706 12831(is)m 1913(nested)s
+2579(within)s 220 fnt35 3244 12828(@Tb)m 4(l)k 240 fnt82
+3753 12831(,)m 3857(the)s 4202(v)s 6(alue)k 4766(of)s
+5034(an)s 5314(in)s 9(v)k 4(ocation)k 6365(of)s
+220 fnt35 6633 12828(@Cell)m 240 fnt82 7275 12831(may)m 7738(depend)s
+8485(on)s 8778(the)s 0 12543(v)m 6(alue)k 582(of)s
+868(parameters)s 1980(of)s 220 fnt35 2266 12540(@Tb)m 4(l)k
+240 fnt82 2775 12543(.)m 2953(If)s 220 fnt35 3198 12540(@Cell)m
+240 fnt82 3857 12543(is)m 4082(used)s 4593(within)s 5276(an)s
+5573(actual)s 220 fnt35 6213 12540(@F)m 6(or)k -5(mat)k
+240 fnt82 7200 12543(parameter)m 9(,)k 8267(its)s 8558(v)s 6(alue)k
+0 12255(depends)m 833(on)s 1126(the)s 1471(v)s 6(alue)k
+2035(of)s 2303(parameters)s 3397(of)s 3665(the)s 4009(in)s 9(v)k 4(ocation)k
+5060(of)s 220 fnt35 5327 12252(@Tb)m 4(l)k 240 fnt82
+5893 12255(of)m 6160(which)s 6799(the)s 220 fnt35 7143 12252(@F)m 6(or)k -5(mat)k
+240 fnt82 8112 12255(parameter)m 0 11967(is)m 210(a)s 376(part.)s
+480 11593(A)m 710(de\207nition,)s 1734(macro,)s 2438(or)s 2697(named)s
+3393(parameter)s 4407(may)s 4873(ha)s 4(v)k 3(e)k
+5374(se)s 6(v)k 3(eral)k 6096(alternati)s 6(v)k 3(e)k
+7150(names,)s 7868(lik)s 2(e)k 8280(this:)s 220 fnt35
+480 11092(macro @CD @CentredDispla)m 6(y @CenteredDispla)k 6(y { ...)k 13( })k 240 fnt82
+0 10594(This)m 489(is)s 713(useful)s 1366(for)s 1718(abbre)s 6(viated)k
+2898(and)s 3316(alternati)s 6(v)k 3(e)k 4384(spellings,)s
+5355(as)s 5618(sho)s 6(wn.)k 6416(The)s 6858(names)s
+7534(appear)s 8245(together)s 9(,)k 0 10306(and)m 404(the)s 3(y)k
+867(may)s 1333(subsequently)s 2637(be)s 2919(used)s 3416(interchangeably)s 15(.)k
+480 9932(If)m 698(one)s 1088(name)s 1649(of)s 1908(a)s
+2062(symbol)s 2809(appears)s 3578(in)s 3809(an)s 4079(e)s 3(xport)k
+4735(or)s 4982(import)s 5666(list,)s 6052(its)s 6316(other)s
+6854(names)s 7504(are)s 7838(automaticaly)s 0 9644(included)m 882(as)s
+1132(well,)s 1650(and)s 2054(should)s 2751(not)s 3117(also)s
+3555(appear)s 4252(in)s 4495(the)s 4843(list.)s 240 fnt84
+0 8851(2.4.)m 471(Filter)s 4(ed)k 1330(right)s 1894(and)s
+2335(body)s 2897(parameters)s 240 fnt82 480 8374(A)m 719(right)s
+1239(or)s 1507(body)s 2050(parameter)s 3073(may)s 3548(be)s
+3839(\207ltered)s 4582(by)s 4885(some)s 5455(other)s 6015(computer)s
+6987(program)s 7866(before)s 8541(being)s 0 8086(included)m 882(by)s
+1176(Lout.)s 1792(As)s 2109(an)s 2392(e)s 3(xample)k
+3255(of)s 3526(such)s 4022(a)s 4188(program)s 5058(we)s
+5393(will)s 5819(use)s 6194(the)s 6542(Unix)s 220 fnt35
+7076 8083(sor)m -8(t)k 240 fnt82 7506 8086(command:)m 220 fnt35
+480 7587(sor)m -8(t -o out\207le in\207le)k 240 fnt82 0 7133(This)m 499(causes)s
+1198(\207le)s 220 fnt35 1582 7130(out\207le)m 240 fnt82 2243 7133(to)m
+2505(contain)s 3290(a)s 3480(sorted)s 4145(cop)s 2(y)k
+4687(of)s 4981(\207le)s 220 fnt35 5366 7130(in\207le)m 240 fnt82
+5808 7133(.)m 5996(W)s 19(e)k 6388(incorporate)s 7556(this)s
+7975(into)s 8424(a)s 8614(Lout)s 0 6845(de\207nition)m 974(as)s
+1224(follo)s 6(ws:)k 220 fnt35 480 6393(def @Sor)m -8(t)k
+480 6105( named @Options {})m 480 5817( r)m -3(ight x)k 480 5529({)m 480 5241( def @Filter { sor)m -8(t @Options -o @FilterOut @FilterIn })k
+480 4665( lines @Break x)m 480 4377(})m 240 fnt82 0 3883(The)m 440(presence)s
+1345(within)s 220 fnt35 2026 3880(@Sor)m -8(t)k 240 fnt82
+2728 3883(of)m 3012(a)s 3191(de\207nition)s 4178(of)s 4462(a)s
+4641(symbol)s 5414(called)s 220 fnt35 6055 3880(@Filter)m 240 fnt82
+6837 3883(tells)m 7298(Lout)s 7823(that)s 8254(the)s 8615(right)s
+0 3595(parameter)m 1057(of)s 220 fnt35 1372 3592(@Sor)m -8(t)k
+240 fnt82 2104 3595(is)m 2358(to)s 2640(be)s 2966(\207ltered)s
+3743(before)s 4453(inclusion.)s 5537(When)s 220 fnt35 6210 3592(@Sor)m -8(t)k
+240 fnt82 6942 3595(is)m 7196(in)s 9(v)k 4(ok)k 2(ed,)k
+220 fnt35 8103 3592(@Filter)m 240 fnt82 8916 3595(is)m 0 3307(e)m 6(v)k 6(aluated)k
+978(and)s 1399(its)s 1692(v)s 6(alue)k 2277(e)s 3(x)k 3(ecuted)k
+3196(as)s 3463(a)s 3646(system)s 4387(command.)s 5512(In)s
+5785(addition)s 6643(to)s 6899(the)s 7264(symbols)s 8130(ordinarily)s
+0 3019(a)m 4(v)k 6(ailable)k 908(within)s 1576(the)s
+1924(body)s 2458(of)s 220 fnt35 2729 3016(@Filter)m 240 fnt82
+3438 3019(,)m 3545(there)s 4078(are)s 4425(three)s 4958(others:)s
+220 fnt35 0 2513(@FilterIn)m 240 fnt82 1920 2516(the)m 2273(name)s
+2852(of)s 3128(a)s 3299(\207le)s 3665(which)s 4312(will,)s
+4795(at)s 5032(the)s 5385(time)s 5870(the)s 6223(system)s
+6952(command)s 7959(is)s 8175(e)s 3(x)k 3(ecuted,)k
+1920 2228(contain)m 2726(the)s 3119(actual)s 3789(right)s 4345(or)s
+4649(body)s 5228(parameter)s 6287(of)s 6603(the)s 6996(symbol,)s
+7853(e)s 3(xactly)k 8639(as)s 8934(it)s 1920 1940(appears)m
+2701(in)s 2944(the)s 3292(input)s 3844(\207le;)s 220 fnt35
+0 1434(@FilterOut)m 240 fnt82 1920 1437(the)m 2305(name)s 2916(of)s
+3224(a)s 3427(\207le)s 3826(of)s 4134(Lout)s 4683(te)s 3(xt)k
+5135(whose)s 5840(contents)s 6726(Lout)s 7275(will)s 7738(read)s
+8244(after)s 8778(the)s 1920 1149(system)m 2657(command)s 3673(has)s
+4057(\207nished,)s 4936(as)s 5200(a)s 5380(replacement)s 6620(for)s
+6972(what)s 7511(w)s 2(as)k 7946(put)s 8326(into)s
+8765(\207le)s 220 fnt35 1920 858(@FilterIn)m 240 fnt82 2798 861(;)m
+220 fnt35 0 374(@FilterErr)m 240 fnt82 1920 377(the)m 2273(name)s
+2852(of)s 3129(a)s 3300(\207le)s 3667(that)s 4090(Lout)s
+4608(will)s 5039(attempt)s 5820(to)s 6065(read)s 6539(after)s
+7041(the)s 7394(system)s 8124(command)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.4.)m 454(F)s 10(ilter)k 8(ed)k
+1271(right)s 1800(and)s 2226(body)s 2748(par)s 3(ameter)k 2(s)k
+240 fnt84 8839 13840(21)m 240 fnt82 1920 13205(has)m 2281(\207nished,)s
+3137(containing)s 4191(error)s 4705(messages)s 5649(produced)s 6589(by)s
+6874(the)s 7213(command)s 8206(that)s 8614(Lout)s 1920 12917(will)m
+2346(pass)s 2809(on)s 3106(to)s 3345(the)s 3693(user)s
+4151(as)s 4401(non-f)s 2(atal)k 5316(errors.)s 6036(Use)s
+6464(of)s 6735(this)s 7131(\207le)s 7492(is)s 7702(optional.)s
+0 12414(It)m 205(is)s 415(a)s 581(f)s 2(atal)k
+1057(error)s 1580(for)s 1918(the)s 2266(system)s 2990(command)s
+3992(to)s 4231(return)s 4858(a)s 5024(non-zero)s 5927(status.)s
+480 12040(No)m 6(w)k 1001(the)s 220 fnt35 1356 12037(sor)m -8(t)k
+240 fnt82 1793 12040(command)m 2802(has)s 3179(options)s 220 fnt35
+3942 12037(-u)m 240 fnt82 4190 12040(for)m 4535(deleting)s 5365(duplicate)s
+6304(lines,)s 6869(and)s 220 fnt35 7280 12037(-r)m 240 fnt82
+7493 12040(for)m 7838(re)s 6(v)k 3(ersing)k 8778(the)s
+0 11752(sorting)m 717(order)s 13(.)k 1372(So)s 1678(the)s
+2026(result)s 2616(of)s 220 fnt35 480 11251(@Sor)m -8(t)k
+480 10963( @Options { -r -u })m 480 10675({)m 480 10387(A)m 6(usten, J)k 4(ane)k
+480 10099(Dic)m 4(k)k 4(ens)k 3(, Char)k -3(les)k
+480 9811(Eliot, George)m 480 9523(Hardy)m 22(, )k 11(Thomas)k 480 9235(Bront{@Char edieresis}, Char)m -3(lotte)k
+480 8947(})m 240 fnt82 0 8453(is)m 480 8000(Hardy)m 15(,)k
+1170(Thomas)s 480 7712(Eliot,)m 1051(Geor)s 4(ge)k 480 7424(Dick)m 2(ens,)k
+1369(Charles)s 480 7136(Bront\353,)m 1238(Charlotte)s 480 6848(Austen,)m 1265(Jane)s
+0 6364(Unlik)m 2(e)k 705(all)s 998(the)s 1347(other)s
+1898(e)s 3(xamples)k 2849(in)s 3093(this)s 3489(manual,)s
+4300(this)s 4697(output)s 5369(is)s 5579(simulated.)s 6673(This)s
+7149(w)s 2(as)k 7570(done)s 8093(so)s 8359(that)s
+8778(the)s 0 6076(ability)m 661(to)s 896(format)s 1588(this)s
+1980(manual)s 2735(is)s 2942(not)s 3304(dependent)s 4344(on)s
+4637(the)s 4981(e)s 3(xistence)k 5919(of)s 6187(the)s
+6531(Unix)s 220 fnt35 7061 6073(sor)m -8(t)k 240 fnt82
+7487 6076(command,)m 8534(and)s 8934(it)s 0 5788(highlights)m 1008(the)s
+1356(f)s 2(act)k 1771(that)s 2189(\207ltered)s 2923(actual)s
+3548(parameters)s 4646(are)s 4993(by)s 5287(their)s 5784(nature)s
+6437(of)s 6708(uncertain)s 7654(portability)s 15(.)k 480 5414(There)m
+1114(is)s 1345(no)s 1660(need)s 2191(for)s 2550(an)s
+2855(actual)s 3501(\207ltered)s 4257(parameter)s 5292(to)s 5552(obe)s 3(y)k
+6091(the)s 6460(le)s 3(xical)k 7169(rules)s 7706(of)s
+7998(Lout,)s 8579(since)s 0 5126(it)m 207(is)s 432(passed)s
+1143(directly)s 1941(to)s 2195(the)s 2558(other)s 3124(program.)s
+4113(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5088(Lout)s 5615(must)s 6155(be)s 6452(able)s 6921(to)s
+7175(w)s 2(ork)k 7741(out)s 8122(where)s 8778(the)s
+0 4838(parameter)m 1034(ends,)s 1601(which)s 2263(gi)s 6(v)k 3(es)k
+2831(rise)s 3251(to)s 3511(the)s 3879(follo)s 6(wing)k
+4877(rules.)s 5525(As)s 5863(with)s 6365(a)s 6552(body)s
+7106(parameter)s 9(,)k 8179(a)s 8366(symbol)s 220 fnt35
+0 4547(@Sym)m 240 fnt82 730 4550(with)m 1235(a)s 1423(\207ltered)s
+2180(parameter)s 3217(must)s 3764(be)s 4069(in)s 9(v)k 4(ok)k 2(ed)k
+4906(in)s 5172(either)s 5798(the)s 6168(form)s 220 fnt35
+6715 4547(@Sym { ...)m 13( })k 240 fnt82 7949 4550(or)m 8231(the)s
+8602(form)s 220 fnt35 0 4259(@Sym @Begin ...)m 13( @End @Sym)k 240 fnt82
+3120 4262(,)m 3251(plus)s 3725(options)s 4505(as)s 4779(usual.)s
+5472(In)s 5753(the)s 6125(former)s 6858(case,)s 7400(braces)s
+8085(within)s 8778(the)s 0 3974(actual)m 625(parameter)s 1639(must)s
+2164(match;)s 2860(in)s 3103(the)s 3451(latter)s 4000(case,)s
+4518(the)s 4866(actual)s 5491(parameter)s 6505(may)s 6971(not)s
+7337(contain)s 220 fnt35 8098 3971(@End)m 240 fnt82 8699 3974(.)m
+480 3600(If)m 725(an)s 1024(actual)s 1664(\207ltered)s 2414(parameter)s
+3444(contains)s 220 fnt35 4307 3597(@Include)m 240 fnt82 5229 3600(,)m
+5352(this)s 5764(is)s 5989(tak)s 2(en)k 6578(to)s
+6833(be)s 3(gin)k 7434(a)s 7616(Lout)s 220 fnt35
+8144 3597(@Include)m 240 fnt82 0 3312(directi)m 6(v)k 3(e)k
+882(in)s 1125(the)s 1473(usual)s 2033(form)s 2557(\(Section)s
+3410(3.40\):)s 220 fnt35 480 2821(@Sor)m -8(t {)k 480 2533(A)m 6(usten, J)k 4(ane)k
+480 2245(@Include { authors })m 480 1957(Hardy)m 22(, )k 11(Thomas)k 480 1669(})m
+240 fnt82 0 1175(The)m 421(included)s 1296(\207le)s 1649(becomes)s
+2530(part)s 2954(of)s 220 fnt35 3217 1172(@FilterIn)m 240 fnt82
+4095 1175(,)m 4195(b)s 4(ut)k 4549(an)s 3(y)k
+4939(braces,)s 220 fnt35 5649 1172(@Include)m 240 fnt82 6571 1175(,)m
+6670(or)s 220 fnt35 6922 1172(@End)m 240 fnt82 7576 1175(within)m
+8236(it)s 8421(are)s 8760(not)s 0 887(noticed)m 762(by)s
+1056(Lout.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(22)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 480 13205(The)m 928(\207rst)s 1380(character)s
+2335(of)s 2627(\207le)s 220 fnt35 3009 13202(@FilterIn)m 240 fnt82
+3968 13205(will)m 4415(be)s 4718(the)s 5087(\207rst)s 5539(non-white)s
+6586(space)s 7194(character)s 8149(follo)s 6(wing)k 0 12917(the)m
+353(opening)s 220 fnt35 1184 12914({)m 240 fnt82 1314 12917(or)m
+220 fnt35 1579 12914(@Begin)m 240 fnt82 2348 12917(,)m 2461(or)s
+2726(the)s 3080(\207rst)s 3517(character)s 4457(of)s 4734(an)s
+5023(included)s 5911(\207le)s 6278(if)s 220 fnt35 6501 12914(@Include)m
+240 fnt82 7489 12917(comes)m 8157(\207rst.)s 8698(The)s 0 12629(second-last)m
+1146(character)s 2091(of)s 2374(\207le)s 220 fnt35 2746 12626(@FilterIn)m
+240 fnt82 3696 12629(will)m 4133(be)s 4427(the)s 4786(last)s
+5189(non-white)s 6226(space)s 6825(character)s 7770(preceding)s 8778(the)s
+0 12341(closing)m 220 fnt35 745 12338(})m 240 fnt82 871 12341(or)m
+220 fnt35 1132 12338(@End @Sym)m 240 fnt82 2454 12341(,)m 2563(or)s
+2824(the)s 3174(last)s 3567(character)s 4503(of)s 4775(an)s
+5060(included)s 5944(\207le)s 6307(if)s 220 fnt35 6526 12338(@Include)m
+240 fnt82 7510 12341(comes)m 8174(last.)s 8671(One)s 0 12053(ne)m 6(wline)k
+833(character)s 1794(is)s 2030(al)s 2(w)k 2(ays)k
+2768(appended)s 3770(and)s 4201(is)s 4437(the)s 4812(last)s
+5229(character)s 6190(of)s 6487(\207le)s 220 fnt35 6875 12050(@FilterIn)m
+240 fnt82 7753 12053(.)m 7943(This)s 8446(ef)s 6(fects)k
+0 11765(a)m 206(compromise)s 1484(between)s 2378(the)s 2766(Lout)s
+3319(con)s 9(v)k 3(ention,)k 4518(that)s 4976(spaces)s
+5691(follo)s 6(wing)k 220 fnt35 6708 11762({)m 240 fnt82
+6873 11765(or)m 7172(preceding)s 220 fnt35 8208 11762(})m 240 fnt82
+8372 11765(are)m 8760(not)s 0 11477(signi\207cant,)m 1103(with)s 1585(the)s
+1933(Unix)s 2467(con)s 9(v)k 3(ention)k 3576(that)s
+3994(all)s 4287(te)s 3(xt)k 4702(\207les)s 5151(end)s
+5555(with)s 6037(a)s 6203(ne)s 6(wline)k 7010(character)s 13(.)k
+240 fnt84 0 10684(2.5.)m 471(Pr)s 4(ecedence)k 1677(and)s
+2118(associati)s 2(vity)k 3420(of)s 3692(symbols)s 240 fnt82
+480 10207(Ev)m 3(ery)k 1131(symbol)s 1920(in)s 2192(Lout)s
+2733(has)s 3132(a)s 240 fnt83 3327 10209(pr)m 8(ecedence)k
+240 fnt82 4401 10207(,)m 4538(which)s 5209(is)s 5448(a)s
+5643(positi)s 6(v)k 3(e)k 6476(whole)s 7146(number)s 13(.)k
+8057(When)s 8716(tw)s 2(o)k 0 9919(symbols)m 849(compete)s
+1715(for)s 2053(an)s 2336(object,)s 3027(the)s 3375(one)s
+3777(with)s 4259(the)s 4607(higher)s 5278(precedence)s 6409(wins)s
+6912(it.)s 7208(F)s 3(or)k 7597(e)s 3(xample,)k
+220 fnt35 480 9418(a | b / c)m 240 fnt82 0 8963(is)m 210(equi)s 6(v)k 6(alent)k
+1253(to)s 220 fnt35 1491 8960({)m 1616(a)s 1794(|)s
+1892(b)s 2067(})s 2192(/)s 2317(c)s 240 fnt82
+2482 8963(rather)m 3097(than)s 220 fnt35 3565 8960(a)m 3743(|)s
+3841({)s 3966(b)s 4141(/)s 4266(c)s 4432(})s
+240 fnt82 4496 8963(,)m 4603(because)s 220 fnt35 5415 8960(|)m
+240 fnt82 5511 8963(has)m 5881(higher)s 6551(precedence)s 7681(than)s
+220 fnt35 8150 8960(/)m 240 fnt82 8273 8963(and)m 8676(thus)s
+0 8675(wins)m 503(the)s 220 fnt35 851 8672(b)m 240 fnt82
+965 8675(.)m 480 8301(When)m 1149(the)s 1538(tw)s 2(o)k
+1988(competing)s 3092(symbols)s 3981(ha)s 4(v)k 3(e)k
+4523(equal)s 5137(precedence,)s 6359(Lout)s 6912(applies)s 7680(a)s
+7887(second)s 8651(rule.)s 0 8013(Each)m 545(symbol)s 1316(is)s
+1537(either)s 240 fnt83 2151 8015(left-associative)m 240 fnt82 3659 8013(or)m
+240 fnt83 3929 8015(right-associative)m 240 fnt82 5528 8013(.)m 5703(The)s
+6142(v)s 6(alue)k 6720(of)s 220 fnt35 7002 8010(a)m
+7180(op1)s 7564(b)s 7739(op2)s 8156(c)s 240 fnt82
+8332 8013(is)m 8553(tak)s 2(en)k 0 7725(to)m 252(be)s
+220 fnt35 547 7722({)m 672(a)s 850(op1)s 1234(b)s
+1409(})s 1534(op2)s 1951(c)s 240 fnt82 2129 7725(if)m
+2359(the)s 2720(symbols)s 3582(are)s 3942(both)s 4438(left-associati)s 6(v)k 3(e,)k
+5993(and)s 220 fnt35 6410 7722(a op1 { b op2 c })m 240 fnt82 8072 7725(if)m
+8302(the)s 3(y)k 8779(are)s 0 7437(right-associati)m 6(v)k 3(e.)k
+1733(In)s 1989(cases)s 2544(not)s 2910(co)s 3(v)k 3(ered)k
+3719(by)s 4013(these)s 4560(tw)s 2(o)k 4970(rules,)s
+5541(use)s 5916(braces.)s 480 7063(It)m 672(sometimes)s 1732(happens)s
+2554(that)s 2959(the)s 3294(result)s 3870(is)s 4067(the)s
+4402(same)s 4935(re)s 3(g)k 1(ardless)k 5937(of)s
+6195(ho)s 6(w)k 6642(the)s 6977(e)s 3(xpression)k
+8041(is)s 8237(grouped.)s 0 6775(F)m 3(or)k 382(e)s 3(xample,)k
+220 fnt35 1289 6772({)m 1414(a)s 1592(|)s 1690(b)s
+1865(})s 1990(|)s 2088(c)s 240 fnt82 2246 6775(and)m
+220 fnt35 2643 6772(a)m 2821(|)s 2919({)s 3044(b)s
+3219(|)s 3317(c)s 3483(})s 240 fnt82 3599 6775(are)m
+3939(al)s 2(w)k 2(ays)k 4643(the)s 4984(same,)s
+5575(for)s 5905(an)s 3(y)k 6295(combination)s 7541(of)s
+7805(objects,)s 8581(g)s 1(aps,)k 0 6487(and)m 416(v)s 6(ariants)k
+1230(of)s 220 fnt35 1513 6484(|)m 240 fnt82 1550 6487(.)m
+1727(In)s 1995(such)s 2504(cases)s 3071(the)s 3432(symbols)s
+4293(are)s 4653(said)s 5108(to)s 5360(be)s 240 fnt83
+5654 6489(associative)m 240 fnt82 6709 6487(,)m 6829(and)s 7245(we)s
+7593(can)s 7995(con\207dently)s 0 6199(omit)m 498(the)s 846(braces.)s
+480 5825(User)m 4(-de\207ned)k 1769(symbols)s 2618(may)s 3084(be)s
+3366(gi)s 6(v)k 3(en)k 3946(a)s 4112(precedence)s
+5243(and)s 5647(associati)s 6(vity:)k 220 fnt35 480 5324(def @Super)m
+480 5036( precedence 50)m 480 4748( associativity r)m -3(ight)k 480 4460( left x)m 480 4172( r)m -3(ight y)k
+480 3884({)m 480 3596( @OneRo)m 3(w { | -2p @F)k 6(ont y ^/0.5fk x })k 480 3308(})m
+240 fnt82 0 2814(The)m 3(y)k 541(come)s 1113(just)s
+1516(after)s 2010(an)s 3(y)k 220 fnt35 2405 2811(into)m
+240 fnt82 2809 2814(clause)m 3460(and)s 3862(before)s 4526(an)s 3(y)k
+4921(parameter)s 5933(de\207nitions.)s 7105(The)s 7531(precedence)s 8660(may)s
+0 2526(be)m 280(an)s 3(y)k 674(whole)s 1313(number)s
+2101(between)s 2952(10)s 3245(and)s 3646(100,)s 4110(and)s
+4512(if)s 4726(omitted)s 5511(is)s 5719(assigned)s 6598(the)s
+6943(v)s 6(alue)k 7509(100.)s 8030(The)s 8455(higher)s
+0 2238(the)m 373(number)s 9(,)k 1227(the)s 1600(higher)s
+2296(the)s 2669(precedence.)s 3933(The)s 4386(associati)s 6(vity)k
+5654(may)s 6145(be)s 220 fnt35 6452 2235(left)m 240 fnt82
+6825 2238(or)m 220 fnt35 7109 2235(r)m -3(ight)k 240 fnt82
+7534 2238(,)m 7666(and)s 8095(if)s 8338(omitted)s 0 1950(def)m 2(aults)k
+805(to)s 220 fnt35 1044 1947(r)m -3(ight)k 240 fnt82
+1469 1950(.)m 1633(Lout')s 13(s)k 2295(symbols)s 3144(ha)s 4(v)k 3(e)k
+3645(the)s 3993(follo)s 6(wing)k 4970(precedences)s 6189(and)s
+6593(associati)s 6(vities:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.5.)m 454(Pr)s 8(ecedence)k 1614(and)s
+2040(associativity)s 3290(of)s 3571(symbols)s 240 fnt84 8833 13840(23)m
+240 fnt82 480 13170(Precedence)m 1904(Associati)s 6(vity)k 3493(Symbols)s
+969 12594(5)m 2011(associati)s 6(v)k 3(e)k 220 fnt35
+3493 12591(/ ^/ // ^//)m 240 fnt82 965 12306(6)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 12303(| ^| || ^||)m 240 fnt82 968 12018(7)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 12015(& ^&)m 240 fnt82 968 11730(7)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 11727(&)m 240 fnt82 3695 11730(in)m 3938(the)s
+4286(form)s 4810(of)s 5081(one)s 5483(or)s 5742(more)s
+6289(white)s 6876(space)s 7463(characters)s 685 11442(10-100)m 220 fnt35
+2012 11439(left)m 240 fnt82 2360 11442(or)m 220 fnt35 2619 11439(r)m -3(ight)k
+240 fnt82 3493 11442(user)m 4(-de\207ned)k 4729(symbols)s 844 11154(100)m
+220 fnt35 2316 11151(r)m -3(ight)k 3493(@Wide)s 240 fnt82
+4207 11154(,)m 220 fnt35 4314 11151(@High)m 240 fnt82 4973 11154(,)m
+220 fnt35 5080 11151(@Gr)m 2(aphic)k 240 fnt82 6064 11154(,)m
+6171(etc.)s 854 10866(101)m 2494(-)s 220 fnt35 3493 10863(&&)m
+240 fnt82 845 10578(102)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 10575(&)m 240 fnt82 3695 10578(in)m 3938(the)s
+4286(form)s 4810(of)s 5081(0)s 5256(spaces)s 850 10290(103)m
+2494(-)s 3493(Body)s 4067(parameters)s 5165(and)s 5569(right)s
+6080(parameters)s 7178(of)s 220 fnt35 7449 10287(@Open)m 240 fnt82
+0 9749(Actually)m 883(the)s 1238(precedence)s 2375(of)s 2653(juxtaposition)s
+3965(\(tw)s 2(o)k 4461(objects)s 5195(separated)s 6162(by)s
+6462(zero)s 6933(spaces\))s 7691(is)s 7908(a)s 8080(little)s
+8579(more)s 0 9461(complicated.)m 1333(If)s 1565(either)s 2170(of)s
+2443(the)s 2793(tw)s 2(o)k 3205(objects)s 3934(is)s
+4146(enclosed)s 5043(in)s 5288(braces,)s 6007(the)s 6357(precedence)s
+7489(is)s 7701(7)s 7871(as)s 8123(for)s 8463(one)s
+8867(or)s 0 9173(more)m 541(spaces.)s 1322(If)s 1545(neither)s
+2262(object)s 2899(is)s 3102(enclosed)s 3991(in)s 4227(braces,)s
+4937(the)s 5279(precedence)s 6403(is)s 6606(102)s 7014(as)s
+7257(sho)s 6(wn)k 7927(abo)s 3(v)k 3(e.)k
+8650(This)s 0 8885(complicated)m 1216(rule)s 1633(seems)s 2258(to)s
+2486(accord)s 3171(better)s 3764(with)s 4235(what)s 4750(people)s
+5434(e)s 3(xpect)k 6104(and)s 6498(need)s 6998(in)s
+7230(practice)s 8031(than)s 8490(a)s 8645(pure)s 0 8597(precedence)m
+1131(rule)s 1558(can)s 1947(do.)s 240 fnt84 0 7804(2.6.)m
+471(The)s 926(style)s 1446(and)s 1887(size)s 2314(of)s
+2586(objects)s 240 fnt82 480 7327(This)m 944(section)s 1666(e)s 3(xplains)k
+2499(ho)s 6(w)k 2948(Lout)s 3448(determines)s 4535(the)s
+4870(style)s 5365(and)s 5757(size)s 6172(of)s 6431(each)s
+6914(object.)s 7650(T)s 19(ogether)k 9(,)k 8579(these)s
+0 7039(attrib)m 4(utes)k 935(determine)s 1946(the)s 2294(object')s 13(s)k
+3088(\207nal)s 3568(appearance)s 4699(in)s 4942(the)s 5290(output.)s
+480 6665(The)m 908(style)s 1415(of)s 1686(an)s 1969(object)s
+2613(comprises)s 3633(the)s 3981(follo)s 6(wing:)k 0 6162(\213)m
+480(Which)s 1175(font)s 1620(f)s 2(amily)k 15(,)k
+2333(f)s 2(ace)k 2784(and)s 3188(size)s 3615(to)s
+3854(use)s 4229(\(also)s 4746(de\207ning)s 5584(the)s 220 fnt35
+5932 6159(f)m 240 fnt82 6050 6162(unit\);)m 0 5659(\213)m 480(Whether)s
+1363(small)s 1935(capitals)s 2715(are)s 3062(in)s 3305(ef)s 6(fect)k
+3901(or)s 4160(not;)s 0 5156(\213)m 480(What)s 1058(g)s 1(ap)k
+1456(to)s 1695(replace)s 2440(a)s 2606(single)s 3233(space)s
+3820(between)s 4674(tw)s 2(o)k 5084(objects)s 5812(by)s
+6106(\(also)s 6623(de\207ning)s 7461(the)s 220 fnt35 7809 5153(s)m
+240 fnt82 7972 5156(unit\);)m 0 4653(\213)m 480(The)s 900(interpretation)s
+2235(to)s 2465(place)s 3017(on)s 3306(white)s 3884(space)s
+4463(separating)s 5490(tw)s 2(o)k 5891(objects)s 6611(\()s
+220 fnt35 6684 4650(lout)m 240 fnt82 7033 4653(,)m 220 fnt35
+7132 4650(compress)m 240 fnt82 8077 4653(,)m 220 fnt35 8175 4650(separ)m 2(ate)k
+240 fnt82 9019 4653(,)m 220 fnt35 480 4362(troff)m 240 fnt82
+855 4365(,)m 962(or)s 220 fnt35 1221 4362(te)m 6(x)k
+240 fnt82 1566 4365(as)m 1816(in)s 2059(Section)s 2833(3.5\);)s
+0 3871(\213)m 480(The)s 908(current)s 1644(v)s 6(alue)k
+2212(of)s 2483(the)s 220 fnt35 2831 3868(y)m 240 fnt82
+2999 3871(and)m 220 fnt35 3403 3868(z)m 240 fnt82 3567 3871(units)m
+4083(of)s 4354(measurement)s 5688(\(Section)s 6541(3.6\);)s 0 3370(\213)m
+480(The)s 908(kind)s 1392(of)s 1663(paragraph)s 2676(breaking)s
+3566(to)s 3805(emplo)s 2(y)k 4575(\()s 220 fnt35
+4648 3367(adjust)m 240 fnt82 5229 3370(,)m 220 fnt35 5336 3367(r)m 2(agged)k
+240 fnt82 6005 3370(,)m 6112(etc.\))s 0 2867(\213)m 480(What)s
+1058(g)s 1(ap)k 1456(to)s 1695(insert)s 2285(between)s
+3139(the)s 3487(lines)s 3989(of)s 4260(paragraphs)s 5360(\(also)s
+5877(de\207ning)s 6715(the)s 220 fnt35 7063 2864(v)m 240 fnt82
+7232 2867(unit\);)m 0 2364(\213)m 480(Whether)s 1363(to)s 1602(permit)s
+2285(h)s 1(yphenation)k 3525(or)s 3784(not;)s 0 1861(\213)m
+480(What)s 1058(colour)s 1729(the)s 2077(object)s 2721(is)s
+2931(to)s 3170(appear)s 3867(in;)s 0 1358(\213)m 480(The)s
+908(language)s 1828(of)s 2099(the)s 2447(object;)s 0 855(\213)m
+480(Whether)s 220 fnt35 1363 852(@V)m 17(Adjust)k 240 fnt82
+2320 855(,)m 220 fnt35 2427 852(@HAdjust)m 240 fnt82 3473 855(and)m
+220 fnt35 3877 852(@P)m 26(Adjust)k 240 fnt82 4885 855(are)m
+5232(in)s 5475(ef)s 6(fect.)k 0 355(The)m 423(style)s
+925(of)s 1191(an)s 1468(object)s 2107(depends)s 2938(on)s
+3229(where)s 3864(it)s 4051(appears)s 4827(in)s 5064(the)s
+5407(\207nal)s 5882(document.)s 6984(F)s 3(or)k 7368(e)s 3(xample,)k
+8277(the)s 8619(style)s 0 67(of)m 286(a)s 467(parameter)s
+1497(depends)s 2348(on)s 2661(where)s 3316(it)s 3524(is)s
+3749(used;)s 4316(the)s 4679(style)s 5201(of)s 5488(a)s
+5669(g)s 1(alle)k 3(y)k 6319(is)s 6544(the)s
+6908(style)s 7430(of)s 7717(the)s 8080(\207rst)s 8527(tar)s 4(get)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(24)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(that)m 415(it)s 603(attempts)s
+1459(to)s 1695(attach)s 2318(itself)s 2862(to.)s 3208(Of)s
+3529(course,)s 4256(the)s 4600(style)s 5103(of)s 5371(an)s 3(y)k
+5764(object)s 6404(can)s 6789(be)s 7068(changed)s 7920(by)s
+8210(using)s 8778(the)s 220 fnt35 0 12914(@F)m 6(ont)k
+240 fnt82 652 12917(,)m 220 fnt35 759 12914(@Break)m 240 fnt82
+1555 12917(,)m 220 fnt35 1662 12914(@Space)m 240 fnt82 2499 12917(,)m
+220 fnt35 2606 12914(@SetColour)m 240 fnt82 3863 12917(or)m 220 fnt35
+4122 12914(@SetColor)m 240 fnt82 5197 12917(,)m 5304(and)s 220 fnt35
+5708 12914(@Language)m 240 fnt82 6959 12917(symbols.)m 480 12543(There)m 1112(are)s
+1479(no)s 1792(standard)s 2680(def)s 2(ault)k 3421(v)s 6(alues)k
+4097(for)s 4455(style,)s 5033(e)s 3(xcept)k 5734(that)s
+6172(small)s 6764(capitals)s 7564(are)s 7931(initially)s 8747(of)s 6(f,)k
+0 12255(the)m 369(interpretation)s 1734(of)s 2026(white)s 2635(space)s
+3243(is)s 3475(initially)s 220 fnt35 4292 12252(lout)m 240 fnt82
+4641 12255(,)m 4770(and)s 5195(the)s 5565(v)s 6(alues)k
+6242(of)s 6535(the)s 220 fnt35 6904 12252(y)m 240 fnt82
+7094 12255(and)m 220 fnt35 7519 12252(z)m 240 fnt82 7705 12255(units)m
+8242(are)s 8611(zero.)s 0 11967(Therefore)m 1000(one)s 1406(must)s
+1935(ensure)s 2619(that)s 3041(the)s 3392(root)s 3841(g)s 1(alle)k 3(y)k
+4479(or)s 4742(each)s 5241(of)s 5515(its)s 5795(components)s
+7007(is)s 7221(enclosed)s 8120(in)s 220 fnt35 8367 11964(@F)m 6(ont)k
+240 fnt82 9019 11967(,)m 220 fnt35 0 11676(@Break)m 240 fnt82
+796 11679(,)m 220 fnt35 906 11676(@SetColour)m 240 fnt82 2166 11679(or)m
+220 fnt35 2428 11676(@SetColor)m 240 fnt82 3503 11679(,)m 3613(and)s
+220 fnt35 4020 11676(@Language)m 240 fnt82 5274 11679(symbols.)m 6239(From)s
+6820(there)s 7356(the)s 7707(style)s 8217(is)s 8430(passed)s
+0 11391(to)m 240(incoming)s 1199(g)s 1(alle)k 3(ys)k
+1924(and)s 2330(the)s 2679(objects)s 3409(within)s 4078(them.)s
+4722(Enclosure)s 5735(in)s 220 fnt35 5980 11388(@Space)m 240 fnt82
+6878 11391(is)m 7090(not)s 7457(required)s 8313(because)s 0 11103(the)m
+220 fnt35 348 11100(s)m 240 fnt82 511 11103(unit)m 943(is)s
+1153(also)s 1591(set)s 1916(by)s 220 fnt35 2210 11100(@F)m 6(ont)k
+240 fnt82 2922 11103(\(Section)m 3775(3.5\).)s 536 10729(The)m 959(remainder)s
+1983(of)s 2249(this)s 2641(section)s 3370(e)s 3(xplains)k
+4210(ho)s 6(w)k 4667(the)s 5010(size)s 5433(of)s
+5699(each)s 6189(object)s 6829(\(its)s 7179(width)s 7777(and)s
+8176(height)s 8829(on)s 0 10441(the)m 353(printed)s 1094(page\))s
+1679(is)s 1895(determined.)s 3140(W)s 19(e)k 3514(will)s
+3946(treat)s 4434(width)s 5042(only)s 15(,)k 5566(since)s
+6118(height)s 6782(is)s 6997(determined)s 8136(in)s 8385(e)s 3(xactly)k
+0 10153(the)m 348(same)s 895(w)s 2(ay)k 15(,)k
+1384(e)s 3(xcept)k 2065(that)s 2483(the)s 2831(complications)s
+4223(introduced)s 5304(by)s 5598(paragraph)s 6611(breaking)s 7501(are)s
+7848(absent.)s 480 9779(W)m 9(ith)k 1006(three)s 1539(e)s 3(xceptions)k
+2611(\(see)s 3051(belo)s 6(w\),)k 3817(the)s 4165(width)s
+4768(of)s 5039(an)s 5323(object)s 5967(is)s 6178(as)s
+6428(lar)s 4(ge)k 6958(as)s 7208(it)s 7401(possibly)s
+8253(could)s 8844(be)s 0 9491(without)m 784(violating)s 1679(a)s
+220 fnt35 1837 9488(@Wide)m 240 fnt82 2603 9491(symbol)m 3355(or)s
+3606(intruding)s 4528(into)s 4945(the)s 5285(space)s 5864(occupied)s
+6778(by)s 7064(neighbouring)s 8386(g)s 1(aps)k 8867(or)s
+0 9203(objects.)m 841(As)s 1158(an)s 1441(aid)s 1791(to)s
+2030(in)s 9(v)k 3(estig)k 1(ating)k 3305(this)s
+3701(rule,)s 4179(we)s 4514(will)s 4940(use)s 5315(the)s
+5663(de\207nition)s 220 fnt35 480 8702(def @TightBo)m 6(x r)k -3(ight x)k
+480 8414({)m 480 8126( "0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto xsiz)k 3(e ysiz)k 3(e lineto 0 ysiz)k 3(e lineto closepath strok)k 4(e")k
+480 7838( @Gr)m 2(aphic x)k 480 7550(})m 240 fnt82 0 7055(which)m
+657(dra)s 3(ws)k 1291(a)s 1472(box)s 1903(around)s
+2641(the)s 3004(boundary)s 3978(of)s 4265(its)s 4556(right)s
+5082(parameter)s 6111(\(Section)s 6980(3.36\))s 7543(with)s 8040(no)s
+8349(mar)s 4(gin.)k 0 6767(The)m 428(result)s 1018(of)s
+220 fnt35 480 6316(5c @Wide @TightBo)m 6(x metempsychosis)k 240 fnt82 0 5817(is)m
+2835 215 0 106 240 288 60 480 5312 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 52(metempsychosis)m
+grestore
+0 4861(The)m 432(widest)s 1120(that)s 220 fnt35
+1542 4858(@TightBo)m 6(x metempsychosis)k 240 fnt82 4377 4861(could)m 4971(possibly)s
+5827(be)s 6113(is)s 6327(\207v)s 3(e)k 6743(centimetres,)s
+7954(and)s 8363(accord)s 8998(-)s 0 4573(ingly)m 552(that)s
+977(is)s 1194(its)s 1477(width.)s 2193(The)s 2628(same)s
+3182(applies)s 3917(to)s 220 fnt35 4163 4570(metempsychosis)m 240 fnt82
+5791 4573(,)m 5905(which)s 6554(is)s 6771(\207v)s 3(e)k
+7190(centimetres)s 8348(wide)s 8876(as)s 0 4285(well.)m 583(Note)s
+1113(carefully)s 2024(that)s 2451(there)s 2992(is)s 3211(no)s
+3513(object)s 4166(in)s 4418(this)s 4822(e)s 3(xample)k
+5694(whose)s 6371(width)s 6982(is)s 7200(equal)s 7782(to)s
+8030(the)s 8387(sum)s 8855(of)s 0 3997(the)m 348(widths)s
+1037(of)s 1308(the)s 1656(letters)s 2289(of)s 220 fnt35
+2560 3994(metempsychosis)m 240 fnt82 4188 3997(.)m 480 3623(The)m 903(\207rst)s
+1329(of)s 1595(the)s 1938(three)s 2466(e)s 3(xceptions)k
+3532(to)s 3766(the)s 4109(`as)s 4433(wide)s 4949(as)s
+5194(possible')s 6085(rule)s 6507(is)s 6712(the)s 220 fnt35
+7055 3620(@HContr)m 2(act)k 240 fnt82 8314 3623(symbol,)m 0 3335(which)m
+644(causes)s 1322(the)s 1672(width)s 2277(of)s 2551(its)s
+2829(right)s 3343(parameter)s 4360(to)s 4601(be)s 4886(reduced)s
+5703(to)s 5945(a)s 6114(reasonable)s 7194(minimum)s 8187(\(a)s
+8435(formal)s 0 3047(de\207nition)m 974(will)s 1400(not)s 1766(be)s
+2048(attempted\):)s 220 fnt35 480 2546(5c @Wide @HContr)m 2(act @TightBo)k 6(x metempsychosis)k
+240 fnt82 0 2047(produces)m 1572 215 0 106 240 288 60 480 1492 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 52(metempsychosis)m
+grestore
+0 1041(The)m 482(object)s
+220 fnt35 1180 1038(@HContr)m 2(act @TightBo)k 6(x metempsychosis)k 240 fnt82
+5334 1041(is)m 5598(still)s 6064(\207v)s 3(e)k 6530(centimetres)s
+7735(wide,)s 8361(b)s 4(ut)k 8778(the)s 0 753(object)m
+220 fnt35 644 750(@TightBo)m 6(x metempsychosis)k 240 fnt82 3475 753(has)m
+3845(been)s 4354(reduced.)s 480 379(The)m 922(second)s 1659(of)s
+1945(the)s 2307(three)s 2855(e)s 3(xceptions)k 3940(is)s
+4165(the)s 4527(horizontal)s 5565(concatenation)s 6965(symbol)s 220 fnt35
+7739 376(|)m 240 fnt82 7851 379(\(and)m 8348(also)s 220 fnt35
+8801 376(&)m 240 fnt82 8943 379(\).)m 0 91(Consider)m 924(this)s
+1320(e)s 3(xample:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.6.)m 454(The)s 866(style)s 1356(and)s
+1782(size)s 2193(of)s 2474(objects)s 240 fnt84 8833 13840(25)m
+220 fnt35 480 13207(5c @Wide @TightBo)m 6(x { A |1c B |1c C })k 240 fnt82 0 12708(As)m
+317(usual,)s 929(the)s 1277(right)s 1788(parameter)s 2802(of)s
+220 fnt35 3073 12705(@Wide)m 240 fnt82 3847 12708(is)m 4057(\207v)s 3(e)k
+4469(centimetres)s 5620(wide,)s 6192(and)s 6596(the)s 6944(result)s
+7534(looks)s 8104(lik)s 2(e)k 8516(this:)s 2835 165 0 57 240 288 60 480 12203 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(A)m
+737(B)s 1447(C)s
+grestore
+0 11752(Lout)m 512(has)s 882(to)s
+1121(apportion)s 2095(the)s 2443(size)s 2870(minus)s 3506(inter)s 4(-column)k
+4793(g)s 1(aps)k 5282(among)s 5987(the)s 6335(three)s
+6868(columns.)s 480 11378(If)m 707(the)s 1052(columns)s 1911(are)s
+2255(wide)s 2772(enough)s 3532(to)s 3768(require)s 4497(paragraph)s
+5507(breaking,)s 6447(Lout)s 6956(will)s 7379(assign)s 8031(sizes)s
+8543(to)s 8778(the)s 0 11090(columns)m 864(in)s 1110(such)s
+1609(a)s 1778(w)s 2(ay)k 2232(as)s 2484(to)s
+2726(lea)s 4(v)k 3(e)k 3282(narro)s 6(w)k
+4010(columns)s 4875(unbrok)s 2(en)k 5837(and)s 6244(break)s
+6839(wider)s 7446(columns)s 8311(to)s 8553(equal)s 0 10802(width,)m
+652(occup)s 2(ying)k 1702(the)s 2051(full)s 2438(size.)s
+2974(Otherwise,)s 4064(paragraph)s 5077(breaking)s 5968(is)s 6179(not)s
+6546(required,)s 7450(and)s 7855(each)s 8351(column)s 0 10514(will)m
+431(be)s 719(assigned)s 1607(a)s 1779(reasonable)s 2863(minimum)s
+3858(size)s 4291(in)s 4540(the)s 4894(manner)s 5677(of)s
+220 fnt35 5953 10511(@HContr)m 2(act)k 240 fnt82 7157 10514(,)m
+7270(e)s 3(xcept)k 7957(that)s 8381(the)s 8735(last)s
+0 10226(column)m 775(recei)s 6(v)k 3(es)k 1599(all)s
+1892(the)s 2240(lefto)s 3(v)k 3(er)k 3036(width.)s
+3745(F)s 3(or)k 4134(e)s 3(xample,)k 220 fnt35
+480 9725(5c @Wide { @TightBo)m 6(x A |1c @TightBo)k 6(x B |1c @TightBo)k 6(x C })k 240 fnt82
+0 9226(has)m 370(result)s 170 165 0 57 240 288 60 480 8771 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(A)m
+grestore
+143 165 0 57 240 288 60 1217 8771 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(B)m
+grestore
+1388 165 0 57 240 288 60 1927 8771 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(C)m
+
+grestore
+0 8320(If)m 237(it)s 436(is)s 653(desired)s 1408(that)s
+1833(the)s 2188(lefto)s 3(v)k 3(er)k 2991(width)s
+3600(remain)s 4327(unused,)s 5120(rather)s 5743(than)s 6219(going)s
+6825(into)s 7257(the)s 7612(last)s 8010(column,)s 8843(an)s
+0 8032(empty)m 654(column)s 1431(can)s 1822(be)s 2106(appended,)s
+3133(or)s 3394(the)s 3744(last)s 4137(column)s 4914(can)s
+5305(be)s 5589(enclosed)s 6486(in)s 220 fnt35 6731 8029(@HContr)m 2(act)k
+240 fnt82 7935 8032(.)m 8101(T)s 19(w)k 2(o)k
+8575(other)s 0 7744(w)m 2(ays)k 560(to)s 819(apportion)s
+1813(the)s 2181(lefto)s 3(v)k 3(er)k 2997(width)s
+3619(are)s 3986(pro)s 3(vided)k 4912(by)s 5226(the)s
+220 fnt35 5594 7741(@HExpand)m 240 fnt82 6787 7744(and)m 220 fnt35
+7211 7741(@HAdjust)m 240 fnt82 8277 7744(symbols)m 0 7456(\(Sections)m 940(3.12)s
+1414(and)s 1818(3.15\).)s 480 7082(The)m 914(third)s 1430(and)s
+1841(\207nal)s 2328(e)s 3(xception)k 3319(to)s 3565(the)s
+3920(`as)s 4255(wide)s 4783(as)s 5040(possible')s 5943(rule)s
+6377(concerns)s 7285(the)s 7640(components)s 8855(of)s 0 6794(the)m
+348(root)s 793(g)s 1(alle)k 3(y)k 15(.)k
+1522(Each)s 2057(is)s 2267(considered)s 3361(to)s 3600(be)s
+3882(enclosed)s 4777(in)s 220 fnt35 5020 6791(@HContr)m 2(act)k
+240 fnt82 6284 6794(and)m 220 fnt35 6688 6791(@VContr)m 2(act)k
+240 fnt82 7940 6794(symbols.)m 480 6420(Up)m 836(to)s 1086(this)s
+1493(point)s 2056(we)s 2401(ha)s 4(v)k 3(e)k
+2913(treated)s 3631(width)s 4244(as)s 4505(a)s 4681(single)s
+5319(quantity)s 15(,)k 6206(b)s 4(ut)k 6579(of)s
+6860(course)s 7551(it)s 7754(has)s 8135(tw)s 2(o)k
+8556(parts:)s 0 6132(width)m 602(to)s 841(left)s 1218(and)s
+1622(right)s 2133(of)s 2404(the)s 2752(mark.)s 3407(The)s
+3835(`as)s 4164(wide)s 4685(as)s 4935(possible')s 5831(rule)s
+6258(applies)s 6986(to)s 7225(both)s 7708(directions:)s 220 fnt35
+480 5631(@HContr)m 2(act { @TightBo)k 6(x 953^.05 /0.5c @TightBo)k 6(x 2^.8286 })k 240 fnt82
+0 5132(has)m 370(result)s 877 170 344 59 240 288 60 480 4672 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 5(953)m 344(.05)s
+grestore
+877 167 344 57 240 288 60 480 4222 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+230 3(2)m
+344(.8286)s
+grestore
+0 3771(Lefto)m 3(v)k 3(er)k 868(width)s
+1461(usually)s 2197(goes)s 2678(to)s 2908(the)s 3247(right,)s
+3796(as)s 4037(we)s 4364(ha)s 4(v)k 3(e)k
+4856(seen,)s 5379(b)s 4(ut)k 5732(here)s 6190(some)s
+6742(width)s 7335(w)s 2(as)k 7747(a)s 4(v)k 6(ailable)k
+8646(only)s 0 3483(to)m 239(the)s 587(left)s 964(of)s
+220 fnt35 1235 3480(2.8286)m 240 fnt82 1958 3483(o)m 6(wing)k
+2604(to)s 2843(the)s 3191(column)s 3966(mark)s 4518(alignment.)s
+240 fnt84 0 2690(2.7.)m 471(Galleys)s 1282(and)s 1723(tar)s 2(gets)k
+240 fnt82 480 2213(The)m 909(beha)s 4(viour)k 1924(of)s
+2197(g)s 1(alle)k 3(ys)k 2923(and)s 3328(their)s
+3827(tar)s 4(gets,)k 4568(as)s 4820(described)s 5796(in)s
+6040(Section)s 6816(1.4,)s 7225(can)s 7616(be)s 7900(summarized)s
+0 1925(in)m 243(three)s 776(la)s 3(ws:)k 240 fnt83
+0 1473(F)m 10(ir)k 2(st)k 540(Law)s 240 fnt82
+949 1471(:)m 1139(The)s 1592(\207rst)s 2047(tar)s 4(get)k
+2671(is)s 2905(the)s 3278(closest)s 4012(in)s 9(v)k 4(ocation)k
+5091(of)s 5386(the)s 5759(tar)s 4(get)k 6382(symbol,)s
+7219(either)s 7846(preceding)s 8867(or)s 0 1183(follo)m 6(wing)k
+972(the)s 1315(in)s 9(v)k 4(ocation)k 2363(point)s
+2910(of)s 3175(the)s 3518(g)s 1(alle)k 3(y)k
+4146(as)s 4391(required,)s 5288(which)s 5925(has)s 6289(suf\207cient)s
+7233(space)s 7814(to)s 8048(recei)s 6(v)k 3(e)k
+8778(the)s 0 895(\207rst)m 431(component;)s 240 fnt83 0 392(Second)m
+773(Law)s 240 fnt82 1182 390(:)m 1364(Each)s 1915(subsequent)s
+3055(tar)s 4(get)k 3670(is)s 3896(the)s 4259(closest)s
+4985(in)s 9(v)k 4(ocation)k 6055(of)s 6342(the)s
+6706(tar)s 4(get)k 7321(symbol,)s 8149(follo)s 6(wing)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(26)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(the)m 337(pre)s 6(vious)k
+1195(tar)s 4(get)k 1783(and)s 2176(lying)s 2710(within)s
+3367(the)s 3704(same)s 4240(g)s 1(alle)k 3(y)k 15(,)k
+4901(which)s 5532(has)s 5891(suf\207cient)s 6829(space)s 7405(to)s
+7633(recei)s 6(v)k 3(e)k 8358(the)s 8695(\207rst)s
+0 12917(remaining)m 1022(component;)s 240 fnt83 0 12414(Thir)m 8(d)k
+607(Law)s 240 fnt82 1016 12412(:)m 1199(A)s 1446(recepti)s 6(v)k 3(e)k
+2385(symbol)s 3162(that)s 3597(does)s 4104(not)s 4487(recei)s 6(v)k 3(e)k
+5240(at)s 5489(least)s 6003(one)s 6422(component)s 7563(of)s
+7851(an)s 3(y)k 8265(g)s 1(alle)k 3(y)k
+8916(is)s 0 12124(replaced)m 867(by)s 220 fnt35 1161 12121(@Null)m
+240 fnt82 1746 12124(.)m 0 11621(The)m 436(terms)s 1025(`closest,)s 16(')k
+1918(`preceding,)s 16(')k 3104(and)s 3516(`follo)s 6(wing')k
+4639(refer)s 5156(to)s 5403(position)s 6239(in)s 6490(the)s
+6846(\207nal)s 7334(printed)s 8078(document.)s 0 11333(This)m 476(section)s
+1210(e)s 3(xplains)k 2055(the)s 2403(operation)s 3363(of)s
+3634(these)s 4181(la)s 3(ws)k 4667(in)s 4910(Basser)s
+5607(Lout.)s 480 10959(When)m 1100(a)s 1257(g)s 1(alle)k 3(y)k
+1881(cannot)s 2570(be)s 2843(\207tted)s 3382(into)s 3798(just)s
+4194(one)s 4586(tar)s 4(get,)k 5223(Lout)s 5726(must)s
+6241(\207nd)s 6663(points)s 7290(in)s 7523(the)s 7862(g)s 1(alle)k 3(y)k
+8486(where)s 0 10671(it)m 191(can)s 579(be)s 860(split)s
+1330(in)s 1572(tw)s 2(o.)k 2091(The)s 2518(object)s
+3161(lying)s 3705(between)s 4558(tw)s 2(o)k 4966(neighbouring)s
+6295(potential)s 7185(split)s 7655(points)s 8290(is)s 8498(called)s
+0 10383(a)m 240 fnt83 166 10385(component)m 240 fnt82 1281 10383(of)m
+1552(the)s 1900(g)s 1(alle)k 3(y)k 15(.)k
+2629(By)s 2963(de\207nition,)s 3987(a)s 4153(component)s 5277(cannot)s
+5975(be)s 6257(split.)s 480 10009(T)m 19(o)k 813(determine)s
+1857(the)s 2239(components)s 3480(of)s 3785(a)s 3984(g)s 1(alle)k 3(y)k 15(,)k
+4690(e)s 3(xpand)k 5470(all)s 5797(symbols)s 6679(other)s
+7264(than)s 7766(recursi)s 6(v)k 3(e)k 8722(and)s
+0 9721(recepti)m 6(v)k 3(e)k 909(ones,)s 1442(discard)s
+2177(all)s 220 fnt35 2457 9718(@F)m 6(ont)k 240 fnt82
+3109 9721(,)m 220 fnt35 3203 9718(@Break)m 240 fnt82 3999 9721(,)m
+220 fnt35 4093 9718(@Space)m 240 fnt82 4930 9721(,)m 220 fnt35
+5024 9718(@SetColor)m 240 fnt82 6099 9721(,)m 220 fnt35 6193 9718(@SetColour)m
+240 fnt82 7390 9721(,)m 7484(and)s 220 fnt35 7875 9718(@Language)m
+240 fnt82 0 9433(symbols,)m 908(perform)s 1740(paragraph)s 2756(breaking)s
+3649(as)s 3902(required,)s 4809(and)s 5216(discard)s 5967(all)s
+6263(redundant)s 7283(braces.)s 8060(Then)s 8613(vie)s 6(w)k
+0 9145(the)m 367(g)s 1(alle)k 3(y)k 1020(as)s
+1290(a)s 1475(sequence)s 2428(of)s 2718(one)s 3140(or)s
+3418(more)s 3984(objects)s 4732(separated)s 5711(by)s 6025(v)s 3(ertical)k
+6811(concatenation)s 8216(symbols;)s 0 8857(these)m 567(are)s 935(the)s
+1304(components)s 2533(and)s 2958(split)s 3450(points,)s 4163(e)s 3(xcept)k
+4865(that)s 5304(concatenation)s 6710(symbols)s 7580(whose)s 8269(g)s 1(aps)k
+8779(are)s 0 8569(unbreakable)m 1225(\(Section)s 2078(3.2\))s 2506(are)s
+2853(not)s 3219(eligible)s 3991(to)s 4230(be)s 4512(split)s
+4983(points.)s 5732(F)s 3(or)k 6121(e)s 3(xample,)k
+7035(gi)s 6(v)k 3(en)k 7615(the)s 7963(de\207nition)s
+220 fnt35 480 8068(def @Section into { @SectionPlace&&preceding })m 480 7780( named @Title {})m 480 7492( r)m -3(ight @Body)k
+480 7204({)m 480 6916( 15p @F)m 6(ont { @Title //0.7f })k 480 6628( //)m 480 6340( @Body)m
+480 6052(})m 240 fnt82 0 5558(the)m 348(g)s 1(alle)k 3(y)k
+220 fnt35 480 5057(@Section)m 480 4769( @Title { Introduction })m 480 4481({ )m 11(This is a subject that really)k
+480 4193(needs no introduction.)m 13( })k 240 fnt82 0 3699(becomes)m 220 fnt35
+480 3252(Introduction)m 480 2964(//0.7f)m 480 2676({})m 480 2388(//)m 480 2100(This is a subject that really needs)m
+480 1812(//1vx)m 480 1524(no introduction.)m 240 fnt82 0 1070(with)m 482(four)s
+939(components.)s 2260(If)s 220 fnt35 2489 1067(@Body)m 240 fnt82
+3269 1070(had)m 3673(been)s 4181(preceded)s 5102(by)s 220 fnt35
+5395 1067(|1.0c)m 240 fnt82 5921 1070(in)m 6164(the)s 6511(de\207nition,)s
+7535(the)s 7882(result)s 8471(w)s 2(ould)k 0 782(ha)m 4(v)k 3(e)k
+501(been)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8831 13840(27)m
+220 fnt35 480 13211(Introduction)m 480 12923(//0.7f)m 480 12635({})m 480 12347(//)m
+480 12059(|1.0c { )m 11(This is a subject that really needs //1vx no introduction.)k 13( })k 240 fnt82 0 11561(with)m
+220 fnt35 524 11558(//1vx)m 240 fnt82 1089 11561(b)m 4(uried)k
+1796(within)s 2507(one)s 2951(component)s 4118(and)s 4564(hence)s
+5221(not)s 5629(a)s 5838(potential)s 6771(split)s 7285(point.)s
+7983(If)s 220 fnt35 8256 11558(0.7f)m 240 fnt82 8722 11561(had)m
+0 11273(been)m 220 fnt35 525 11270(0.7fu)m 240 fnt82 999 11273(,)m
+1123(the)s 1488(g)s 1(ap)k 1903(w)s 2(ould)k
+2575(ha)s 4(v)k 3(e)k 3092(been)s 3618(unbreakable)s
+4860(and)s 220 fnt35 5281 11270(//0.7fu)m 240 fnt82 5954 11273(w)m 2(ould)k
+6625(not)s 7008(ha)s 4(v)k 3(e)k 7526(been)s
+8052(a)s 8235(potential)s 0 10985(split)m 471(point.)s 480 10611(V)m 26(ersion)k
+1310(3.03)s 1816(has)s 2228(liberalized)s 3335(this)s 3773(some)s 6(what)k
+4840(in)s 5125(the)s 5515(follo)s 6(wing)k 6534(w)s 2(ay)k 15(.)k
+7122(When)s 7793(a)s 8002(component)s 0 10323(consists)m 808(of)s
+1080(a)s 1247(horizontal)s 2271(sequence)s 3205(of)s 3477(tw)s 2(o)k
+3887(or)s 4147(more)s 4695(objects)s 240 fnt83 5423 10325(A)m
+168 fnt78 5558 10232(1)m 240 fnt78 5637 10317(,)m 5746(\274)s
+6046(,)s 240 fnt83 6155 10325(A)m 168 fnt83 6290 10238(n)m
+240 fnt82 6431 10323(separated)m 7391(by)s 220 fnt35 7686 10320(|)m
+240 fnt82 7784 10323(\(not)m 220 fnt35 8229 10320(||)m 240 fnt82
+8323 10323(,)m 8431(not)s 220 fnt35 8798 10320(&)m 240 fnt82
+8940 10323(\),)m 0 10035(Lout)m 506(will)s 926(in)s 9(v)k 3(estig)k 1(ate)k
+1998(the)s 2339(component)s 3457(to)s 3690(see)s 4044(whether)s
+4868(it)s 5054(can)s 5436(be)s 5712(brok)s 2(en)k
+6426(up.)s 6823(It)s 7022(looks)s 7586(at)s 7811(each)s
+240 fnt83 8300 10037(A)m 168 fnt83 8435 9950(i)m 240 fnt82
+8533 10035(to)m 8765(see)s 0 9747(whether)m 830(it)s 1023(is)s
+1234(a)s 1401(v)s 3(ertical)k 2169(concatenation)s 3555(of)s
+3827(objects)s 240 fnt83 4556 9749(A)m 168 fnt83 4691 9662(i)m
+168 fnt78 4743 9656(1)m 240 fnt78 4822 9741(,)m 4932(\274)s
+5232(,)s 240 fnt83 5342 9749(A)m 168 fnt83 5477 9662(im)m
+240 fnt82 5641 9747(;)m 5754(if)s 5972(tw)s 2(o)k
+6383(or)s 6643(more)s 7191(of)s 7463(the)s 240 fnt83
+7812 9749(A)m 168 fnt83 7947 9662(i)m 240 fnt82 8052 9747(satisfy)m
+8730(this)s 0 9459(condition,)m 1009(the)s 1354(component)s 2475(will)s
+2898(not)s 3262(be)s 3541(brok)s 2(en)k 4258(up.)s
+4659(So)s 4962(no)s 6(w)k 5421(suppose)s 6246(we)s
+6578(ha)s 4(v)k 3(e)k 7076(just)s 7479(one)s
+240 fnt83 7878 9461(A)m 168 fnt83 8013 9374(i)m 240 fnt82
+8114 9459(which)m 8753(is)s 8960(a)s 0 9171(v)m 3(ertical)k
+757(concatenation.)s 2239(Lout)s 2741(will)s 3156(break)s 3738(the)s
+4076(component)s 5189(into)s 5604(one)s 5996(component)s 7109(for)s
+7437(each)s 7922(of)s 8182(the)s 240 fnt83 8520 9173(A)m
+168 fnt83 8655 9086(i)m 168 fnt78 8707 9080(1)m 240 fnt78
+8775 9165(,)m 8851(\274)s 3 8877(,)m 240 fnt83 80 8885(A)m
+168 fnt83 215 8798(im)m 240 fnt82 379 8883(,)m 476(pro)s 3(vided)k
+1373(that)s 1781(the)s 3(y)k 2234(are)s 2571(separated)s
+3521(by)s 220 fnt35 3806 8880(//)m 240 fnt82 3981 8883(symbols)m
+4820(\(not)s 220 fnt35 5255 8880(/)m 240 fnt82 5319 8883(\),)m
+5495(and)s 5890(pro)s 3(vided)k 6786(this)s 7172(can)s
+7551(be)s 7823(done)s 8335(without)s 0 8595(introducing)m 1155(an)s 3(y)k
+1550(apparent)s 2431(change)s 3164(into)s 3587(the)s 3933(appearance)s
+5062(of)s 5332(the)s 5678(component)s 6800(\(this)s 7274(second)s
+7995(rule)s 8420(will)s 8844(be)s 0 8307(satis\207ed)m 847(if)s
+1071(the)s 1426(other)s 240 fnt83 1984 8309(A)m 168 fnt83
+2119 8222(j)m 240 fnt82 2232 8307(are)m 2586(not)s 2959(v)s 3(ery)k
+3442(lar)s 4(ge\).)k 4165(The)s 4600(e)s 3(xample)k
+5470(abo)s 3(v)k 3(e)k 6099(satis\207es)s 6913(all)s
+7213(these)s 7767(rules)s 8289(and)s 8700(will)s 0 7996(be)m
+282(brok)s 2(en)k 1002(up)s 1295(into)s 1720(tw)s 2(o)k
+2130(components,)s 3394(so)s 3660(the)s 220 fnt35 4008 7993(//1vx)m
+240 fnt82 4530 7996(becomes)m 5418(a)s 5584(potential)s 6475(split)s
+6946(point)s 7498(after)s 7994(all.)s 480 7622(The)m 913(lines)s
+1421(of)s 1697(a)s 1869(paragraph)s 2887(become)s 3693(separate)s
+4536(components)s 5750(if)s 5972(the)s 6326(paragraph)s 7344(occupies)s
+8238(an)s 8527(entire)s 0 7334(component)m 1151(before)s 1844(breaking;)s
+2820(otherwise)s 3833(the)s 3(y)k 4323(are)s 4697(enclosed)s
+5619(in)s 5890(a)s 220 fnt35 6083 7331(@OneRo)m 3(w)k
+240 fnt82 7241 7334(symbol)m 8028(within)s 8724(one)s 0 7046(component.)m
+1237(The)s 1675(same)s 2232(is)s 2452(true)s 2888(of)s
+3169(incoming)s 4136(components)s 5354(of)s 5635(other)s 6195(g)s 1(alle)k 3(ys.)k
+7042(If)s 7282(a)s 220 fnt35 7458 7043(@Galle)m 4(y)k
+240 fnt82 8366 7046(symbol)m 0 6758(occupies)m 892(an)s 1180(entire)s
+1783(component)s 2912(by)s 3211(the)s 3563(rules)s 4083(abo)s 3(v)k 3(e,)k
+4761(then)s 5234(the)s 5587(incoming)s 6549(components)s 7761(that)s
+8184(replace)s 8934(it)s 0 6470(become)m 800(components)s 2008(of)s
+2279(their)s 2776(ne)s 6(w)k 3223(home:)s 220 fnt35
+480 5916(An e)m 6(xample)k 480 5628(//0.5c)m 480 5340(@Galle)m 4(y)k
+480 5052(//0.5c)m 480 4764(@SomethingList)m 240 fnt78 2500 5625(\336)m 220 fnt35
+3141 5916(An e)m 6(xample)k 3141 5628(//0.5c)m 3141 5340(Incoming components)m 3141 5052(//0.2c)m
+3141 4764(from some other galle)m 4(y)k 3141 4476(//0.5c)m 3141 4188(@SomethingList)m 240 fnt82
+0 3632(Otherwise)m 1062(the)s 1435(incoming)s 2416(components)s 3649(are)s
+4020(grouped)s 4888(within)s 5580(a)s 220 fnt35 5771 3629(@OneRo)m 3(w)k
+240 fnt82 6926 3632(symbol)m 7711(and)s 8139(lie)s 8458(within)s
+0 3344(one)m 402(component.)s 480 2970(This)m 985(distinction)s 2080(has)s
+2480(a)s 2675(mark)s 2(ed)k 3477(ef)s 6(fect)k
+4103(on)s 4429(the)s 4806(v)s 3(ertical)k 5603(concatenation)s
+7017(symbol)s 220 fnt35 7806 2967(//1.1b)m 240 fnt82 8347 2970(,)m
+8484(which)s 0 2682(calls)m 509(for)s 868(more)s 1436(space)s
+2045(than)s 2535(is)s 2766(a)s 4(v)k 6(ailable)k
+3695(\(Section)s 4570(3.2\).)s 5134(There)s 5768(is)s 5999(no)s
+6314(room)s 6900(for)s 7259(this)s 7676(symbol)s 8458(within)s
+0 2394(an)m 3(y)k 402(component,)s 1579(so)s 1851(it)s
+2049(will)s 2481(force)s 3033(a)s 3205(split)s 3682(and)s
+4092(be)s 4379(discarded)s 5359(in)s 5608(that)s 6032(case.)s
+6613(But)s 7025(it)s 7223(can)s 7618(be)s 7906(promoted)s
+8887(to)s 0 2106(between)m 854(tw)s 2(o)k 1264(components.)s
+480 1732(Components)m 1749(may)s 2223(be)s 2513(separated)s 3481(by)s
+220 fnt35 3783 1729(/)m 240 fnt82 3914 1732(as)m 4172(well)s
+4646(as)s 4904(by)s 220 fnt35 5206 1729(//)m 240 fnt82
+5331 1732(,)m 5445(gi)s 6(ving)k 6112(rise)s 6520(to)s
+6767(column)s 7550(mark)s 8110(alignment)s 0 1444(between)m 854(adjacent)s
+1710(components:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(28)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s gsave
+480 12008 translate
+240 fnt82 1701 1360 567 1360 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 1360 567 1360 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+1134 340 567 340 240 288 60 0 1020 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+1134 340 0 340 240 288 60 567 510 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+736 340 283 340 240 288 60 284 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 11557(When)m 688(aligned)s 1509(components)s
+2777(are)s 3183(promoted)s 4218(into)s 4702(dif)s 6(ferent)k
+5637(tar)s 4(gets,)k 6435(the)s 6843(meaning)s 7779(of)s
+8110(alignment)s 0 11269(becomes)m 882(v)s 3(ery)k 1351(doubtful.)s
+2319(F)s 3(or)k 2702(e)s 3(xample,)k 3609(what)s
+4127(if)s 4338(the)s 4679(tar)s 4(gets)k 5355(are)s
+5696(in)s 5932(dif)s 6(ferent)k 6800(columns)s 7656(of)s
+7920(one)s 8315(page,)s 8867(or)s 0 10981(what)m 525(if)s
+742(one)s 1144(lies)s 1526(within)s 220 fnt35 2194 10978(90d @Rotate)m
+240 fnt82 3482 10981(?)m 480 10607(The)m 908(truth)s 1416(is)s
+1626(that)s 220 fnt35 2044 10604(/)m 240 fnt82 2168 10607(causes)m
+2843(all)s 3136(the)s 3484(objects)s 4212(that)s 4630(share)s
+5190(a)s 5356(mark)s 5908(to)s 6147(ha)s 4(v)k 3(e)k
+6648(equal)s 7221(width:)s 1701 1360 567 1360 240 288 60 480 8907 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 1360 567 1360 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+1701 340 567 340 240 288 60 0 1020 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+1134 340 567 340 240 288 60 0 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+1701 340 567 340 240 288 60 0 510 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+1134 340 0 340 240 288 60 567 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+1701 340 567 340 240 288 60 0 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+736 340 283 340 240 288 60 284 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+0 8455(This)m 495(is)s 724(a)s
+909(consequence)s 2207(of)s 2497(the)s 2864(`as)s 3212(wide)s
+3753(as)s 4022(possible')s 4937(rule)s 5383(\(Section)s 6255(2.6\).)s
+6817(Mark)s 7415(alignment)s 8451(occurs)s 240 fnt83 0 8169(incidentally)m
+240 fnt82 1124 8167(,)m 1231(whene)s 6(v)k 3(er)k
+2212(the)s 2560(fragments)s 3566(are)s 3913(placed)s 4595(into)s
+5020(similar)s 5742(conte)s 3(xts.)k 480 7793(In)m 723(this)s
+1106(connection)s 2200(we)s 2521(must)s 3033(also)s 3458(consider)s
+4315(the)s 4649(special)s 5354(case)s 5808(of)s 6066(a)s
+220 fnt35 6218 7790(@Galle)m 4(y)k 240 fnt82 7103 7793(symbol)m
+7850(which)s 8478(shares)s 0 7505(its)m 276(column)s 1051(mark)s
+1603(with)s 2085(some)s 2646(other)s 3197(object:)s 220 fnt35
+480 7004(@Galle)m 4(y)k 480 6716(/0.2c)m 480 6428(@SomethingList)m 240 fnt82
+0 5929(\(The)m 220 fnt35 501 5926(@Galle)m 4(y)k 240 fnt82
+1392 5929(may)m 1851(or)s 2104(may)s 2563(not)s 2922(occup)s 2(y)k
+3660(an)s 3936(entire)s 4528(component;)s 5698(that)s 6109(doesn')s 4(t)k
+6862(matter)s 7525(here.\))s 8177(If)s 8400(incom)s 8998(-)s
+0 5641(ing)m 355(components)s 1559(are)s 1901(separated)s 2857(by)s
+220 fnt35 3147 5638(//)m 240 fnt82 3327 5641(rather)m 3939(than)s
+4404(by)s 220 fnt35 4693 5638(/)m 240 fnt82 4757 5641(,)m
+4860(the)s 5204(meaning)s 6076(is)s 6282(so)s 6544(doubtful)s
+7405(that)s 7819(this)s 8211(is)s 8416(forbid)s 8998(-)s
+0 5353(den.)m 496(In)s 738(f)s 2(act,)k 1186(a)s
+1337(g)s 1(alle)k 3(y)k 1957(whose)s 2611(components)s
+3804(replace)s 4535(such)s 5017(a)s 220 fnt35 5168 5350(@Galle)m 4(y)k
+240 fnt82 6052 5353(must)m 6563(ha)s 4(v)k 3(e)k
+7049(a)s 7201(single)s 7814(column)s 8574(mark)s 0 5065(running)m
+783(its)s 1043(full)s 1413(length;)s 2108(that)s 2510(is,)s
+2760(its)s 3021(components)s 4213(must)s 4722(all)s 4999(share)s
+5544(a)s 5694(single)s 6305(column)s 7065(mark.)s 7704(This)s
+8164(mark)s 8700(will)s 0 4777(be)m 281(mer)s 4(ged)k
+1050(with)s 1530(the)s 1876(column)s 2649(mark)s 3199(passing)s
+3969(through)s 4769(each)s 220 fnt35 5262 4774(@Galle)m 4(y)k
+240 fnt82 6158 4777(that)m 6574(these)s 7119(components)s 8325(replace;)s
+0 4489(all)m 293(the)s 641(objects)s 1369(on)s 1666(the)s
+2014(resulting)s 2903(mer)s 4(ged)k 3674(mark)s 4226(will)s
+4652(ha)s 4(v)k 3(e)k 5153(equal)s 5726(width.)s
+480 4115(The)m 906(root)s 1348(g)s 1(alle)k 3(y)k 15(,)k
+2018(where)s 2655(e)s 6(v)k 3(erything)k 3720(collects)s
+4497(immediately)s 5742(prior)s 6264(to)s 6500(output,)s 7217(is)s
+7424(created)s 8168(automati)s 8998(-)s 0 3827(cally)m 15(,)k
+556(not)s 921(by)s 1214(a)s 1379(de\207nition.)s 2459(Its)s
+2747(tar)s 4(get)k 3346(is)s 3555(the)s 3902(output)s
+4573(\207le,)s 4984(and)s 5387(its)s 5663(object)s 6306(is)s
+6515(the)s 6862(entire)s 7460(input,)s 8058(which)s 8699(typ)s
+8998(-)s 0 3539(ically)m 584(looks)s 1154(lik)s 2(e)k
+1566(this:)s 220 fnt35 480 3038(@P)m 8(ageList)k 480 2750(//)m
+480 2462(@T)m 26(e)k 6(xt {)k 480 2174( Body te)m 6(xt of the document ...)k
+480 1886(})m 240 fnt82 0 1392(where)m 220 fnt35 639 1389(@P)m 8(ageList)k
+240 fnt82 1761 1392(e)m 3(xpands)k 2592(to)s 2830(a)s
+2994(sequence)s 3925(of)s 4195(pages)s 4789(containing)s 220 fnt35
+5850 1389(@T)m 26(e)k 6(xtPlace)k 240 fnt82 7067 1392(symbols)m
+7914(\(see)s 8352(Section)s 0 1104(1.2\),)m 486(and)s 220 fnt35
+890 1101(@T)m 26(e)k 6(xt)k 240 fnt82 1564 1104(is)m
+1774(a)s 1940(g)s 1(alle)k 3(y:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8832 13840(29)m
+220 fnt35 480 13207(def @T)m 26(e)k 6(xtPlace { @Galle)k 4(y })k
+480 12631(def @T)m 26(e)k 6(xt into { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 12343( r)m -3(ight x)k 480 12055({)m 480 11767( x)m 480 11479(})m
+240 fnt82 0 10985(The)m 428(spot)s 886(v)s 6(acated)k
+1668(by)s 1961(a)s 2127(g)s 1(alle)k 3(y)k
+2760(\211)s 2940(its)s 3215(in)s 9(v)k 4(ocation)k
+4268(point)s 4820(\211)s 4999(becomes)s 5887(a)s 220 fnt35
+6052 10982(@Null)m 240 fnt82 6697 10985(object,)m 7387(so)s 7653(this)s
+8048(root)s 8492(g)s 1(alle)k 3(y)k 0 10697(is)m
+210(ef)s 6(fecti)k 6(v)k 3(ely)k 220 fnt35
+1269 10694(@P)m 8(ageList)k 240 fnt82 2393 10697(alone,)m 3018(as)s
+3269(required.)s 4229(The)s 220 fnt35 4657 10694(@T)m 26(e)k 6(xt)k
+240 fnt82 5331 10697(g)m 1(alle)k 3(y)k 5965(will)s
+6392(\207nd)s 6823(its)s 7099(\207rst)s 7530(tar)s 4(get)k
+8130(preceding)s 0 10409(its)m 276(in)s 9(v)k 4(ocation)k
+1330(point,)s 1929(within)s 220 fnt35 2597 10406(@P)m 8(ageList)k
+240 fnt82 3661 10409(.)m 480 10035(Printing)m 1308(the)s 1661(root)s
+2112(g)s 1(alle)k 3(y)k 2751(on)s 3054(the)s
+3407(output)s 4085(\207le)s 4451(is)s 4666(some)s 6(what)k
+5696(problematical,)s 7121(because)s 7940(Lout)s 8457(has)s 8833(no)s
+0 9747(w)m 2(ay)k 461(of)s 742(kno)s 6(wing)k
+1638(ho)s 6(w)k 2109(lar)s 4(ge)k 2648(the)s
+3006(paper)s 3607(is.)s 3941(Basser)s 4648(Lout)s 5170(simply)s
+5885(prints)s 6490(one)s 6902(root)s 7357(g)s 1(alle)k 3(y)k
+8002(component)s 0 9459(per)m 355(page)s 852(\(e)s 3(xcept)k
+1601(it)s 1782(skips)s 2314(components)s 3511(of)s 3771(height)s
+4418(zero\),)s 5005(and)s 5398(the)s 5735(user)s 6182(is)s
+6381(responsible)s 7515(for)s 7842(ensuring)s 8708(that)s 0 9171(each)m
+504(component)s 1637(is)s 1856(page-sized.)s 3051(Gaps)s 3603(between)s
+4466(root)s 4920(g)s 1(alle)k 3(y)k 5563(components,)s
+6836(e)s 6(v)k 3(en)k 7345(unbreakable)s 8580(ones,)s
+0 8883(ha)m 4(v)k 3(e)k 501(no)s 794(ef)s 6(fect)k
+1390(on)s 1687(the)s 2035(result.)s 480 8509(Basser)m 1204(Lout)s
+1744(will)s 2198(promote)s 3079(a)s 3273(component)s 4425(only)s
+4933(after)s 5457(an)s 3(y)k 5882(recepti)s 6(v)k 3(e)k
+6832(symbols)s 7709(within)s 8405(it)s 8625(ha)s 4(v)k 3(e)k
+0 8221(been)m 509(replaced,)s 1426(either)s 2029(by)s 2324(g)s 1(alle)k 3(ys)k
+3048(or)s 3308(by)s 220 fnt35 3602 8218(@Null)m 240 fnt82
+4187 8221(,)m 4295(since)s 4842(until)s 5336(then)s 5805(the)s
+6154(component)s 7278(is)s 7489(not)s 7855(complete.)s 8896(A)s
+0 7933(component)m 1109(which)s 1736(shares)s 2369(a)s 2520(mark)s
+3057(with)s 3524(follo)s 6(wing)k 4486(components)s 5679(is)s
+5874(held)s 6329(up)s 6607(until)s 7085(the)s 3(y)k
+7533(are)s 7865(all)s 8143(complete,)s 0 7645(since)m 547(until)s
+1040(then)s 1509(their)s 2006(width)s 2608(is)s 2818(uncertain.)s
+480 7271(Consider)m 1409(a)s 1581(page)s 2095(with)s 220 fnt35
+2583 7268(@T)m 26(e)k 6(xtPlace)k 240 fnt82 3806 7271(and)m
+220 fnt35 4216 7268(@F)m 6(ootSect)k 240 fnt82 5373 7271(recepti)m 6(v)k 3(e)k
+6301(symbols.)s 7268(The)s 7702(rule)s 8135(just)s 8546(gi)s 6(v)k 3(en)k
+0 6983(will)m 418(pre)s 6(v)k 3(ent)k 1177(the)s
+1517(page)s 2016(from)s 2531(being)s 3108(printed)s 3834(until)s
+220 fnt35 4319 6980(@T)m 26(e)k 6(xtPlace)k 240 fnt82
+5528 6983(is)m 5729(replaced)s 6588(by)s 6873(body)s 7399(te)s 3(xt,)k
+7852(quite)s 8377(rightly;)s 0 6695(b)m 4(ut)k 220 fnt35
+362 6692(@F)m 6(ootSect)k 240 fnt82 1513 6695(will)m 1939(also)s
+2377(pre)s 6(v)k 3(ent)k 3145(its)s 3421(printing,)s
+4285(e)s 6(v)k 3(en)k 4785(when)s 5361(there)s
+5894(are)s 6241(no)s 6534(footnotes.)s 480 6321(Basser)m 1187(Lout)s
+1709(is)s 1930(k)s 2(een)k 2447(to)s 2696(write)s
+3253(out)s 3629(pages)s 4235(as)s 4496(soon)s 5016(as)s
+5276(possible,)s 6178(to)s 6427(sa)s 4(v)k 3(e)k
+6911(memory)s 15(,)k 7811(and)s 8225(it)s 8428(cannot)s
+0 6033(af)m 6(ford)k 624(to)s 852(w)s 2(ait)k
+1309(fore)s 6(v)k 3(er)k 2038(for)s 2365(non-e)s 3(xistent)k
+3592(footnotes.)s 4635(A)s 4854(v)s 6(ariant)k 5559(of)s
+5819(the)s 6156(g)s 1(alle)k 3(y)k 6778(concept,)s
+7618(called)s 8235(a)s 240 fnt83 8389 6035(for)m 8(cing)k
+0 5747(galle)m 7(y)k 240 fnt82 573 5745(,)m 680(is)s
+890(introduced)s 1971(to)s 2210(solv)s 3(e)k 2768(this)s
+3164(problem.)s 4125(A)s 4355(forcing)s 5098(g)s 1(alle)k 3(y)k
+5732(is)s 5942(de\207ned)s 6705(lik)s 2(e)k 7117(this:)s
+220 fnt35 480 5244(def @T)m 26(e)k 6(xt f)k 6(orce into { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 4956( ...)m 240 fnt82 0 4505(and)m 392(so)s 646(on.)s
+1037(When)s 1654(such)s 2138(a)s 2291(g)s 1(alle)k 3(y)k
+2913(replaces)s 3734(a)s 220 fnt35 3887 4502(@Galle)m 4(y)k
+240 fnt82 4773 4505(symbol,)m 5573(Lout)s 6072(replaces)s 6893(e)s 6(v)k 3(ery)k
+7457(recepti)s 6(v)k 3(e)k 8366(symbol)s 0 4217(preceding)m
+1004(the)s 220 fnt35 1360 4214(@Galle)m 4(y)k 240 fnt82
+2266 4217(by)m 220 fnt35 2568 4214(@Null)m 240 fnt82 3153 4217(,)m
+3268(thus)s 3726(ensuring)s 4611(that)s 5038(as)s 5296(soon)s
+5814(as)s 6072(te)s 3(xt)k 6495(enters)s 7124(a)s
+7298(page,)s 7865(for)s 8212(e)s 3(xample,)k 0 3929(e)m 6(v)k 3(erything)k
+1064(up)s 1354(to)s 1590(and)s 1991(including)s 2945(the)s
+3289(preceding)s 4282(page)s 4787(can)s 5173(be)s 5452(printed.)s
+6290(This)s 6762(does)s 7249(not)s 7612(tak)s 2(e)k
+8061(care)s 8511(of)s 8778(the)s 0 3641(v)m 3(ery)k
+479(last)s 873(page,)s 1435(b)s 4(ut)k 1801(Basser)s
+2501(Lout)s 3016(replaces)s 3852(all)s 4149(recepti)s 6(v)k 3(e)k
+5074(symbols)s 5926(by)s 220 fnt35 6223 3638(@Null)m 240 fnt82
+6872 3641(when)m 7451(it)s 7646(realizes)s 8428(that)s 8850(its)s
+0 3353(input)m 552(has)s 922(all)s 1215(been)s 1724(read,)s
+2242(thus)s 2692(allo)s 6(wing)k 3576(the)s 3924(last)s
+4315(page)s 4823(to)s 5062(print.)s 480 2979(A)m 714(forcing)s
+1461(g)s 1(alle)k 3(y)k 2099(causes)s 2779(the)s
+3131(Third)s 3724(La)s 3(w)k 4204(to)s 4448(be)s
+4734(applied)s 5500(earlier)s 6172(than)s 6646(e)s 3(xpected,)k
+7604(and)s 8012(this)s 8413(creates)s 0 2691(tw)m 2(o)k
+425(problems.)s 1495(First,)s 2055(the)s 2419(replacement)s 3662(by)s
+220 fnt35 3972 2688(@Null)m 240 fnt82 4633 2691(may)m 5114(be)s
+5412(premature:)s 6562(a)s 6744(g)s 1(alle)k 3(y)k
+7394(may)s 7876(turn)s 8334(up)s 8643(later)s 0 2403(w)m 2(anting)k
+869(one)s 1318(of)s 1636(the)s 2032(defunct)s 2856(tar)s 4(gets.)k
+3699(Such)s 4283(g)s 1(alle)k 3(ys)k 5054(\(entries)s
+5867(in)s 6157(tables)s 6813(of)s 7131(contents)s 8026(are)s
+8421(typical)s 0 2115(e)m 3(xamples\))k 1020(are)s 1358(copied)s
+2045(into)s 2461(the)s 2801(cross)s 3334(reference)s 4268(database)s
+5138(and)s 5534(read)s 5994(in)s 6228(during)s 6897(the)s
+7237(ne)s 3(xt)k 7697(run)s 8064(just)s 8460(before)s
+0 1827(their)m 488(tar)s 4(gets)k 1161(are)s 1498(closed,)s
+2206(and)s 2600(so)s 2856(the)s 3(y)k 3309(\207nd)s
+3730(their)s 4217(tar)s 4(gets)k 4891(in)s 5124(the)s
+5462(end.)s 5962(Care)s 6459(must)s 6974(be)s 7246(tak)s 2(en)k
+7809(to)s 8038(ensure)s 8708(that)s 0 1539(lar)m 4(ge)k
+526(g)s 1(alle)k 3(ys)k 1247(such)s 1739(as)s
+1986(chapters)s 2829(and)s 3230(sections)s 4047(do)s 4337(not)s
+4700(ha)s 4(v)k 3(e)k 5197(defunct)s 5971(tar)s 4(gets,)k
+6706(since)s 7250(the)s 7594(cost)s 8036(of)s 8303(cop)s 2(ying)k
+0 1251(them)m 538(to)s 777(and)s 1181(from)s 1705(the)s
+2053(database)s 2932(is)s 3142(unacceptably)s 4458(high.)s 480 877(It)m
+694(is)s 914(actually)s 1734(an)s 2027(o)s 3(v)k 3(er)k 4(-simpli\207cation)k
+3901(to)s 4150(say)s 4533(that)s 4961(these)s 5517(replacements)s
+6838(occur)s 7439(when)s 8025(the)s 8383(forcing)s 0 589(g)m 1(alle)k 3(y)k
+633(replaces)s 1464(its)s 220 fnt35 1738 586(@Galle)m 4(y)k
+240 fnt82 2576 589(.)m 2738(What)s 3315(really)s 3910(happens)s
+4744(is)s 4952(that)s 5368(from)s 5891(this)s 6285(moment)s
+7127(on)s 7422(Lout)s 7932(understands)s 0 301(that)m 414(it)s
+602(has)s 968(the)s 1311(right)s 1818(to)s 2053(mak)s 2(e)k
+2621(these)s 3163(replacements,)s 4526(and)s 4926(it)s 5114(will)s
+5535(do)s 5824(each)s 6315(one)s 6713(at)s 6940(the)s
+7284(\207rst)s 7711(moment)s 8550(when)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(30)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(not)m 369(doing)s 972(it)s
+1168(w)s 2(ould)k 1827(hold)s 2315(things)s 2955(up.)s
+3363(So)s 3673(there)s 4210(is)s 4423(a)s 4593(short)s
+5135(period)s 5808(of)s 6083(grace)s 6660(when)s 7240(g)s 1(alle)k 3(ys,)k
+8024(such)s 8524(as)s 8778(the)s 0 12917(entries)m 687(in)s
+930(tables)s 1538(of)s 1809(contents)s 2657(just)s 3062(alluded)s
+3824(to,)s 4117(can)s 4506(sneak)s 5112(into)s 5537(these)s
+6084(recepti)s 6(v)k 3(e)k 7006(symbols.)s 480 12543(The)m
+220 fnt35 902 12540(into)m 240 fnt82 1302 12543(and)m 220 fnt35
+1699 12540(f)m 6(orce into)k 240 fnt82 2642 12543(forms)m 3243(are)s
+3584(actually)s 4387(just)s 4786(abbre)s 6(viations)k 6112(for)s
+6444(the)s 6785(true)s 7206(w)s 2(ay)k 7650(that)s
+8062(g)s 1(alle)k 3(ys)k 8779(are)s 0 12255(de\207ned,)m
+806(which)s 1442(is)s 1646(by)s 1934(gi)s 6(ving)k
+2586(the)s 2928(symbol)s 3682(that)s 4094(is)s 4297(to)s
+4530(be)s 4806(a)s 4966(g)s 1(alle)k 3(y)k
+5594(a)s 5753(parameter)s 6761(or)s 7014(nested)s 7677(de\207nition)s
+8644(with)s 0 11967(the)m 348(special)s 1066(name)s 220 fnt35
+1640 11964(@T)m 26(arget)k 240 fnt82 2467 11967(:)m 220 fnt35
+480 11466(def @T)m 26(e)k 6(xt)k 480 11178( r)m -3(ight x)k
+480 10890({)m 480 10602( def @T)m 26(arget { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 10026( x)m 480 9738(})m 240 fnt82 0 9244(A)m 237(forcing)s
+988(g)s 1(alle)k 3(y)k 1630(is)s 1848(obtained)s
+2738(by)s 3039(using)s 220 fnt35 3619 9241(&&&)m 240 fnt82
+4121 9244(instead)m 4864(of)s 220 fnt35 5143 9241(&&)m 240 fnt82
+5431 9244(.)m 220 fnt35 5602 9241(@T)m 26(arget)k 240 fnt82
+6497 9244(may)m 6971(be)s 7261(an)s 7552(arbitrary)s 8435(object,)s
+0 8956(pro)m 3(vided)k 908(that)s 1329(it)s 1524(yields)s
+2149(such)s 2648(a)s 2817(cross)s 3362(reference)s 4307(when)s
+4886(e)s 6(v)k 6(aluated.)k 5957(In)s 6216(this)s
+6615(w)s 2(ay)k 15(,)k 7107(dif)s 6(ferent)k
+7985(in)s 9(v)k 4(ocations)k 0 8668(may)m 466(ha)s 4(v)k 3(e)k
+967(dif)s 6(ferent)k 1842(tar)s 4(gets.)k 480 8294(The)m
+904(forcing)s 1643(g)s 1(alle)k 3(y)k 2273(ef)s 6(fect)k
+2865(can)s 3249(be)s 3527(obtained)s 4405(in)s 4644(another)s
+5417(w)s 2(ay)k 15(,)k 5901(by)s 6191(replacing)s
+7129(the)s 220 fnt35 7473 8291(@Galle)m 4(y)k 240 fnt82
+8366 8294(symbol)m 0 8006(to)m 245(which)s 893(the)s 1247(g)s 1(alle)k 3(y)k
+1887(is)s 2103(attached)s 2964(by)s 220 fnt35 3264 8003(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 4657 8006(.)m 4827(The)s 5261(adv)s 6(antage)k
+6287(of)s 6565(this)s 6967(form)s 7497(is)s 7713(that)s
+8137(the)s 8492(g)s 1(alle)k 3(y)k 0 7718(can)m
+389(then)s 858(be)s 1140(forcing)s 1883(at)s 2115(some)s
+2676(places)s 3324(and)s 3728(not)s 4094(at)s 4326(others,)s
+5017(using)s 5589(the)s 5937(formula)s 220 fnt35 480 7217(def @SomePlace r)m -3(ight x)k
+480 6929({)m 480 6641( x @Case {)m 480 6353( nof)m 6(orce @Y)k 4(ield @Galle)k 4(y)k
+480 6065( f)m 6(orce @Y)k 4(ield @F)k 6(orceGalle)k 4(y)k
+480 5777( })m 480 5489(})m 240 fnt82 0 4995(No)m 6(w)k
+514(a)s 680(g)s 1(alle)k 3(y)k 1314(may)s
+1780(ha)s 4(v)k 3(e)k 220 fnt35 2281 4992(@SomePlace)m
+240 fnt82 3677 4995(for)m 4015(its)s 4291(tar)s 4(get,)k
+4937(and)s 5341(if)s 5558(it)s 5750(happens)s 6586(to)s
+6825(attach)s 7452(to)s 220 fnt35 480 4494(@SomePlace f)m 6(orce)k
+240 fnt82 0 4039(it)m 192(will)s 618(ha)s 4(v)k 3(e)k
+1119(the)s 1467(ef)s 6(fect)k 2063(of)s 2334(a)s
+2500(forcing)s 3243(g)s 1(alle)k 3(y)k 15(,)k
+3915(while)s 4502(if)s 4719(it)s 4911(happens)s 5747(to)s
+5986(attach)s 6613(to)s 220 fnt35 480 3538(@SomePlace nof)m 6(orce)k
+240 fnt82 0 3083(it)m 192(will)s 618(not.)s 480 2709(Although)m
+1436(it)s 1621(doesn')s 4(t)k 2374(matter)s 3036(whether)s
+3859(a)s 4018(g)s 1(alle)k 3(y)k 4645(is)s
+4848(declared)s 5708(as)s 5951(a)s 6110(forcing)s 6846(g)s 1(alle)k 3(y)k
+7473(or)s 7725(merely)s 8435(arri)s 6(v)k 3(es)k
+0 2421(at)m 244(a)s 220 fnt35 422 2418(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 1887 2421(symbol)m 2659(from)s 3195(the)s 3555(point)s
+4119(of)s 4402(vie)s 6(w)k 4928(of)s 5211(the)s
+5571(ef)s 6(fect)k 6179(on)s 6488(nearby)s 7205(tar)s 4(gets,)k
+7956(there)s 8501(is)s 8724(one)s 0 2133(w)m 2(ay)k
+446(in)s 683(which)s 1319(Lout)s 1825(treats)s 2387(the)s
+2729(tw)s 2(o)k 3133(cases)s 3682(dif)s 6(ferently)k 15(.)k
+4827(If)s 5051(a)s 5211(forcing)s 5948(g)s 1(alle)k 3(y')k 13(s)k
+6733(\207rst)s 7158(component)s 8276(does)s 8760(not)s 0 1845(\207t)m
+264(into)s 695(the)s 1048(a)s 4(v)k 6(ailable)k
+1962(space,)s 2606(that)s 3029(component)s 4159(will)s 4590(be)s
+4878(scaled)s 5539(v)s 3(ertically)k 6496(until)s 6995(it)s
+7192(does.)s 7801(The)s 8235(rationale)s 0 1557(for)m 343(this)s
+744(is)s 959(that)s 1382(forcing)s 2130(g)s 1(alle)k 3(ys)k
+2860(are)s 3212(meant)s 3861(to)s 4105(carry)s 4654(the)s
+5007(b)s 4(ulk)k 5496(of)s 5772(the)s 6125(document)s
+7134(and)s 7543(cannot)s 8246(af)s 6(ford)k 8887(to)s
+0 1269(be)m 295(held)s 779(up)s 1086(because)s 1913(the)s
+2275(user)s 2747(has)s 3131(inadv)s 3(ertently)k 4456(included)s
+5352(an)s 5649(o)s 3(v)k 3(er)k 4(-high)k
+6640(component,)s 7825(which)s 8481(for)s 8833(all)s 0 981(Lout)m
+514(kno)s 6(ws)k 1188(to)s 1430(the)s 1781(contrary)s
+2634(may)s 3103(not)s 3472(\207t)s 3734(on)s 4034(an)s 3(y)k
+4433(page.)s 5052(If)s 5285(this)s 5684(scaling)s 6417(is)s
+6630(not)s 6999(w)s 2(anted)k 7749(b)s 4(ut)k
+8114(forcing)s 8860(is,)s 0 693(the)m 348(g)s 1(alle)k 3(y)k
+982(may)s 1448(be)s 1730(declared)s 2597(not)s 2963(forcing)s
+3706(b)s 4(ut)k 4068(all)s 4361(its)s 4637(tar)s 4(gets)k
+5320(may)s 5786(be)s 6068(set)s 6393(to)s 6632(contain)s
+220 fnt35 7393 690(@F)m 6(orceGalle)k 4(y)k 240 fnt82
+8786 693(.)m 480 319(W)m 9(ithin)k 1197(a)s 1368(g)s 1(alle)k 3(y)k 15(,)k
+2045(a)s 2216(symbol)s 2981(whose)s 3654(name)s 4233(is)s
+220 fnt35 4448 316(@Enclose)m 240 fnt82 5508 319(has)m 5883(a)s
+6054(special)s 6777(meaning:)s 7772(when)s 8353(compo)s 8998(-)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8839 13840(31)m
+240 fnt82 0 13205(nents)m 556(of)s 827(the)s 1175(g)s 1(alle)k 3(y)k
+1810(replace)s 2555(a)s 220 fnt35 2721 13202(@Galle)m 4(y)k
+240 fnt82 3619 13205(or)m 220 fnt35 3879 13202(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 5332 13205(symbol,)m 6144(that)s 6562(symbol)s 7323(is)s
+7533(\207rst)s 7964(replaced)s 8832(by)s 220 fnt35 0 12914(@Enclose)m
+1055(@Galle)s 4(y)k 240 fnt82 1953 12917(or)m 220 fnt35
+2212 12914(@Enclose)m 3267(@F)s 6(orceGalle)k 4(y)k 240 fnt82
+4660 12917(.)m 4824(F)s 3(or)k 5213(e)s 3(xample,)k
+220 fnt35 480 12416(def @Enclose)m 480 12128( r)m -3(ight x)k 480 11840({)m
+480 11552( @Bo)m 6(x x)k 480 11264(})m 240 fnt82 0 10770(within)m
+714(some)s 1321(g)s 1(alle)k 3(y)k 2001(de\207nition)s
+3021(causes)s 3742(each)s 220 fnt35 4283 10767(@Galle)m 4(y)k
+240 fnt82 5227 10770(or)m 220 fnt35 5532 10767(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 7031 10770(symbol)m 7837(that)s 8302(recei)s 6(v)k 3(es)k
+0 10482(components)m 1213(of)s 1489(the)s 1842(g)s 1(alle)k 3(y)k
+2481(to)s 2725(be)s 3013(replaced)s 3885(by)s 220 fnt35
+4184 10479(@Bo)m 6(x @Galle)k 4(y)k 240 fnt82 5743 10482(or)m
+220 fnt35 6007 10479(@Bo)m 6(x @F)k 6(orceGalle)k 4(y)k
+240 fnt82 8056 10482(,)m 8169(assuming)s 0 10194(an)m 314(appropriate)s
+1489(de\207nition)s 2495(of)s 220 fnt35 2797 10191(@Bo)m 6(x.)k
+240 fnt82 3586 10194(This)m 4093(is)s 4334(useful,)s 5057(for)s
+5426(e)s 3(xample,)k 6372(when)s 6979(producing)s 8035(multi-page)s
+0 9906(box)m 3(ed)k 641(displays,)s 1532(\207gures,)s 2290(and)s
+2694(tables.)s 480 9532(An)m 220 fnt35 861 9529(@Enclose)m 240 fnt82
+1947 9532(symbol)m 2739(may)s 3236(ha)s 4(v)k 3(e)k
+3769(only)s 4280(one)s 4714(parameter)s 9(,)k 5797(which)s
+6471(must)s 7027(be)s 7341(a)s 7538(right)s 8081(parameter)s 13(.)k
+0 9244(It)m 213(w)s 2(ould)k 877(not)s 1252(mak)s 2(e)k
+1833(sense)s 2416(to)s 2664(allo)s 6(w)k 3252(more)s
+3808(parameters,)s 4971(since)s 5527(there)s 6069(is)s 6288(no)s
+6590(suitable)s 7398(v)s 6(alue)k 7975(to)s 8223(assign)s
+8887(to)s 0 8956(them.)m 655(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1628(the)s 220 fnt35 1989 8953(@Enclose)m 240 fnt82 3058 8956(symbol)m
+3831(may)s 4310(contain)s 5085(inner)s 5649(de\207nitions,)s 6779(and)s
+7196(it)s 7402(may)s 7881(mak)s 2(e)k 8466(use)s
+8855(of)s 0 8668(an)m 3(y)k 397(symbol)s 1157(that)s
+1575(is)s 1785(a)s 4(v)k 6(ailable)k 2693(at)s
+2925(that)s 3343(point,)s 3942(in)s 4185(the)s 4533(usual)s
+5093(w)s 2(ay)k 15(.)k 480 8294(A)m 220 fnt35
+709 8291(f)m 6(ollo)k 3(wing)k 240 fnt82 1597 8294(g)m 1(alle)k 3(y)k
+2229(may)s 2693(f)s 2(ail)k 3061(to)s 3299(\207nd)s
+3728(a)s 3892(\207rst)s 4321(tar)s 4(get)k 4918(lying)s
+5461(in)s 5703(a)s 5867(follo)s 6(wing)k 6842(component)s
+7964(of)s 8233(the)s 8579(same)s 0 8006(g)m 1(alle)k 3(y)k
+634(as)s 884(its)s 1159(in)s 9(v)k 4(ocation)k
+2213(point.)s 2868(This)s 3344(is)s 3553(a)s 3719(de\207cienc)s 3(y)k
+4752(of)s 5023(Basser)s 5719(Lout,)s 6278(which)s 6919(occurs)s
+7594(if)s 7810(the)s 8158(tar)s 4(get)k 8756(has)s
+0 7718(not)m 356(been)s 855(read)s 1313(from)s 1827(input)s
+2369(at)s 2590(the)s 2928(time)s 3398(the)s 3735(g)s 1(alle)k 3(y)k
+4359(tries)s 4810(to)s 5038(\207nd)s 5459(it.)s 5745(A)s
+5964(w)s 2(orkaround)k 7167(is)s 7367(to)s 7595(use)s
+7960(a)s 220 fnt35 8115 7715(preceding)m 240 fnt82 0 7430(g)m 1(alle)k 3(y)k
+634(instead,)s 1418(de\207ned)s 2181(lik)s 2(e)k 2593(this:)s
+220 fnt35 480 6929(def @A)m 6(Galle)k 4(y into { @A)k 6(Galle)k 4(yPlace&&preceding })k
+480 6641( r)m -3(ight @Body)k 480 6353({)m 480 6065( //1.1b)m 480 5777( @Body)m
+480 5489(})m 240 fnt82 0 4995(and)m 404(in)s 9(v)k 4(ok)k 2(ed)k
+1219(lik)s 2(e)k 1631(this:)s 220 fnt35 480 4543(@A)m 6(Galle)k 4(yPlace | @A)k 6(Galle)k 4(y { content of galle)k 4(y })k
+480 4255(//)m 480 3967(...)m 480 3679(@A)m 6(Galle)k 4(yPlace)k
+240 fnt82 0 3181(The)m 419(\207rst)s 220 fnt35 841 3178(@A)m 6(Galle)k 4(yPlace)k
+240 fnt82 2411 3181(recei)m 6(v)k 3(es)k 3226(only)s
+3696(the)s 4035(initial)s 4636(empty)s 5279(object,)s 5960(since)s
+6498(the)s 220 fnt35 6836 3178(//1.1b)m 240 fnt82 7428 3181(forces)m
+8052(a)s 8209(split;)s 8722(and)s 0 2893(the)m 348(Second)s
+1111(La)s 3(w)k 1587(puts)s 2037(Basser)s 2734(Lout)s
+3246(on)s 3543(the)s 3891(right)s 4402(track)s 4940(thereafter)s 13(.)k
+240 fnt84 0 2100(2.8.)m 471(Sorted)s 1203(galleys)s 240 fnt82
+480 1623(When)m 1128(footnotes)s 2088(are)s 2455(placed)s 3156(at)s
+3407(the)s 3775(bottom)s 4532(of)s 4823(a)s 5008(page,)s
+5586(the)s 3(y)k 6069(appear)s 6785(there)s 7337(in)s
+7600(\207rst)s 8050(come,)s 8695(\207rst)s 0 1335(serv)m 3(ed)k
+674(order)s 13(.)k 1324(T)s 19(o)k 1618(mak)s 2(e)k
+2185(g)s 1(alle)k 3(ys)k 2903(appear)s 3595(in)s
+3832(sorted)s 4469(order)s 9(,)k 5065(as)s 5310(is)s
+5514(needed)s 6245(in)s 6482(bibliographies)s 7896(and)s 8294(inde)s 3(x)k 3(es,)k
+0 1047(a)m 178(parameter)s 1205(or)s 1477(nested)s 2158(de\207nition)s
+3145(with)s 3640(the)s 4000(special)s 4731(name)s 220 fnt35
+5318 1044(@K)m 8(e)k 4(y)k 240 fnt82 5977 1047(is)m
+6200(added)s 6843(to)s 7094(the)s 7455(g)s 1(alle)k 3(y)k
+8102(de\207nition,)s 0 759(lik)m 2(e)k 412(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(32)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 220 fnt35 480 13207(def @Inde)m 6(xEntr)k -6(y into { @Inde)k 6(xPlace&&f)k 6(ollo)k 3(wing })k
+480 12919( left @K)m 8(e)k 4(y)k 480 12631( r)m -3(ight x)k
+480 12343({ x })m 0 11846(@K)m 8(e)k 4(y)k 240 fnt82
+674 11849(must)m 1226(be)s 1535(set)s 1887(to)s 2153(a)s
+2346(simple)s 3066(w)s 2(ord,)k 3690(or)s 3976(se)s 6(v)k 3(eral)k
+4725(w)s 2(ords)k 5386(with)s 5895(nothing)s 6707(more)s
+7281(comple)s 3(x)k 8184(than)s 8681(font)s 0 11561(changes)m
+822(within)s 1490(them,)s 2075(when)s 2651(the)s 2999(g)s 1(alle)k 3(y)k
+3633(is)s 3843(in)s 9(v)k 4(ok)k 2(ed:)k
+220 fnt35 480 11060({ cities compare } @Inde)m 6(xEntr)k -6(y { cities)k 3(, compar)k -3(ison of)k 6(, 27 })k
+240 fnt82 0 10562(and)m 404(this)s 800(k)s 2(e)k 3(y)k
+1195(is)s 1405(used)s 1902(to)s 2141(sort)s 2559(the)s
+2907(g)s 1(alle)k 3(ys.)k 480 10188(If)m 707(se)s 6(v)k 3(eral)k
+1425(sorted)s 2063(g)s 1(alle)k 3(ys)k 2783(with)s
+3261(the)s 3605(same)s 4148(k)s 2(e)k 3(y)k
+4539(are)s 4882(sent)s 5323(to)s 5558(the)s 5902(same)s
+6445(place,)s 7052(the)s 7396(def)s 2(ault)k 8113(beha)s 4(viour)k
+0 9900(is)m 253(to)s 536(print)s 1091(only)s 1615(the)s
+2007(\207rst)s 2481(of)s 2796(them;)s 3430(the)s 3822(assumption)s
+5013(is)s 5266(that)s 5728(the)s 6120(others)s 6799(are)s
+7190(probably)s 8139(unw)s 2(anted)k 0 9612(duplicates.)m 1146(This)s
+1636(holds)s 2220(good)s 2772(for)s 3123(sorted)s 3779(reference)s
+4736(lists,)s 5241(for)s 5593(e)s 3(xample:)k 6579(we)s
+6928(don')s 4(t)k 7503(w)s 2(ant)k 8040(tw)s 2(o)k
+8464(copies)s 0 9324(of)m 273(a)s 442(reference)s 1388(just)s
+1796(because)s 2611(we)s 2949(happen)s 3701(to)s 3943(cite)s
+4345(it)s 4540(twice.)s 5224(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6187(the)s 6537(other)s 7091(common)s 7989(e)s 3(xample)k
+8855(of)s 0 9036(sorted)m 642(g)s 1(alle)k 3(ys,)k
+1422(inde)s 3(x)k 2006(entries,)s 2749(requires)s 3569(something)s
+4619(dif)s 6(ferent:)k 240 fnt83 5600 9038(mer)m 8(g)k 2(ed)k
+240 fnt82 6374 9036(g)m 1(alle)k 3(ys.)k 480 8662(Suppose)m
+1348(that)s 1766(at)s 1998(some)s 2559(point)s 3111(of)s
+3382(the)s 3730(document)s 4734(we)s 5069(insert)s 5659(the)s
+6007(inde)s 3(x)k 6591(entry)s 220 fnt35 480 8161(aardv)m 5(ar)k -3(ks @Inde)k 6(xEntr)k -6(y { Aardv)k 5(ar)k -3(ks)k 3(, 23 })k
+240 fnt82 0 7663(while)m 587(at)s 819(another)s 1596(point)s
+2148(we)s 2483(insert)s 220 fnt35 480 7162(aardv)m 5(ar)k -3(ks @Inde)k 6(xEntr)k -6(y { Aardv)k 5(ar)k -3(ks)k 3(, 359 })k
+240 fnt82 0 6664(Ho)m 6(w)k 505(the)s 843(page)s
+1341(numbers)s 2206(are)s 2544(w)s 2(ork)k 2(ed)k
+3306(out)s 3662(is)s 3862(not)s 4219(rele)s 6(v)k 6(ant)k
+5026(here.)s 5591(Clearly)s 6338(we)s 6664(w)s 2(ould)k
+7309(lik)s 2(e)k 7711(to)s 7940(mer)s 4(ge)k
+8579(these)s 0 6376(tw)m 2(o)k 410(entries)s 1097(into)s
+1522(one)s 1924(entry)s 2469(that)s 2887(comes)s 3549(out)s
+3915(as)s 480 5871(Aardv)m 6(arks, 23, 359)k 0 5387(The)m 428(follo)s 6(wing)k
+1405(de\207nition)s 2379(will)s 2805(mer)s 4(ge)k 3454(tw)s 2(o)k
+3864(objects)s 4592(in)s 4835(this)s 5231(w)s 2(ay:)k
+220 fnt35 480 4886(def @Merge left x r)m -3(ight y)k 480 4598({)m 480 4310( {x @Rump y} @Case)m
+480 4022( {)m 480 3734( "" @Y)m 4(ield x)k 480 3446( else @Y)m 4(ield { x, x @Rump y })k
+480 3158( })m 480 2870(})m 240 fnt82 0 2376(The)m 220 fnt35
+429 2373(@Rump)m 240 fnt82 1290 2376(symbol)m 2051(is)s 2262(the)s
+2611(subject)s 3349(of)s 3621(Section)s 4396(3.23;)s 4929(this)s
+5326(says)s 5790(`if)s 6087(the)s 6436(tw)s 2(o)k
+6847(things)s 7484(to)s 7724(be)s 8007(mer)s 4(ged)k
+8779(are)s 0 2088(equal,)m 622(the)s 967(result)s 1553(is)s
+1760(one)s 2158(of)s 2426(them;)s 3012(otherwise)s 3994(it)s
+4182(is)s 4389(the)s 4733(\207rst)s 5161(follo)s 6(wed)k
+6059(by)s 6350(a)s 6512(comma)s 7273(and)s 7673(space)s
+8257(and)s 8657(then)s 0 1800(the)m 355(rump)s 921(of)s
+1200(the)s 1556(second.)s 16(')k 2445(Our)s 2885(only)s
+3372(problem)s 4237(is)s 4455(that)s 4881(this)s 5285(symbol)s
+6053(has)s 6430(to)s 6677(be)s 6967(applied)s 7737(to)s
+7984(tw)s 2(o)k 8402(g)s 1(alle)k 3(ys)k
+0 1512(from)m 524(widely)s 1229(separated)s 2189(parts)s 2704(of)s
+2975(the)s 3323(document.)s 480 1138(Lout)m 993(mak)s 2(es)k
+1654(this)s 2052(possible)s 2893(by)s 3189(the)s 3538(follo)s 6(wing)k
+4517(special)s 5236(rule:)s 5775(if)s 5993(a)s 6161(sorted)s
+6804(g)s 1(alle)k 3(y)k 7440(contains)s 8289(a)s
+8457(nested)s 0 850(de\207nition)m 965(of)s 1227(a)s 1383(symbol)s
+2134(whose)s 2793(name)s 3357(is)s 220 fnt35 3558 847(@Merge)m
+240 fnt82 4446 850(\()m 220 fnt35 4519 847(@Merge)m 240 fnt82
+5406 850(must)m 5922(ha)s 4(v)k 3(e)k 6414(just)s
+6809(tw)s 2(o)k 7210(parameters,)s 8355(left)s 8722(and)s
+0 562(right\),)m 643(and)s 1054(if)s 1277(that)s 1702(sorted)s
+2350(g)s 1(alle)k 3(y)k 2991(is)s 3207(preceded)s
+4135(in)s 4384(the)s 4739(list)s 5096(of)s 5374(sorted)s
+6022(g)s 1(alle)k 3(ys)k 6753(destined)s 7614(for)s
+7959(some)s 8527(tar)s 4(get)k 0 274(by)m 300(another)s
+1084(sorted)s 1733(g)s 1(alle)k 3(y)k 2374(with)s
+2863(the)s 3217(same)s 3771(k)s 2(e)k 3(y)k 15(,)k
+4211(then)s 4687(rather)s 5310(than)s 5785(being)s 6377(discarded,)s
+7407(the)s 7762(second)s 8492(g)s 1(alle)k 3(y)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.8.)m 454(Sorted)s 1145(galle)s 7(ys)k
+240 fnt84 8833 13840(33)m 240 fnt82 0 13205(is)m 210(mer)s 4(ged)k
+981(into)s 1406(the)s 1754(\207rst)s 2185(using)s 2757(the)s
+220 fnt35 3105 13202(@Merge)m 240 fnt82 4002 13205(symbol.)m 480 12831(The)m
+909(natural)s 1629(thing)s 2175(to)s 2416(do)s 2711(when)s
+3288(more)s 3837(than)s 4307(tw)s 2(o)k 4719(g)s 1(alle)k 3(ys)k
+5445(ha)s 4(v)k 3(e)k 5947(the)s 6297(same)s
+6845(k)s 2(e)k 3(y)k 7242(is)s 7454(to)s
+7694(mer)s 4(ge)k 8345(the)s 8695(\207rst)s 0 12543(tw)m 2(o,)k
+477(then)s 959(mer)s 4(ge)k 1621(the)s 1982(third)s
+2504(with)s 2999(the)s 3360(result)s 3963(of)s 4247(that,)s
+4725(then)s 5207(the)s 5568(fourth)s 6222(with)s 6717(the)s
+7078(result)s 7681(of)s 7965(that,)s 8443(and)s 8860(so)s
+0 12255(on.)m 403(F)s 3(or)k 790(ef\207cienc)s 3(y)k
+1781(reasons)s 2547(be)s 3(yond)k 3306(our)s 3684(scope)s
+4283(here,)s 4799(Lout)s 5309(does)s 5797(the)s 6144(mer)s 4(ging)k
+6988(in)s 7229(a)s 7393(dif)s 6(ferent)k 8266(order:)s
+8934(it)s 0 11967(mer)m 4(ges)k 240 fnt83 736 11969(n)m
+240 fnt82 909 11967(g)m 1(alle)k 3(ys)k 1632(by)s
+1925(mer)s 4(ging)k 2770(the)s 3116(\207rst)s 240 fnt78
+3592 11925(\353)m 240 fnt83 3685 11969(n)m 240 fnt78 3809 11961(/)m
+3881(2)s 4006 11925(\373)m 240 fnt82 4197 11967(together)m 9(,)k
+5077(then)s 5545(the)s 5892(last)s 240 fnt78 6327 11937(\351)m
+240 fnt83 6420 11969(n)m 240 fnt78 6545 11961(/)m 6617(2)s
+6741 11937(\371)m 240 fnt82 6933 11967(together)m 9(,)k 7813(then)s
+8280(mer)s 4(ging)k 0 11679(the)m 337(result.)s 1019(Of)s
+1332(course,)s 2051(if)s 2257(the)s 220 fnt35 2593 11676(@Merge)m
+240 fnt82 3479 11679(symbol)m 4227(is)s 4426(associati)s 6(v)k 3(e)k
+5509(this)s 5894(has)s 6252(the)s 6589(same)s 7124(ef)s 6(fect.)k
+7813(The)s 220 fnt35 8229 11676(@Merge)m 240 fnt82 0 11391(symbol)m
+758(abo)s 3(v)k 3(e)k 1377(is)s 1584(not)s
+1947(strictly)s 2660(associati)s 6(v)k 3(e,)k 3803(b)s 4(ut)k
+4162(it)s 4351(is)s 4559(close)s 5103(enough)s 5863(in)s
+6103(practice.)s 7019(The)s 7444(total)s 7920(time)s 8397(it)s
+8586(tak)s 2(es)k 0 11103(to)m 252(mer)s 4(ge)k
+240 fnt83 915 11105(n)m 240 fnt82 1102 11103(g)m 1(alle)k 3(ys)k
+1840(with)s 2335(equal)s 2922(k)s 2(e)k 3(ys)k
+3421(is)s 240 fnt83 3644 11105(O)m 240 fnt78 3838 11097(\()m
+168 fnt78 4049 11196(2)m 240 fnt83 3935 11105(n)m 240 fnt78
+4155 11097(\))m 240 fnt82 4294 11103(or)m 4567(some)s 6(what)k
+5605(higher)s 6289(\(b)s 4(ut)k 6744(al)s 2(w)k 2(ays)k
+7468(polynomial)s 8627(in)s 240 fnt83 8884 11105(n)m 240 fnt82
+8998 11103(\))m 0 10815(depending)m 1053(on)s 1353(ho)s 6(w)k
+1816(man)s 3(y)k 2402(times)s 2972(the)s 3323(parameters)s
+4424(occur)s 5017(within)s 5688(the)s 6038(body)s 6575(of)s
+220 fnt35 6849 10812(@Merge)m 240 fnt82 7686 10815(;)m 7800(to)s
+8042(do)s 8337(it)s 8532(in)s 8778(the)s 0 10527(natural)m
+718(linear)s 1321(order)s 1885(w)s 2(ould)k 2540(tak)s 2(e)k
+2992(Lout)s 3504(e)s 3(xponential)k 4672(time.)s 240 fnt84
+0 9734(2.9.)m 471(Horizontal)s 1628(galleys)s 240 fnt82 480 9257(All)m
+846(the)s 1201(g)s 1(alle)k 3(ys)k 1932(so)s
+2205(f)s 2(ar)k 2534(ha)s 4(v)k 3(e)k
+3042(been)s 240 fnt83 3557 9259(vertical)m 4353(galle)s 7(ys)k
+240 fnt82 5018 9257(:)m 5191(g)s 1(alle)k 3(ys)k
+5922(whose)s 6597(components)s 7812(are)s 8166(separated)s 0 8969(by)m
+320(v)s 3(ertical)k 1114(concatenation)s 2525(symbols.)s 3514(There)s
+4154(are)s 4527(also)s 4992(horizontal)s 6043(g)s 1(alle)k 3(ys,)k
+6849(whose)s 7544(components)s 8779(are)s 0 8681(separated)m 951(by)s
+1235(the)s 1574(horizontal)s 2588(concatenation)s 3963(operator)s 220 fnt35
+4810 8678(&)m 240 fnt82 5002 8681(\(or)m 5331(equi)s 6(v)k 6(alently)k 15(,)k
+6583(by)s 6867(spaces\).)s 7725(These)s 8342(w)s 2(ork)k
+8883(in)s 0 8393(the)m 346(same)s 891(w)s 2(ay)k
+1340(as)s 1588(v)s 3(ertical)k 2353(g)s 1(alle)k 3(ys,)k
+3131(e)s 3(xcept)k 3810(for)s 4146(the)s 4492(change)s
+5224(of)s 5493(direction.)s 6504(F)s 3(or)k 6891(e)s 3(xample,)k
+7803(the)s 8149(follo)s 6(wing)k 0 8105(de\207nes)m 730(the)s
+1079(equi)s 6(v)k 6(alent)k 2124(of)s 2396(an)s
+2681(ordinary)s 3546(outdented)s 4549(paragraph,)s 5613(e)s 3(xcept)k
+6295(that)s 6715(an)s 6999(option)s 7669(is)s 7880(pro)s 3(vided)k
+8788(for)s 0 7817(v)m 6(arying)k 778(the)s 1126(size)s
+1553(of)s 1824(the)s 2172(outdent:)s 220 fnt35 480 7316(def @OutdentP)m 8(ar)k
+480 7028( named outdent { 2f })m 480 6740( r)m -3(ight x)k 480 6452({)m 480 6164( def @P)m 8(arPlace { @Galle)k 4(y })k
+480 5588( def @LineList)m 480 5300( {)m 480 5012( outdent @Wide {} | @P)m 26(Adjust @P)k 8(arPlace)k
+480 4724( //1vx @LineList)m 480 4436( })m 480 3860( def @P)m 8(arGalle)k 4(y f)k 6(orce hor)k -3(iz)k 3(ontally into { @P)k 8(arPlace&&preceding })k
+480 3572( r)m -3(ight x)k 480 3284( {)m 480 2996( x)m 480 2708( })m
+480 2132( @P)m 26(Adjust @P)k 8(arPlace)k 480 1844( // @P)m 8(arGalle)k 4(y { x &1r)k -8(t })k
+480 1556( //1vx @LineList)m 480 1268(})m 240 fnt82 0 774(Notice)m 703(the)s
+1061(use)s 1446(of)s 220 fnt35 1727 771(&1r)m -8(t)k
+240 fnt82 2203 774(to)m 2452(cancel)s 3127(the)s 3485(ef)s 6(fect)k
+4091(of)s 220 fnt35 4372 771(@P)m 26(Adjust)k 240 fnt82
+5390 774(on)m 5697(the)s 6055(last)s 6456(line)s 6880(of)s
+7161(the)s 7519(paragraph.)s 8650(This)s 0 486(de\207nition)m 969(has)s
+1334(a)s 1494(problem)s 2346(in)s 2584(that)s 2996(there)s
+3524(will)s 3945(be)s 4221(a)s 4382(concluding)s 5494(une)s 3(xpanded)k
+220 fnt35 6701 483(@LineList)m 240 fnt82 7730 486(symbol)m 8484(which)s
+0 198(will)m 431(hold)s 921(up)s 1219(promotion)s 2279(of)s
+2555(the)s 2909(enclosing)s 3884(g)s 1(alle)k 3(y;)k
+4582(this)s 4983(problem)s 5846(may)s 6317(be)s 6605(\207x)s 3(ed)k
+7144(by)s 7444(the)s 7797(same)s 8350(method)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(34)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(used)m 497(to)s 736(end)s
+1140(a)s 1306(list.)s 480 12831(In)m 735(an)s 1016(ideal)s
+1533(w)s 2(orld,)k 2194(there)s 2725(w)s 2(ould)k
+3378(be)s 3658(nothing)s 4442(further)s 5149(to)s 5386(say)s
+5757(about)s 6347(horizontal)s 7369(g)s 1(alle)k 3(ys.)k
+8204(Ho)s 6(we)k 6(v)k 3(er)k 0 12543(there)m
+558(are)s 931(a)s 1123(fe)s 6(w)k 1555(dif)s 6(ferences)k
+2686(which)s 3354(arise)s 3886(from)s 4436(v)s 6(arious)k
+5211(practical)s 6113(considerations)s 7571(and)s 8001(limitations.)s 0 12255(Perhaps)m
+808(some)s 1369(day)s 1769(a)s 1935(more)s 2482(perfect)s
+3204(symmetry)s 4214(will)s 4640(be)s 4922(implemented.)s 480 11881(Each)m
+1021(v)s 3(ertical)k 1795(g)s 1(alle)k 3(y)k
+2436(has)s 2812(a)s 2985(\207x)s 3(ed)k 3526(\207nite)s
+4080(width,)s 4738(and)s 5149(e)s 6(v)k 3(ery)k
+5732(component)s 6863(is)s 7079(brok)s 2(en)k 7806(to)s
+8052(that)s 8477(width.)s 0 11593(This)m 517(is)s 769(needed)s
+1546(basically)s 2491(to)s 2772(trigger)s 3509(paragraph)s 4564(breaking.)s
+5606(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6608(there)s 7183(is)s 7434(no)s 7769(equi)s 6(v)k 6(alent)k
+8855(of)s 0 11305(paragraph)m 1001(breaking)s 1879(in)s 2110(the)s
+2446(v)s 3(ertical)k 3201(direction,)s 4145(so)s 4398(horizontal)s
+5410(g)s 1(alle)k 3(ys)k 6122(do)s 6403(not)s
+6757(ha)s 4(v)k 3(e)k 7246(an)s 3(y)k
+7631(particular)s 8592(\207x)s 3(ed)k 0 11017(height.)m 762(Instead,)s
+1559(each)s 2054(component)s 3178(has)s 3548(its)s 3824(o)s 6(wn)k
+4288(indi)s 6(vidual)k 5307(height.)s 480 10643(When)m 1096(tw)s 2(o)k
+1492(objects)s 2206(are)s 2539(separated)s 3485(by)s 220 fnt35
+3766 10640(/)m 240 fnt82 3830 10643(,)m 3923(the)s 3(y)k
+4372(are)s 4705(assigned)s 5573(the)s 5908(same)s 6441(width)s
+7029(\(Section)s 7868(2.7\),)s 8340(and)s 8730(this)s 0 10355(holds)m
+581(true)s 1020(e)s 6(v)k 3(en)k 1531(if)s
+1760(the)s 2119(tw)s 2(o)k 2541(objects)s 3280(are)s
+3639(subsequently)s 4954(separated)s 5926(by)s 6231(being)s 6828(promoted)s
+7814(into)s 8251(dif)s 6(ferent)k 0 10067(tar)m 4(gets.)k
+788(F)s 3(or)k 1169(e)s 3(xample,)k 2074(tw)s 2(o)k
+2476(aligned)s 3229(equations)s 4189(will)s 4606(ha)s 4(v)k 3(e)k
+5099(the)s 5439(same)s 5977(width,)s 6621(and)s 7016(hence)s
+7622(their)s 8110(alignment)s 0 9779(will)m 437(be)s 731(preserv)s 3(ed,)k
+1776(e)s 6(v)k 3(en)k 2287(if)s 2516(the)s 3(y)k
+2991(appear)s 3699(in)s 3954(dif)s 6(ferent)k 4841(columns)s
+5714(or)s 5985(pages.)s 6706(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7677(e)s 6(v)k 3(en)k 8189(though)s 220 fnt35
+8924 9776(&)m 240 fnt82 0 9491(aligns)m 635(the)s 996(marks)s
+1644(of)s 1928(its)s 2217(tw)s 2(o)k 2640(parameters,)s
+3807(it)s 4012(does)s 4515(not)s 4894(assign)s 5562(them)s
+6113(a)s 6292(common)s 7200(height.)s 7975(This)s 8464(means)s
+0 9203(that)m 416(the)s 762(height)s 1417(of)s 1686(an)s 3(y)k
+2081(component)s 3202(of)s 3471(a)s 3634(horizontal)s 4656(g)s 1(alle)k 3(y)k
+5288(promoted)s 6260(into)s 6683(one)s 7083(tar)s 4(get)k
+7679(does)s 8167(not)s 8530(af)s 6(fect)k 0 8915(the)m
+362(height)s 1034(consumed)s 2078(by)s 2386(the)s 2748(components)s
+3971(promoted)s 4960(into)s 5400(an)s 3(y)k 5811(other)s
+6376(tar)s 4(get.)k 7094(The)s 7536(other)s 8102(horizontal)s
+0 8627(concatenation)m 1392(operator)s 9(,)k 220 fnt35 2293 8624(|)m
+240 fnt82 2330 8627(,)m 2444(does)s 2941(assign)s 3604(a)s
+3777(common)s 4679(height)s 5344(to)s 5590(its)s 5874(tw)s 2(o)k
+6291(parameters;)s 7457(b)s 4(ut)k 7826(sequences)s 8855(of)s
+0 8339(objects)m 728(separated)s 1688(by)s 1982(this)s 2378(operator)s
+3234(cannot)s 3932(be)s 4214(the)s 4562(components)s 5770(of)s
+6041(a)s 6207(horizontal)s 7231(g)s 1(alle)k 3(y)k 15(.)k
+480 7965(Lout)m 985(is)s 1187(able)s 1633(to)s 1864(read)s
+2325(v)s 3(ertical)k 3084(g)s 1(alle)k 3(ys)k
+3800(one)s 4194(paragraph)s 5199(at)s 5424(a)s 5582(time;)s
+6110(in)s 6345(this)s 6733(w)s 2(ay)k 7176(it)s
+7360(processes)s 8319(the)s 8659(doc)s 8998(-)s 0 7677(ument)m
+660(in)s 906(small)s 1481(chunks,)s 2270(ne)s 6(v)k 3(er)k
+2855(holding)s 3642(more)s 4192(than)s 4664(a)s 4833(fe)s 6(w)k
+5242(pages)s 5840(in)s 6086(memory)s 6940(at)s 7175(an)s 3(y)k
+7575(time.)s 8166(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+0 7389(horizontal)m 1024(g)s 1(alle)k 3(ys)k 1748(are)s
+2095(al)s 2(w)k 2(ays)k 2806(read)s 3275(in)s
+3518(completely)s 15(,)k 4672(so)s 4938(the)s 3(y)k
+5401(should)s 6098(not)s 6464(be)s 6746(e)s 3(xtremely)k
+7752(long.)s 480 7015(In)m 744(principle)s 1658(Lout)s 2178(should)s
+2884(be)s 3174(able)s 3637(to)s 3884(h)s 1(yphenate)k
+4932(the)s 5288(components)s 6505(of)s 6784(horizontal)s 7817(g)s 1(alle)k 3(ys)k
+8550(when)s 0 6727(the)m 3(y)k 463(are)s 810(simple)s
+1503(w)s 2(ords,)k 2193(b)s 4(ut)k 2555(this)s
+2951(is)s 3161(not)s 3527(implemented)s 4833(at)s 5065(present.)s
+480 6353(In)m 738(an)s 1023(ideal)s 1544(w)s 2(orld,)k
+2209(e)s 6(v)k 3(ery)k 2787(paragraph)s 3802(w)s 2(ould)k
+4459(be)s 4743(treated)s 5452(as)s 5704(a)s 5872(horizontal)s
+6898(g)s 1(alle)k 3(y)k 15(.)k 7629(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+8591(to)s 8833(do)s 0 6065(so)m 256(in)s 488(practice)s
+1288(w)s 2(ould)k 1932(be)s 2203(too)s 2551(slo)s 6(w)k
+3040(and)s 3433(w)s 2(ould)k 4077(lead)s 4522(to)s
+4750(e)s 3(xcessi)k 6(v)k 3(e)k 5699(clumsiness)s
+6788(in)s 7020(notation,)s 7900(so)s 8155(at)s 8376(present)s
+0 5777(Lout)m 509(has)s 876(tw)s 2(o)k 1282(competing)s
+2342(mechanisms)s 3572(in)s 3811(this)s 4204(area:)s 4764(the)s
+5108(b)s 4(uilt-in)k 5861(paragraph)s 6871(break)s 2(er)k
+7641(with)s 8120(its)s 8392(limited)s 0 5489(set)m 314(of)s
+573(options)s 1318(as)s 1556(gi)s 6(v)k 3(en)k
+2124(under)s 2718(the)s 220 fnt35 3054 5486(@Break)m 240 fnt82
+3899 5489(operator)m 9(,)k 4781(and)s 5173(horizontal)s 6186(g)s 1(alle)k 3(ys.)k
+7011(As)s 7317(the)s 7653(e)s 3(xample)k 8504(abo)s 3(v)k 3(e)k
+0 5201(sho)m 6(ws,)k 700(horizontal)s 1725(g)s 1(alle)k 3(ys)k
+2449(are)s 2797(in)s 3040(principle)s 3946(capable)s 4733(of)s
+5004(implementing)s 6386(man)s 3(y)k 6969(more)s 7517(paragraph)s
+8531(styles)s 0 4913(than)m 470(the)s 820(b)s 4(uilt-in)k
+1578(paragraph)s 2593(break)s 2(er)k 3369(could)s 3961(e)s 6(v)k 3(er)k
+4425(hope)s 4949(to)s 5190(do.)s 5596(The)s 6026(recommended)s
+7441(practical)s 8319(strate)s 3(gy)k 0 4625(is)m 221(to)s
+472(use)s 858(the)s 1218(b)s 4(uilt-in)k 1985(paragraph)s
+3010(break)s 2(er)k 3795(most)s 4332(of)s 4614(the)s
+4974(time,)s 5516(and)s 5932(switch)s 6624(to)s 6875(horizontal)s
+7910(g)s 1(alle)k 3(ys)k 8646(only)s 0 4337(for)m
+338(occasional)s 1402(tricks,)s 2039(such)s 2535(as)s 2785(paragraphs)s
+3885(with)s 4367(drop)s 4859(capitals,)s 5695(circular)s 6483(outlines,)s
+7347(etc.)s 240 fnt84 0 3544(2.10.)m 591(Optimal)s 1495(galley)s
+2149(br)s 4(eaking)k 240 fnt82 480 3067(As)m 814(e)s 3(xplained)k
+1817(in)s 2077(Section)s 2869(2.7,)s 3294(the)s 3659(components)s
+4885(of)s 5174(a)s 5357(g)s 1(alle)k 3(y)k
+6009(are)s 6373(promoted)s 7366(one)s 7786(by)s 8097(one)s
+8517(into)s 8960(a)s 0 2779(tar)m 4(get.)k 703(When)s
+1332(space)s 1919(runs)s 2382(out)s 2748(there,)s 3332(the)s
+3680(g)s 1(alle)k 3(y)k 4314(searches)s 5174(for)s
+5512(a)s 5678(ne)s 6(w)k 6125(tar)s 4(get)k
+6724(and)s 7128(promotion)s 8182(resumes.)s 480 2405(This)m 977(process)s
+1766(is)s 1997(e)s 3(xactly)k 2759(analogous)s 3802(to)s
+4062(placing)s 4840(w)s 2(ords)k 5495(onto)s 5995(a)s
+6182(line)s 6617(until)s 7131(space)s 7739(runs)s 8223(out,)s
+8657(then)s 0 2117(mo)m 3(ving)k 776(to)s 1008(another)s
+1778(line.)s 2293(But,)s 2740(as)s 2983(we)s 3311(kno)s 6(w)k 15(,)k
+3923(that)s 4335(simple)s 5021(method)s 5790(is)s 5993(inferior)s
+6762(to)s 6994(the)s 7335(optimal)s 8113(paragraph)s 0 1829(breaking)m
+893(used)s 1393(by)s 1690(Lout)s 2206(\(copied)s 2984(from)s
+3511(the)s 3863(T)s 3959 1781(E)m 4067 1829(X)m 4299(system\),)s
+5152(which)s 5797(e)s 3(xamines)k 6752(the)s 7103(entire)s
+7705(paragraph)s 8722(and)s 0 1541(determines)m 1099(the)s 1447(most)s
+1972(e)s 6(v)k 3(en)k 2472(assignment)s 3608(of)s
+3879(w)s 2(ords)k 4513(to)s 4752(lines.)s 480 1167(Lout)m
+1050(of)s 6(fers)k 240 fnt83 1709 1169(optimal)m 2559(galle)s 7(y)k
+3250(br)s 8(eaking)k 240 fnt82 4087 1167(,)m 4252(the)s
+4659(equi)s 6(v)k 6(alent)k 5761(for)s 6157(g)s 1(alle)k 3(ys)k
+6940(of)s 7269(optimal)s 8113(paragraph)s 0 879(breaking.)m 1020(Optimal)s
+1878(g)s 1(alle)k 3(y)k 2532(breaking)s 3442(can)s
+3851(reduce)s 4564(the)s 4932(size)s 5378(of)s 5669(ugly)s
+6169(blank)s 6782(spaces)s 7477(at)s 7729(the)s 8097(bottom)s
+8855(of)s 0 591(pages)m 596(preceding)s 1592(lar)s 4(ge)k
+2121(unbreakable)s 3346(displays,)s 4237(sometimes)s 5310(quite)s 5844(dramatically)s 15(.)k
+480 217(Optimal)m 1337(g)s 1(alle)k 3(y)k 1990(breaking)s
+2900(is)s 3129(applied)s 3910(to)s 4169(each)s 4683(g)s 1(alle)k 3(y)k 15(,)k
+5375(horizontal)s 6418(or)s 6696(v)s 3(ertical,)k 7535(that)s
+7972(possesses)s 8960(a)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 41
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(2.10.)m 574(Optimal)s 1418(galle)s 7(y)k
+2051(br)s 8(eaking)k 240 fnt84 8833 13840(35)m 240 fnt82
+0 13205(parameter)m 1036(or)s 1317(nested)s 2008(symbol)s 2790(called)s
+220 fnt35 3440 13202(@Optimiz)m 3(e)k 240 fnt82 4599 13205(whose)m
+5290(v)s 6(alue)k 5880(is)s 220 fnt35 6112 13202(Y)m 30(es)k
+240 fnt82 6453 13205(.)m 6639(Lik)s 2(e)k 7153(cross)s
+7717(referencing,)s 8934(it)s 0 12917(tak)m 2(es)k 539(tw)s 2(o)k
+947(runs)s 1409(to)s 1646(ha)s 4(v)k 3(e)k
+2145(ef)s 6(fect.)k 2844(On)s 3192(the)s 3538(\207rst)s
+3968(run,)s 4392(Lout)s 4902(records)s 5655(the)s 6001(sizes)s
+6514(of)s 6784(the)s 7130(g)s 1(alle)k 3(y')k 13(s)k
+7918(components)s 0 12629(and)m 393(g)s 1(aps,)k 927(and)s
+1319(also)s 1746(the)s 2083(space)s 2658(a)s 4(v)k 6(ailable)k
+3555(at)s 3776(each)s 4259(of)s 4519(its)s 4783(tar)s 4(gets.)k
+5568(At)s 5856(end)s 6248(of)s 6508(run)s 6873(this)s
+7257(information)s 8431(is)s 8629(used)s 0 12341(to)m 232(\207nd)s
+656(an)s 932(optimal)s 1709(break,)s 2340(which)s 2975(is)s
+3177(written)s 3903(to)s 4135(the)s 4475(cross-reference)s 5981(database.)s
+6961(On)s 7303(the)s 7644(second)s 8360(run,)s 8778(the)s
+0 12053(optimal)m 785(break)s 1377(is)s 1587(retrie)s 6(v)k 3(ed)k
+2484(and)s 2888(used.)s 480 11679(Considering)m 1727(that)s 2170(this)s
+2590(process)s 3383(must)s 3932(cope)s 4465(with)s 4971(\210oating)s
+5780(\207gures,)s 6562(ne)s 6(w)k 7034(page)s 7566(and)s
+7995(conditional)s 0 11391(ne)m 6(w)k 460(page)s 982(symbols,)s
+1901(breaks)s 2589(for)s 2941(ne)s 6(w)k 3402(chapters,)s
+4318(and)s 4736(e)s 6(v)k 4(olving)k 5631(documents,)s
+6788(it)s 6994(is)s 7218(surprisingly)s 8428(rob)s 4(ust.)k
+0 11103(If)m 250(it)s 463(does)s 974(go)s 1287(badly)s
+1894(wrong,)s 2634(remo)s 3(ving)k 3621(\207le)s 220 fnt35
+4003 11100(lout.li)m 240 fnt82 4580 11103(then)m 5069(running)s 5888(Lout)s
+6421(twice)s 7014(without)s 7826(changing)s 8778(the)s 0 10815(document)m
+1036(may)s 1534(solv)s 3(e)k 2125(the)s 2505(problem.)s
+3498(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+4491(cases)s 5078(are)s 5457(kno)s 6(wn)k 6194(where)s
+6866(the)s 7246(optimization)s 8544(ne)s 6(v)k 3(er)k
+0 10527(con)m 9(v)k 3(er)k 4(ges.)k 1151(These)s
+1812(are)s 2193(usually)s 2972(related)s 3713(to)s 3986(\207gures)s
+4721(and)s 5159(footnotes)s 6134(whose)s 6836(anchor)s 7581(points)s
+8251(f)s 2(all)k 8655(near)s 0 10239(page)m 508(boundaries.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 42
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+480 fnt84 0 12955(Chapter)m 1819(3.)s 2400(Pr)s 8(ede\207ned)k
+4711(symbols)s 240 fnt84 0 11691(3.1.)m 471(@Begin)s 1335(and)s
+1776(@End)s 240 fnt82 480 11214(The)m 905(body)s 1435(of)s
+1702(a)s 1864(symbol)s 220 fnt35 2620 11211(@Sym)m 240 fnt82
+3324 11214(may)m 3786(be)s 4064(enclosed)s 4955(in)s 220 fnt35
+5194 11211(@Begin)m 240 fnt82 6019 11214(and)m 220 fnt35 6419 11211(@End)m
+7076(@Sym)s 240 fnt82 7780 11214(instead)m 8511(of)s 8778(the)s
+0 10926(more)m 547(usual)s 1107(braces:)s 220 fnt35 480 10475(def @Section)m
+480 10187( named @Title {})m 480 9899( r)m -3(ight @Body)k 480 9611(@Begin)m 480 9323( @Title //2v @Body)m
+480 9035(@End @Section)m 240 fnt82 0 8580(The)m 3(y)k 543(may)s
+1009(also)s 1447(enclose)s 2220(the)s 2568(right)s 3079(or)s
+3338(body)s 3872(parameter)s 4886(of)s 5157(a)s 5323(symbol)s
+6083(in)s 9(v)k 4(ocation:)k 220 fnt35 480 8079(@Chapter)m
+480 7791( @Title { Introduction })m 480 7503(@Begin)m 480 7215(This subject needs no introduction.)m 480 6927(@End @Chapter)m 240 fnt82
+0 6431(Apart)m 651(from)s 1222(their)s 1767(utility)s 2438(as)s
+2735(documentation)s 4262(aids,)s 4801(these)s 5396(forms)s 6051(allo)s 6(w)k
+6677(Basser)s 7422(Lout)s 7981(to)s 8268(pinpoint)s 0 6143(mismatched)m
+1206(braces,)s 1915(which)s 2549(can)s 2930(otherwise)s 3908(create)s
+4525(total)s 4996(ha)s 4(v)k 4(oc.)k 5716(F)s 3(or)k
+6098(this)s 6486(reason,)s 7209(the)s 3(y)k 7664(should)s
+8353(enclose)s 0 5855(the)m 339(major)s 946(parts)s 1451(of)s
+1712(documents,)s 2846(such)s 3333(as)s 3573(chapters)s 4410(and)s
+4804(sections.)s 5728(Note)s 6240(that)s 6648(braces)s 7299(cannot)s
+7987(be)s 8259(replaced)s 0 5567(by)m 220 fnt35 294 5564(@Begin)m
+240 fnt82 1123 5567(and)m 220 fnt35 1527 5564(@End)m 240 fnt82
+2188 5567(in)m 2431(general.)s 240 fnt84 0 4774(3.2.)m 471(Concatenation)s
+2015(symbols)s 2893(and)s 3334(paragraphs)s 240 fnt82 480 4297(There)m
+1093(are)s 1440(ten)s 1789(concatenation)s 3174(symbols,)s 4079(in)s
+4322(three)s 4855(f)s 2(amilies:)k 220 fnt35 480 3756(/)m
+962(^/)s 1547(//)s 2012(^//)s 240 fnt82 2580 3759(V)m 26(ertical)k
+3377(concatenation)s 220 fnt35 480 3468(|)m 962(^|)s 1547(||)s
+2012(^||)s 240 fnt82 2580 3471(Horizontal)m 3657(concatenation)s 220 fnt35
+480 3180(&)m 962(^&)s 240 fnt82 2580 3183(In-paragraph)m 3871(concatenation)s
+0 2642(Each)m 587(symbol)s 1399(produces)s 2367(an)s 2702(object)s
+3398(which)s 4093(combines)s 5113(together)s 6008(the)s 6409(tw)s 2(o)k
+6871(parameters.)s 8134(The)s 8615(right)s 0 2354(parameter)m 1014(must)s
+1539(be)s 1821(separated)s 2781(from)s 3305(the)s 3653(symbol)s
+4413(by)s 4707(at)s 4939(least)s 5436(one)s 5838(white)s
+6425(space)s 7012(character)s 13(.)k 480 1980(The)m 906(v)s 3(ertical)k
+1670(concatenation)s 3052(symbol)s 220 fnt35 3809 1977(/)m 240 fnt82
+3930 1980(places)m 4575(its)s 4848(left)s 5222(parameter)s 6233(abo)s 3(v)k 3(e)k
+6852(its)s 7125(right)s 7633(parameter)s 8644(with)s 0 1692(their)m
+519(column)s 1317(marks)s 1975(aligned.)s 2866(If)s 3119(one)s
+3544(parameter)s 4581(has)s 4973(more)s 5543(column)s 6341(marks)s
+6999(than)s 7491(the)s 7862(other)s 9(,)k 8474(empty)s
+0 1404(columns)m 868(are)s 1221(inserted)s 2041(at)s 2279(the)s
+2633(right)s 3150(to)s 3395(equalize)s 4253(the)s 4607(numbers.)s
+5601(The)s 6035(v)s 6(ariant)k 220 fnt35 6758 1401(//)m
+240 fnt82 6949 1404(ignores)m 7710(column)s 8491(marks)s 0 1116(and)m
+404(left-justi\207es)s 1594(the)s 1942(objects.)s 480 742(The)m 896(horizontal)s
+1908(concatenation)s 3280(symbols)s 220 fnt35 4117 739(|)m 240 fnt82
+4201 742(and)m 220 fnt35 4593 739(||)m 240 fnt82 4734 742(are)m
+5069(horizontal)s 6080(analogues)s 7076(of)s 220 fnt35 7334 739(/)m
+240 fnt82 7446 742(and)m 220 fnt35 7837 739(//)m 240 fnt82
+7962 742(:)m 8116(the)s 3(y)k 8566(place)s 192 fnt84
+4439 2(36)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 43
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.2.)m 454(Concatenation)s 1918(symbols)s 2744(and)s
+3170(par)s 3(a)k 2(gr)k 3(aphs)k 240 fnt84
+8831 13840(37)m 240 fnt82 0 13205(their)m 488(tw)s 2(o)k
+888(parameters)s 1976(side)s 2407(by)s 2692(side,)s 3174(with)s
+3646(ro)s 6(w)k 4056(mark)s 4599(alignment)s 5605(or)s
+5854(top-justi\207cation)s 7414(respecti)s 6(v)k 3(ely)k 15(.)k
+8698(The)s 0 12917(in-paragraph)m 1278(concatenation)s 2663(symbol)s 220 fnt35
+3423 12914(&)m 240 fnt82 3625 12917(produces)m 4540(horizontal)s 5564(concatenation)s
+6949(within)s 7617(a)s 7783(paragraph;)s 8850(its)s 0 12629(special)m
+718(properties)s 1724(are)s 2071(treated)s 2778(in)s 3021(detail)s
+3606(at)s 3838(the)s 4186(end)s 4590(of)s 4861(this)s
+5257(section.)s 480 12255(The)m 908(concatenation)s 2293(symbols)s 3142(in)s
+3385(an)s 3(y)k 3782(one)s 4184(f)s 2(amily)k
+4859(are)s 240 fnt83 5206 12257(mutually)m 6099(associative)s 240 fnt82
+7154 12255(,)m 7261(which)s 7903(means)s 8565(that)s 220 fnt35
+480 11754({)m 240 fnt83 664 11759(x)m 220 fnt35 890 11754(|)m
+240 fnt83 927 11759(p)m 1160(y)s 220 fnt35 1382 11754(})m
+1566(|)s 240 fnt83 1603 11759(q)m 1839(z)s 240 fnt82
+0 11258(is)m 210(al)s 2(w)k 2(ays)k 921(the)s
+1269(same)s 1816(as)s 240 fnt83 480 10762(x)m 220 fnt35
+706 10757(|)m 240 fnt83 743 10762(p)m 220 fnt35 976 10757({)m
+240 fnt83 1160 10762(y)m 220 fnt35 1382 10757(|)m 240 fnt83
+1419 10762(q)m 1655(z)s 220 fnt35 1866 10757(})m 240 fnt82
+0 10261(for)m 339(an)s 3(y)k 737(objects)s 240 fnt83
+1466 10263(x)m 240 fnt82 1572 10261(,)m 240 fnt83 1680 10263(y)m
+240 fnt82 1782 10261(,)m 1891(and)s 240 fnt83 2296 10263(z)m
+240 fnt82 2387 10261(,)m 2495(an)s 3(y)k 2893(g)s 1(aps)k
+240 fnt83 3383 10263(p)m 240 fnt82 3558 10261(and)m 240 fnt83
+3963 10263(q)m 240 fnt82 4140 10261(\(de\207ned)m 4983(belo)s 6(w\),)k
+5750(and)s 6155(an)s 3(y)k 6553(choice)s 7234(of)s
+220 fnt35 7506 10258(|)m 240 fnt82 7543 10261(,)m 220 fnt35
+7652 10258(^|)m 240 fnt82 7792 10261(,)m 220 fnt35 7900 10258(||)m
+240 fnt82 7994 10261(,)m 8102(and)s 220 fnt35 8507 10258(^||)m
+240 fnt82 8704 10261(.)m 8870(In)s 0 9973(practice)m 803(we)s
+1130(al)s 2(w)k 2(ays)k 1833(omit)s 2323(such)s
+2811(braces,)s 3520(since)s 4059(the)s 3(y)k 4513(are)s
+4852(redundant)s 5861(and)s 6257(can)s 6638(be)s 6912(misleading.)s
+8117(The)s 8536(result)s 0 9685(of)m 277(the)s 631(complete)s
+1569(sequence)s 2508(of)s 2786(concatenations)s 4264(will)s 4696(be)s
+4984(called)s 5619(the)s 240 fnt83 5973 9687(whole)m 6604(concatenation)s
+8020(object)s 240 fnt82 8608 9685(,)m 8722(and)s 0 9397(the)m
+348(objects)s 1076(which)s 1718(mak)s 2(e)k 2290(it)s
+2482(up)s 2775(will)s 3201(be)s 3483(called)s 4111(the)s
+240 fnt83 4459 9399(components)m 240 fnt82 5598 9397(.)m 480 9023(One)m
+938(mark)s 1494(is)s 1708(designated)s 2793(as)s 3047(the)s
+240 fnt83 3398 9025(principal)m 4339(mark)s 240 fnt82 4835 9023(,)m
+4946(usually)s 5695(the)s 6047(mark)s 6602(of)s 6877(the)s
+7229(\207rst)s 7664(component.)s 8896(A)s 0 8735(later)m 486(mark)s
+1042(can)s 1435(be)s 1721(chosen)s 2447(for)s 2789(this)s
+3189(honour)s 3932(by)s 4230(attaching)s 220 fnt35 5163 8732(^)m
+240 fnt82 5333 8735(to)m 5576(the)s 5928(preceding)s 6928(concatenation)s
+8317(symbol.)s 0 8447(See)m 401(Section)s 1175(3.9)s 1526(for)s
+1864(e)s 3(xamples.)k 480 8073(A)m 240 fnt83 712 8075(gap)m
+240 fnt82 1065 8073(,)m 1175(specifying)s 2227(the)s 2578(distance)s
+3420(between)s 4277(the)s 4627(tw)s 2(o)k 5040(parameters,)s
+6197(may)s 6666(follo)s 6(w)k 7341(an)s 3(y)k
+7741(concatenation)s 0 7785(symbol.)m 866(There)s 1475(may)s 1937(be)s
+2215(no)s 2504(spaces)s 3176(between)s 4026(a)s 4188(concatenation)s
+5569(symbol)s 6325(and)s 6726(its)s 6998(g)s 1(ap.)k
+7503(A)s 7729(missing)s 8522(g)s 1(ap)k 8916(is)s
+0 7497(tak)m 2(en)k 569(to)s 803(be)s 220 fnt35
+1081 7494(0ie)m 240 fnt82 1365 7497(.)m 1524(The)s 1948(g)s 1(ap)k
+2341(is)s 2546(ef)s 6(fecti)k 6(v)k 3(ely)k
+3601(a)s 3762(third)s 4267(parameter)s 5276(of)s 5542(the)s
+5886(concatenation)s 7266(symbol,)s 8074(and)s 8473(it)s 8660(may)s
+0 7209(be)m 289(an)s 579(arbitrary)s 1462(object)s 2113(pro)s 3(vided)k
+3026(that)s 3452(it)s 3651(e)s 6(v)k 6(aluates)k
+4586(to)s 4833(a)s 5006(juxtaposition)s 6319(of)s 6598(simple)s
+7298(w)s 2(ords.)k 8052(In)s 8316(general,)s 0 6921(the)m
+348(g)s 1(ap)k 746(must)s 1271(be)s 1553(enclosed)s
+2448(in)s 2691(braces,)s 3408(lik)s 2(e)k 3820(this:)s
+220 fnt35 480 6420(//{ @Style&&m)m 3(ystyle @Open { @T)k 26(opMargin } })k 240 fnt82
+0 5921(b)m 4(ut)k 349(the)s 684(braces)s 1332(may)s
+1785(be)s 2053(omitted)s 2828(when)s 3391(the)s 3726(object)s
+4356(is)s 4553(a)s 4706(juxtaposition)s 5999(of)s 6256(simple)s
+6936(w)s 2(ords)k 7557(or)s 7803(an)s 8072(in)s 9(v)k 4(ocation)k
+0 5633(of)m 271(a)s 437(symbol)s 1197(without)s 1988(parameters,)s
+3142(as)s 3392(in)s 220 fnt35 3635 5630(//0.3vx)m 240 fnt82
+4340 5633(and)m 220 fnt35 4744 5630(||@Indent)m 240 fnt82 5687 5633(.)m
+480 5259(A)m 704(g)s 1(ap)k 1096(consists)s 1898(of)s
+2162(a)s 2322(length)s 2971(plus)s 3415(a)s 3574(g)s 1(ap)k
+3966(mode)s 4548(plus)s 4992(an)s 5268(optional)s 6101(indication)s
+7108(of)s 7373(unbreakability)s 15(.)k 8896(A)s 240 fnt83
+0 4973(length)m 240 fnt82 659 4971(is)m 875(represented)s 2040(by)s
+2341(an)s 2630(decimal)s 3447(number)s 4244(\(which)s 4972(may)s
+5444(not)s 5816(be)s 6104(ne)s 3(g)k 1(ati)k 6(v)k 3(e\))k
+7036(follo)s 6(wed)k 7944(by)s 8244(a)s 8416(unit)s
+8855(of)s 0 4683(measurement.)m 1437(F)s 3(or)k 1825(e)s 3(xample,)k
+220 fnt35 2738 4680(2.5c)m 240 fnt82 3207 4683(represents)m 4225(the)s
+4572(length)s 5226(2.5)s 5571(centimetres.)s 6834(Figure)s 7513(3.1)s
+7847(gi)s 6(v)k 3(es)k 8393(the)s 8740(full)s
+0 4395(selection)m 906(of)s 1177(units)s 1693(of)s 1964(measurement.)s
+480 4021(After)m 1045(the)s 1396(length)s 2054(comes)s 2718(an)s
+3004(optional)s 240 fnt83 3846 4023(gap)m 4261(mode)s 240 fnt82
+4773 4021(,)m 4883(which)s 5528(is)s 5740(a)s 5909(single)s
+6539(letter)s 7090(follo)s 6(wing)k 8070(the)s 8421(length,)s
+0 3733(indicating)m 1031(ho)s 6(w)k 1514(the)s 1884(length)s
+2562(is)s 2794(to)s 3055(be)s 3359(measured.)s 4462(As)s
+4801(sho)s 6(wn)k 5500(in)s 5765(Figure)s 6468(3.2,)s
+6897(with)s 7401(edge-to-edge)s 8728(g)s 1(ap)k 0 3445(mode)m
+603(the)s 967(length)s 240 fnt83 1638 3447(l)m 240 fnt82
+1780 3445(is)m 2006(measured)s 2996(from)s 3536(the)s 3900(trailing)s
+4658(edge)s 5181(of)s 5468(the)s 5832(\207rst)s 6279(object)s
+6939(to)s 7194(the)s 7558(leading)s 8331(edge)s 8855(of)s
+0 3157(the)m 347(second.)s 1174(Edge-to-edge)s 2516(is)s 2725(the)s
+3071(def)s 2(ault)k 3790(mode:)s 4486(the)s 220 fnt35
+4833 3154(e)m 240 fnt82 5005 3157(may)m 5469(be)s 5749(omitted.)s
+6642(Hyphenation)s 7934(g)s 1(ap)k 8330(mode)s 8916(is)s
+0 2869(similar)m 9(,)k 760(e)s 3(xcept)k 1441(as)s
+1691(e)s 3(xplained)k 2676(at)s 2908(the)s 3256(end)s
+3660(of)s 3931(this)s 4327(section.)s 480 2495(Mark-to-mark,)m 1957(o)s 3(v)k 3(erstrik)k 2(e,)k
+3028(and)s 3450(k)s 2(erning)k 4249(measure)s 5118(the)s
+5484(length)s 6156(from)s 6698(the)s 7063(last)s 7471(mark)s
+8041(of)s 8329(the)s 8695(\207rst)s 0 2207(object)m 648(to)s
+892(the)s 1245(\207rst)s 1680(mark)s 2237(of)s 2513(the)s
+2865(second.)s 3699(In)s 3960(the)s 4312(case)s 4784(of)s
+5060(mark-to-mark,)s 6497(if)s 6719(the)s 7072(length)s 7731(is)s
+7946(too)s 8310(small)s 8887(to)s 0 1919(pre)m 6(v)k 3(ent)k
+771(the)s 1123(objects)s 1855(almost)s 2556(o)s 3(v)k 3(erlapping,)k
+3804(it)s 4000(is)s 4214(widened)s 5087(until)s 5584(the)s 3(y)k
+6051(no)s 6348(longer)s 7023(do.)s 7431(\(The)s 7942(e)s 3(xtra)k
+240 fnt83 8480 1921(l/10)m 240 fnt82 8916 1919(is)m 0 1631(not)m
+362(applied)s 1119(when)s 1690(plain)s 2220(te)s 3(xt)k
+2630(output)s 3298(is)s 3503(in)s 3741(ef)s 6(fect.\))k
+4520(K)s 6(erning)k 5346(also)s 5780(widens,)s 6560(with)s
+7037(the)s 7380(aim)s 7793(of)s 8059(pre)s 6(v)k 3(enting)k
+0 1343(the)m 372(mark)s 948(of)s 1243(either)s 1870(object)s
+2539(from)s 3087(o)s 3(v)k 3(erlapping)k 4301(the)s
+4673(other)s 5248(object;)s 5969(this)s 6389(mode)s 7001(is)s
+7235(used)s 7756(for)s 8119(subscripts)s 0 1055(and)m 404(superscripts.)s
+558 681(T)m 19(ab)k 4(ulation)k 1646(ignores)s 2419(the)s
+2785(\207rst)s 3234(object)s 3896(and)s 4318(places)s 4984(the)s
+5350(leading)s 6125(edge)s 6651(of)s 6940(the)s 7306(second)s
+8047(object)s 8709(at)s 8960(a)s 0 393(distance)m 240 fnt83
+842 395(l)m 240 fnt82 971 393(from)m 1498(the)s 1849(left)s
+2229(edge)s 2740(of)s 3014(the)s 3365(whole)s 4009(concatenation)s
+5397(object.)s 6148(It)s 6356(is)s 6569(the)s 6920(main)s
+7458(user)s 7919(of)s 8193(the)s 220 fnt35 8544 390(b)m
+240 fnt82 8722 393(and)m 220 fnt35 0 102(r)m 240 fnt82
+141 105(units)m 666(of)s 945(measurement;)s 2340(for)s 2686(e)s 3(xample,)k
+220 fnt35 3609 102(|1r)m -8(t)k 240 fnt82 3994 105(will)m
+4429(right-justify)s 5631(the)s 5988(follo)s 6(wing)k 6973(component,)s
+8153(and)s 220 fnt35 8566 102(|0.5r)m -8(t)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 44
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(38)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s gsave
+0 13282 translate
+240 fnt82 0 86 0 86 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhsp
+grestore
+
+grestore
+gsave
+0 13113 translate
+240 fnt82 0 169 0 60 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 13027 translate
+240 fnt82 0 86 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+170 13368 translate
+240 fnt82 169 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+220 fnt35 170 13116(c)m
+gsave
+339 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+509 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+679 13368 translate
+240 fnt82 8217 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+240 fnt82 679 13119(Centimetres.)m 170 0 0 0 240 288 60 8896 13368 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 86 0 86 240 288 60 9066 13282 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 169 0 60 240 288 60 9066 13113 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 13027 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12941 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 166 0 57 240 288 60 0 12775 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 12689 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 12775(i)m 240 fnt82
+679 12778(Inches.)m 0 86 0 86 240 288 60 9066 12941 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 166 0 57 240 288 60 9066 12775 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 12689 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12603 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 211 0 102 240 288 60 0 12392 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 12306 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 12437(p)m 240 fnt82 679 12440(Points)m
+1328(\()s 220 fnt35 1401 12437(72p)m 240 fnt82 1819 12440(=)m
+220 fnt35 2007 12437(1i)m 240 fnt82 2163 12440(\).)m 0 86 0 86 240 288 60 9066 12603 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 211 0 102 240 288 60 9066 12392 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 12306 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12220 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 204 0 96 240 288 60 0 12016 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 11930 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35
+170 12055(m)m 240 fnt82 679 12058(Ems)m 1155(\()s 220 fnt35
+1228 12055(12m)m 240 fnt82 1701 12058(=)m 220 fnt35 1889 12055(1i)m
+240 fnt82 2045 12058(\).)m 0 86 0 86 240 288 60 9066 12220 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 204 0 96 240 288 60 9066 12016 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 11930 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 11844 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 11341 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 11255 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 11678(f)m 240 fnt82
+679 11681(One)m 220 fnt35 1123 11678(f)m 240 fnt82 1229 11681(equals)m
+1879(the)s 2215(size)s 2631(of)s 2890(the)s 3226(current)s
+3950(font,)s 4431(as)s 4669(speci\207ed)s 5565(by)s 5847(the)s
+220 fnt35 6184 11678(@F)m 6(ont)k 240 fnt82 6884 11681(symbol)m
+7632(\(Section)s 8473(3.3\).)s 679 11393(This)m 1155(unit)s 1587(is)s
+1797(appropriate)s 2941(for)s 3279(lengths)s 4021(that)s 4439(should)s
+5136(change)s 5870(with)s 6352(the)s 6700(font)s 7145(size.)s
+0 86 0 86 240 288 60 9066 11844 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 11341 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 11255 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 11169 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 10666 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 10580 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 11003(s)m 240 fnt82 679 11006(One)m 220 fnt35
+1125 11003(s)m 240 fnt82 1279 11006(equals)m 1932(the)s 2271(preferred)s
+3194(g)s 1(ap)k 3582(between)s 4427(tw)s 2(o)k
+4828(w)s 2(ords)k 5453(in)s 5687(the)s 6025(current)s
+6752(font,)s 7235(as)s 7476(speci\207ed)s 8375(in)s 8608(the)s
+679 10718(de\207nition)m 1653(of)s 1924(the)s 2272(font,)s 2764(or)s
+3023(by)s 3317(the)s 220 fnt35 3665 10715(@Space)m 240 fnt82
+4562 10718(symbol)m 5322(\(Section)s 6175(3.4\).)s 0 86 0 86 240 288 60 9066 11169 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 10666 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 10580 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 10494 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 791 0 682 240 288 60 0 9703 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 9617 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 10328(v)m
+240 fnt82 679 10331(One)m 220 fnt35 1149 10328(v)m 240 fnt82
+1334 10331(equals)m 2011(the)s 2375(current)s 3126(g)s 1(ap)k
+3540(between)s 4410(lines)s 4927(introduced)s 6024(during)s 6717(paragraph)s
+7746(breaking,)s 8706(as)s 679 10043(speci\207ed)m 1574(by)s 1854(the)s
+220 fnt35 2188 10040(@Break)m 240 fnt82 3030 10043(symbol)m 3777(\(Section)s
+4616(3.4\).)s 5145(This)s 5607(unit)s 6026(is)s 6222(appropriate)s
+7352(for)s 7676(lengths,)s 8460(such)s 679 9755(as)m 929(the)s
+1277(spaces)s 1952(between)s 2806(paragraphs,)s 3962(which)s 4604(should)s
+5301(change)s 6035(with)s 6517(the)s 6865(inter)s 4(-line)k
+7791(g)s 1(ap.)k 0 86 0 86 240 288 60 9066 10494 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 791 0 682 240 288 60 9066 9703 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 9617 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 9531 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 0 9077 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 8991 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 9365(w)m 240 fnt82
+679 9368(One)m 220 fnt35 1167 9365(w)m 240 fnt82 1416 9368(equals)m
+2111(the)s 2493(width)s 3128(of)s 3432(the)s 3813(follo)s 6(wing)k
+4824(component,)s 6028(or)s 6320(its)s 6629(height)s 7321(if)s
+7571(the)s 7952(symbol)s 8746(is)s 679 9080(v)m 3(ertical)k
+1446(concatenation.)s 0 86 0 86 240 288 60 9066 9531 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 9066 9077 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 8991 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 8905 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 0 8451 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 8365 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 8739(b)m 240 fnt82 679 8742(One)m
+220 fnt35 1133 8739(b)m 240 fnt82 1305 8742(equals)m 1965(the)s
+2311(width)s 2912(of)s 3181(the)s 3527(whole)s 4166(concatenation)s
+5550(object,)s 6239(or)s 6496(its)s 6770(height)s 7427(if)s
+7642(the)s 7988(symbol)s 8746(is)s 679 8454(v)m 3(ertical)k
+1446(concatenation.)s 0 86 0 86 240 288 60 9066 8905 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 9066 8451 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 8365 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 8279 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 7776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 7690 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 8113(r)m 240 fnt82 679 8116(One)m
+220 fnt35 1176 8113(r)m 240 fnt82 1352 8116(equals)m 2057(one)s
+220 fnt35 2502 8113(b)m 240 fnt82 2718 8116(minus)m 3397(one)s
+220 fnt35 3842 8113(w)m 240 fnt82 3998 8116(.)m 4205(This)s
+4723(unit)s 5198(is)s 5451(used)s 5991(for)s 6371(centring,)s
+7304(and)s 7751(for)s 8132(left)s 8552(and)s 679 7828(right)m
+1190(justi\207cation.)s 0 86 0 86 240 288 60 9066 8279 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 7776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 7690 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 7604 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 215 0 106 240 288 60 0 7389 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 7303 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 7438(d)m 240 fnt82 679 7441(De)m 3(grees.)k
+1623(This)s 2099(unit)s 2531(may)s 2997(only)s 3477(be)s
+3759(used)s 4256(with)s 4738(the)s 220 fnt35 5086 7438(@Rotate)m
+240 fnt82 6007 7441(symbol.)m 0 86 0 86 240 288 60 9066 7604 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 215 0 106 240 288 60 9066 7389 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 7303 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 7217 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 0 6713 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 6627 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 7050(y)m 240 fnt82
+679 7053(One)m 220 fnt35 1129 7050(y)m 240 fnt82 1292 7053(equals)m
+1949(the)s 2292(current)s 3023(v)s 6(alue)k 3586(set)s
+3906(by)s 4195(the)s 220 fnt35 4538 7050(@YUnit)m 240 fnt82
+5347 7053(symbol)m 6102(\(Section)s 6950(3.6\).)s 7488(This)s 7959(unit)s
+8386(is)s 8590(not)s 679 6765(used)m 1176(internally)s 2145(by)s
+2439(Lout;)s 3003(it)s 3195(is)s 3405(included)s 4287(for)s
+4625(the)s 4973(con)s 9(v)k 3(enience)k 6213(of)s
+6484(application)s 7603(packages.)s 0 86 0 86 240 288 60 9066 7217 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 9066 6713 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 6627 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 6541 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 0 6037 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 5951 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+170 0 0 0 240 288 60 0 5951 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+220 fnt35 170 6374(z)m gsave
+170 5951 translate
+240 fnt82 169 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+339 5951 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+509 5951 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+240 fnt82
+679 6377(One)m 220 fnt35 1130 6374(z)m 240 fnt82 1290 6377(equals)m
+1948(the)s 2292(current)s 3024(v)s 6(alue)k 3588(set)s
+3909(by)s 4199(the)s 220 fnt35 4543 6374(@ZUnit)m 240 fnt82
+5341 6377(symbol)m 6097(\(Section)s 6946(3.6\).)s 7485(This)s 7957(unit)s
+8385(is)s 8590(not)s 679 6089(used)m 1176(internally)s 2145(by)s
+2439(Lout;)s 3003(it)s 3195(is)s 3405(included)s 4287(for)s
+4625(the)s 4973(con)s 9(v)k 3(enience)k 6213(of)s
+6484(application)s 7603(packages.)s 8217 0 0 0 240 288 60 679 5951 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+170 0 0 0 240 288 60 8896 5951 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 86 0 86 240 288 60 9066 6541 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 9066 6037 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 5951 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+240 fnt84 1231 5361(Figur)m 4(e)k
+1960(3.1.)s 2431(The)s 2886(thirteen)s 3750(units)s 4308(of)s
+4580(measur)s 4(ement)k 6016(pr)s 4(o)k 2(vided)k
+6982(by)s 7291(Lout.)s 240 fnt82 0 4724(will)m 426(centre)s
+1065(it.)s 480 4350(The)m 914(v)s 6(alue)k 220 fnt35
+1488 4347(|0r)m -8(t)k 240 fnt82 1871 4350(separating)m 2913(the)s
+3267(\207rst)s 3704(and)s 4115(second)s 4844(items)s 5418(in)s
+5667(a)s 5840(sequence)s 6779(of)s 7056(horizontally)s 8272(concate)s
+8998(-)s 0 4062(nated)m 572(objects)s 1296(is)s 1502(some)s 6(what)k
+2522(special)s 3236(in)s 3475(that)s 3889(it)s 4077(denotes)s
+4855(left)s 5228(justi\207cation)s 6409(of)s 6676(the)s 7020(object)s
+7660(to)s 7895(its)s 8167(left)s 8540(in)s 8778(the)s
+0 3774(a)m 4(v)k 6(ailable)k 902(space.)s 1590(This)s
+2059(is)s 2262(identical)s 3132(with)s 220 fnt35 3607 3771(|0ie)m
+240 fnt82 4001 3774(when)m 4570(the)s 4911(object)s 5548(to)s
+5780(the)s 6121(left)s 6491(also)s 6922(has)s 7285(the)s
+7626(principal)s 8523(mark;)s 0 3486(b)m 4(ut)k 354(when)s
+922(it)s 1105(does)s 1587(not,)s 220 fnt35 1991 3483(|0r)m -8(t)k
+240 fnt82 2360 3486(will)m 2777(cause)s 3356(the)s 3695(object)s
+4331(to)s 4561(the)s 4901(left)s 5269(to)s 5500(appear)s
+6188(further)s 6889(to)s 7119(the)s 7459(left)s 7827(than)s
+8288(it)s 8471(w)s 2(ould)k 0 3198(otherwise)m 985(ha)s 4(v)k 3(e)k
+1486(done,)s 2059(if)s 2276(space)s 2863(to)s 3102(do)s
+3395(so)s 3661(is)s 3871(a)s 4(v)k 6(ailable.)k
+480 2824(A)m 744(g)s 1(ap)k 1177(is)s 1421(optionally)s
+2480(concluded)s 3557(with)s 4073(an)s 4391(indication)s 5439(of)s
+5744(unbreakability)s 15(,)k 7252(which)s 7929(is)s 8173(a)s
+8374(letter)s 220 fnt35 8958 2821(u)m 240 fnt82 0 2536(appended)m
+976(to)s 1215(the)s 1563(g)s 1(ap.)k 2072(A)s
+2303(paragraph)s 3316(will)s 3742(ne)s 6(v)k 3(er)k
+4324(be)s 4607(brok)s 2(en)k 5327(at)s 5559(an)s
+5842(unbreakable)s 7068(g)s 1(ap,)k 7520(nor)s 7899(will)s
+8325(a)s 8492(g)s 1(alle)k 3(y)k 0 2248(be)m
+293(brok)s 2(en)k 1025(across)s 1684(tw)s 2(o)k
+2106(tar)s 4(gets)k 2800(at)s 3044(such)s 3551(a)s
+3729(g)s 1(ap.)k 4249(Basser)s 4958(Lout')s 13(s)k
+5631(implementation)s 7200(is)s 7421(slightly)s 8204(defecti)s 6(v)k 3(e)k
+0 1960(in)m 242(that)s 659(it)s 849(ignores)s 1603(an)s 3(y)k
+1999(unbreakable)s 3222(indication)s 4234(in)s 4476(the)s 4822(g)s 1(ap)k
+5219(separating)s 6253(the)s 6599(\207rst)s 7029(component)s 8151(promoted)s
+0 1672(into)m 425(an)s 3(y)k 822(tar)s 4(get)k
+1421(from)s 1945(the)s 2293(second.)s 480 1298(When)m 1111(tw)s 2(o)k
+1523(objects)s 2254(are)s 2603(separated)s 3566(only)s 4048(by)s
+4345(zero)s 4811(or)s 5072(more)s 5622(white)s 6211(space)s
+6801(characters)s 7821(\(spaces,)s 8634(tabs,)s 0 1010(ne)m 6(wlines,)k
+983(and)s 1420(formfeeds\),)s 2607(Lout)s 3152(inserts)s 220 fnt35
+3859 1007(&)m 240 fnt83 4001 1012(k)m 220 fnt35 4111 1007(s)m
+240 fnt82 4307 1010(between)m 5194(the)s 5575(tw)s 2(o)k
+6018(objects,)s 6835(where)s 240 fnt83 7508 1012(k)m 240 fnt82
+7711 1010(is)m 7954(the)s 8335(number)s 0 722(of)m 291(spaces.)s
+1100(Precisely)s 15(,)k 240 fnt83 2087 724(k)m 240 fnt82
+2278 722(is)m 2509(determined)s 3662(by)s 3977(discarding)s 5047(all)s
+5360(space)s 5968(characters)s 7007(and)s 7431(tabs)s 7888(that)s
+8327(precede)s 0 434(ne)m 6(wlines)k 903(\(these)s 1537(are)s
+1892(in)s 9(visible)k 2771(so)s 3045(are)s 3400(better)s
+4012(ignored\),)s 4937(then)s 5414(counting)s 6313(1)s 6477(for)s
+6823(each)s 7326(ne)s 6(wline,)k 8193(formfeed)s 0 146(or)m
+259(space,)s 897(and)s 1301(8)s 1468(for)s 1806(each)s
+2301(tab)s 2646(character)s 13(.)k 3671(The)s 4099(g)s 1(ap)k
+4497(will)s 4923(be)s 5205(unbreakable)s 6430(if)s 240 fnt83
+6647 148(k)m 240 fnt82 6817 146(is)m 7027(zero.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 45
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.2.)m 454(Concatenation)s 1918(symbols)s 2744(and)s
+3170(par)s 3(a)k 2(gr)k 3(aphs)k 240 fnt84
+8832 13840(39)m gsave
+1450 5884 translate
+240 fnt82 6166 7484 0 7484 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+0 6710(Edge-to-edge)m 220 fnt35 1786 6707(|)m 240 fnt83
+1843 6712(l)m 220 fnt35 1929 6707(e)m 240 fnt82 0 5558(Hyphenation)m
+220 fnt35 1786 5555(|)m 240 fnt83 1843 5560(l)m 220 fnt35
+1929 5555(h)m 240 fnt82 0 4406(Ov)m 3(erstrik)k 2(e)k
+220 fnt35 1786 4403(|)m 240 fnt83 1843 4408(l)m 220 fnt35
+1929 4403(o)m 240 fnt82 0 3254(Mark-to-mark)m 220 fnt35 1786 3251(|)m
+240 fnt83 1843 3256(l)m 220 fnt35 1929 3251(x)m 240 fnt82
+0 2102(K)m 6(erning)k 220 fnt35 1786 2099(|)m 240 fnt83
+1843 2104(l)m 220 fnt35 1929 2099(k)m 240 fnt82 0 950(T)m 19(ab)k 4(ulation)k
+220 fnt35 1786 947(|)m 240 fnt83 1843 952(l)m 220 fnt35
+1929 947(t)m gsave
+2764 0 translate
+240 fnt82 3402 7484 0 7484 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+567 6748 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 6634 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 6748 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 6634 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 6658 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 6658 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 6658 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 6658 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 1732 6455(l)m gsave
+567 5596 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 5482 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 5596 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 5482 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 5506 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 5506 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 5506 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 5506 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
+1732 5303(l)m gsave
+567 4444 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 4330 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 4444 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 4330 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 4297 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 4297 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 4297 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4297 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
+1590 4095(l)m
+gsave
+567 3242 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 3128 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 3242 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 3128 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 3095 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 3095 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 3095 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3095 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 975 2892(max\()m 180 fnt83 1383 2893(l,)m 1503(a+b+l/10)s
+180 fnt82 2205 2892(\))m gsave
+1247 3719 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3719 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 680 3719 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3719 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 3787(a)m gsave
+2551 3719 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 3719 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 3719 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 3719 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 3743(b)m
+gsave
+567 2090 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 1976 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 2090 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 1976 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 1943 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 1943 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 1943 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 1943 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 1203 1740(max\()m 180 fnt83 1611 1741(l,)m 1731(a,)s
+1891(b)s 180 fnt82 1977 1740(\))m gsave
+1247 2567 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 2567 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 680 2567 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 2567 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 2635(a)m
+gsave
+2551 2567 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 2567 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 2567 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 2567 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 2591(b)m gsave
+567 938 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 824 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 938 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 824 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 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 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 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 2268 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
+1587 532(l)m gsave
+3402 234 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 234 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 234 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 234 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 23(curr)m 6(ent)k 1759(bound)s
+
+grestore
+end end restore
+grestore
+2063 5294(Figur)m 4(e)k 2792(3.2.)s 3263(The)s 3718(six)s
+4054(gap)s 4480(modes)s 5185(pr)s 4(o)k 2(vided)k
+6151(by)s 6460(Lout.)s 240 fnt82 480 4655(A)m 724(sequence)s
+1672(of)s 1958(tw)s 2(o)k 2383(or)s 2657(more)s
+3219(objects)s 3962(separated)s 4936(by)s 220 fnt35 5245 4652(&)m
+240 fnt82 5462 4655(symbols)m 6326(is)s 6551(a)s 240 fnt83
+6732 4657(par)m 3(a)k 2(gr)k 3(aph)k 240 fnt82
+7745 4655(.)m 7924(Lout)s 8451(breaks)s 0 4367(paragraphs)m 1100(into)s
+1526(lines)s 2029(automatically)s 3384(as)s 3635(required,)s 4539(by)s
+4834(con)s 9(v)k 3(erting)k 5898(some)s 6460(of)s
+6732(the)s 220 fnt35 7081 4364(&)m 240 fnt82 7284 4367(symbols)m
+8134(into)s 220 fnt35 8560 4364(//1vx)m 240 fnt82 9022 4367(.)m
+0 4079(Unbreakable)m 1279(g)s 1(aps)k 1769(are)s 2117(not)s
+2485(eligible)s 3258(for)s 3597(this)s 3995(con)s 9(v)k 3(ersion.)k
+5198(`Optimal')s 6173(line)s 6588(breaks)s 7265(are)s 7613(chosen,)s
+8386(using)s 8960(a)s 0 3791(method)m 776(adapted)s 1578(from)s
+2102(T)s 2198 3743(E)m 2306 3791(X)m 2535([5)s 2720(].)s
+480 3417(If)m 735(an)s 220 fnt35 1043 3414(&)m 240 fnt82
+1271 3417(symbol)m 2056(whose)s 2750(g)s 1(ap)k 3173(has)s
+3568(h)s 1(yphenation)k 4834(mode)s 5447(is)s 5683(chosen)s
+6430(for)s 6793(replacement)s 8046(by)s 220 fnt35 8365 3414(//1vx)m
+240 fnt82 8827 3417(,)m 8960(a)s 0 3129(h)m 1(yphen)k
+755(will)s 1174(be)s 1448(appended)s 2417(to)s 2649(the)s
+2989(preceding)s 3978(object,)s 4661(unless)s 5303(that)s 5714(object)s
+6350(is)s 6553(a)s 6712(w)s 2(ord)k 7252(which)s
+7887(already)s 8636(ends)s 0 2841(with)m 482(a)s 648(h)s 1(yphen.)k
+1517(F)s 3(or)k 1906(e)s 3(xample,)k 220 fnt35
+480 2344(Long)m 1017(w)s 2(ords)k 1654(ma)s 6(y)k
+2122(be)s 2419(h)s 6(yph &0ih enat &0ih ed.)k 240 fnt82 0 1845(could)m
+590(ha)s 4(v)k 3(e)k 1091(the)s 1439(follo)s 6(wing)k
+2416(result,)s 3053(depending)s 4104(where)s 4744(the)s 5092(line)s
+5506(breaks)s 6181(f)s 2(all:)k 480 1342(Long)m 1038(w)s 2(ords)k
+1670(may)s 2135(be)s 2415(h)s 1(yphenat)k 3292(-)s
+480 1054(ed.)m 0 601(Basser)m 702(Lout)s 1219(inserts)s 1898(h)s 1(yphenation)k
+3143(g)s 1(aps)k 3637(automatically)s 4996(as)s 5251(required,)s
+6159(ag)s 1(ain)k 6738(follo)s 6(wing)k 7720(the)s
+8073(method)s 8855(of)s 0 313(T)m 96 265(E)m 204 313(X)m
+373(,)s 479(which)s 1120(approximates)s 2458(the)s 2804(h)s 1(yphenations)k
+4130(in)s 4372(W)s 19(ebster')k 13(s)k 5358(dictionary)s 15(.)k
+6474(T)s 19(o)k 6773(pre)s 6(v)k 3(ent)k
+7540(the)s 7886(h)s 1(yphenation)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 40 46
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-BoldItalic
+/pgsave save 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
+%%IncludeResource: font Times-BoldItalic
+/Times-BoldItalicfnt85 vec2 /Times-BoldItalic LoutRecode
+/fnt85 { /Times-BoldItalicfnt85 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
+240 fnt84 0 13840(40)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(of)m
+268(a)s 430(single)s 1053(w)s 2(ord,)k 1646(enclose)s
+2416(it)s 2604(in)s 2843(quotes.)s 3628(Further)s 4387(control)s
+5116(o)s 3(v)k 3(er)k 5591(paragraph)s 6600(breaking)s
+7486(and)s 7886(h)s 1(yphenation)k 0 12917(is)m 210(pro)s 3(vided)k
+1116(by)s 1410(the)s 220 fnt35 1758 12914(@Break)m 240 fnt82
+2614 12917(and)m 220 fnt35 3018 12914(@Space)m 240 fnt82 3915 12917(symbols)m
+4764(\(Sections)s 5704(3.4)s 6058(and)s 6462(3.5\).)s 240 fnt84
+0 12124(3.3.)m 471(@F)s 6(ont)k 1226(and)s 1667(@Char)s
+240 fnt82 480 11692(A)m 240 fnt83 728 11694(font)m 240 fnt82
+1182 11692(is)m 1410(a)s 1594(collection)s 2611(of)s 2900(characters)s
+3936(which)s 4596(may)s 5080(be)s 5380(printed.)s 6239(Man)s 3(y)k
+6867(fonts)s 7414(come)s 8006(in)s 240 fnt83 8268 11694(families)m
+240 fnt82 9019 11692(,)m 0 11404(which)m 634(are)s 973(groups)s
+1667(of)s 1930(fonts)s 2450(that)s 2860(ha)s 4(v)k 3(e)k
+3352(been)s 3853(designed)s 4754(to)s 4984(go)s 5269(together)s 13(.)k
+6194(F)s 3(or)k 6575(e)s 3(xample,)k 7480(the)s
+7820(T)s 8(imes)k 8451(f)s 2(amily)k 0 11116(includes)m
+848(the)s 1196(follo)s 6(wing)k 2173(fonts:)s 480 10613(T)m 8(imes)k
+1120(Base)s 240 fnt83 480 10327(T)m 13(imes)k 1093(Slope)s
+240 fnt84 480 10036(T)m 4(imes)k 1154(Bold)s 240 fnt85
+480 9748(T)m 8(imes)k 1116(BoldSlope)s 240 fnt82 0 9246(Thus,)m
+586(each)s 1080(font)s 1524(has)s 1893(tw)s 2(o)k
+2303(names:)s 3019(its)s 240 fnt83 3294 9248(family)m 3946(name)s
+240 fnt82 4518 9246(\(T)m 8(imes,)k 5292(Helv)s 3(etica,)k
+6310(etc.\))s 6775(and)s 7179(its)s 240 fnt83 7454 9248(face)m
+7904(name)s 240 fnt82 8475 9246(\(Base,)m 0 8958(Slope,)m 682(etc.\).)s
+1294(T)s 8(imes)k 1964(Base)s 2516(is)s 2756(more)s
+3334(commonly)s 4443(called)s 5101(T)s 8(imes)k 5772(Roman,)s
+6601(and)s 7036(T)s 8(imes)k 7706(Slope)s 8338(is)s
+8579(more)s 0 8670(commonly)m 1085(called)s 1720(T)s 8(imes)k
+2367(Italic.)s 3027(Lout)s 3547(a)s 4(v)k 4(oids)k
+4222(these)s 4776(names)s 5445(in)s 5695(f)s 2(a)k 4(v)k 4(our)k
+6377(of)s 6655(generic)s 7418(names)s 8087(which)s 8737(can)s
+0 8382(be)m 282(applied)s 1044(to)s 1283(man)s 3(y)k
+1866(font)s 2311(f)s 2(amilies.)k 480 8008(Lig)m 1(atures,)k
+1488(such)s 1984(as)s 2234(\210)s 2420(for)s 2758(f)s
+2849(l)s 2970(and)s 3375(\207)s 3560(for)s 3898(f)s
+3989(i,)s 4163(are)s 4510(considered)s 5604(by)s 5899(Basser)s
+6596(Lout)s 7108(to)s 7348(be)s 7630(an)s 7913(inte)s 3(gral)k
+8695(part)s 0 7720(of)m 257(the)s 591(font:)s 1128(if)s
+1331(the)s 1665(font)s 2096(de\207nition)s 3056(\(see)s 3482(belo)s 6(w\))k
+4175(mentions)s 5089(them,)s 5660(the)s 3(y)k 6109(will)s
+6521(be)s 6789(used.)s 7378(Similarly)s 15(,)k 8344(k)s 2(erning)k
+0 7432(\(\207ne)m 510(adjustment)s 1636(of)s 1924(the)s 2289(space)s
+2893(between)s 3764(adjacent)s 4637(characters)s 5672(to)s 5928(impro)s 3(v)k 3(e)k
+6792(the)s 7157(appearance\))s 8377(is)s 8604(done)s 0 7144(whene)m 6(v)k 3(er)k
+988(indicated)s 1929(in)s 2179(the)s 2535(font)s 2987(de\207nition.)s
+4075(Enclosing)s 5092(one)s 5502(of)s 5780(the)s 6135(letters)s
+6775(in)s 220 fnt35 7026 7141(@OneCol)m 240 fnt82 8045 7144(is)m
+8262(one)s 8672(sure)s 0 6856(w)m 2(ay)k 451(to)s
+690(disable)s 1423(a)s 1589(lig)s 1(ature)k 2373(or)s
+2632(k)s 2(ern.)k 480 6482(The)m 220 fnt35 908 6479(@F)m 6(ont)k
+240 fnt82 1620 6482(symbol)m 2380(returns)s 3094(its)s 3370(right)s
+3881(parameter)s 4895(in)s 5138(a)s 5304(font)s 5749(and)s
+6153(size)s 6580(speci\207ed)s 7488(by)s 7782(its)s 8058(left:)s
+220 fnt35 480 5974({ )m 11(Times Base 12p } @F)k 6(ont)k 240 fnt83
+3155 5979(object)m 240 fnt82 0 5478(The)m 417(f)s 2(amily)k
+1080(and)s 1473(f)s 2(ace)k 1912(names)s 2563(must)s
+3076(ha)s 4(v)k 3(e)k 3565(appeared)s 4475(together)s
+5306(in)s 5538(a)s 220 fnt35 5692 5475(f)m 6(ontdef)k
+240 fnt82 6354 5478(;)m 6454(the)s 6791(size)s 7206(is)s
+7405(arbitrary)s 8268(and)s 8660(may)s 0 5190(be)m 283(gi)s 6(v)k 3(en)k
+865(in)s 1109(an)s 3(y)k 1508(one)s 1911(of)s
+2184(the)s 220 fnt35 2533 5187(c)m 240 fnt82 2638 5190(,)m
+220 fnt35 2747 5187(i)m 240 fnt82 2781 5190(,)m 220 fnt35
+2889 5187(p)m 240 fnt82 3003 5190(,)m 220 fnt35 3112 5187(m)m
+240 fnt82 3281 5190(,)m 220 fnt35 3389 5187(f)m 240 fnt82
+3447 5190(,)m 220 fnt35 3556 5187(s)m 240 fnt82 3659 5190(,)m
+3767(and)s 220 fnt35 4173 5187(v)m 240 fnt82 4343 5190(units)m
+4861(of)s 5133(measurement)s 6469(\(Section)s 7323(3.2\),)s 7811(although)s
+220 fnt35 8708 5187(10p)m 240 fnt82 0 4902(and)m 220 fnt35
+407 4899(12p)m 240 fnt82 828 4902(are)m 1178(the)s 1530(most)s
+2058(common)s 2956(sizes)s 3475(for)s 3816(te)s 3(xt.)k
+4338(There)s 4954(may)s 5424(be)s 5709(empty)s 6364(objects)s
+7096(and)s 220 fnt35 7503 4899(@Null)m 240 fnt82 8151 4902(objects)m
+8883(in)s 0 4614(the)m 348(left)s 725(parameter)s 1739(of)s
+220 fnt35 2010 4611(@F)m 6(ont)k 240 fnt82 2662 4614(;)m
+2774(these)s 3321(are)s 3668(ignored.)s 480 4240(When)m 1114(a)s
+220 fnt35 1286 4237(@F)m 6(ont)k 240 fnt82 2004 4240(symbol)m
+2769(is)s 2985(nested)s 3660(inside)s 4293(the)s 4646(right)s
+5163(parameter)s 6183(of)s 6459(another)s 220 fnt35 7242 4237(@F)m 6(ont)k
+240 fnt82 7960 4240(symbol,)m 8778(the)s 0 3952(inner)m 555(one)s
+961(determines)s 2065(the)s 2417(font)s 2867(of)s 3142(its)s
+3423(o)s 6(wn)k 3891(right)s 4406(parameter)s 13(.)k
+5516(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6480(it)s 6677(may)s 7147(be)s 7434(abbre)s 6(viated)k
+8605(so)s 8876(as)s 0 3664(to)m 239(inherit)s 922(part)s
+1353(of)s 1624(the)s 1972(outer)s 2523(symbol:)s 220 fnt35
+480 3163({ )m 11(Times Base 12p } @F)k 6(ont)k 480 2875({ hello)m 8(, Slope @F)k 6(ont hello)k 8(, 15p @F)k 6(ont hello })k
+240 fnt82 0 2379(has)m 370(result)s 480 1898(hello,)m 240 fnt83
+1065 1900(hello,)m 300 fnt82 1636 1885(hello)m 240 fnt82 0 1414(The)m
+457(\207rst)s 918(inner)s 220 fnt35 1498 1411(@F)m 6(ont)k
+240 fnt82 2240 1414(inherits)m 3037(the)s 3414(outer)s 3995(f)s 2(amily)k
+4699(and)s 5133(size,)s 5641(changing)s 6601(only)s 7111(the)s
+7488(f)s 2(ace;)k 8025(the)s 8403(second)s 0 1126(inherits)m
+754(the)s 1089(outer)s 1627(f)s 2(amily)k 2289(and)s
+2680(f)s 2(ace.)k 3225(When)s 3841(a)s 3994(f)s 2(amily)k
+4656(name)s 5217(is)s 5413(gi)s 6(v)k 3(en,)k
+6030(it)s 6209(must)s 6721(be)s 6990(follo)s 6(wed)k
+7878(immediately)s 0 838(by)m 294(a)s 460(f)s 2(ace)k
+911(name.)s 1593(A)s 1823(size)s 2250(change)s 2984(may)s
+3450(appear)s 4147(\207rst)s 4578(or)s 4837(last.)s 480 464(Sizes)m
+1035(of)s 1307(the)s 1656(form)s 2180(+)s 240 fnt83
+2308 466(length)m 240 fnt82 2962 464(and)m 3367(\211)s 240 fnt83
+3487 466(length)m 240 fnt82 4140 464(may)m 4607(also)s 5046(be)s
+5328(used,)s 5875(meaning)s 6753(that)s 7171(the)s 7520(font)s
+7966(size)s 8393(is)s 8604(to)s 8844(be)s 240 fnt83
+0 178(length)m 240 fnt82 649 176(lar)m 4(ger)k 1257(or)s
+1512(smaller)s 2269(than)s 2734(the)s 3078(inherited)s 3981(v)s 6(alue.)k
+4652(F)s 3(or)k 5037(e)s 3(xample,)k 5947(\211)s
+220 fnt35 6067 173(2p)m 240 fnt82 6359 176(is)m 6564(often)s
+7108(used)s 7601(for)s 7934(superscripts)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 41 47
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.3.)m 454(@F)s 25(ont)k 1165(and)s
+1591(@Char)s 240 fnt84 8839 13840(41)m 240 fnt82 0 13250(and)m
+407(subscripts.)s 1530(These)s 2161(forms)s 2772(are)s 3123(highly)s
+3792(recommended,)s 5257(since)s 5808(the)s 3(y)k 6274(don')s 4(t)k
+6839(need)s 7352(to)s 7594(be)s 7880(changed)s 8739(if)s
+8960(a)s 0 12962(decision)m 854(is)s 1064(made)s 1638(to)s
+1877(alter)s 2360(the)s 2708(font)s 3153(size)s 3580(of)s
+3851(the)s 4199(document)s 5203(as)s 5453(a)s 5619(whole.)s
+480 12588(The)m 220 fnt35 908 12585(@F)m 6(ont)k 240 fnt82
+1620 12588(symbol)m 2380(also)s 2818(switches)s 3692(to)s 3931(and)s
+4335(from)s 4859(small)s 5431(capitals:)s 220 fnt35 480 12087(smallcaps @F)m 6(ont ...)k
+480 11799(nosmallcaps @F)m 6(ont ...)k 240 fnt82 0 11303(These)m 639(may)s
+1118(be)s 1412(nested,)s 2143(and)s 2559(the)s 3(y)k
+3035(cooperate)s 4033(with)s 4527(other)s 5091(font)s 5548(changes.)s
+6496(The)s 6936(precise)s 7681(ef)s 6(fect)k 8290(depends)s
+0 11015(on)m 293(the)s 637(font)s 1078(\(see)s 1514(belo)s 6(w\).)k
+2331(There)s 2940(is)s 3146(a)s 3308(def)s 2(ault)k
+4024(v)s 6(alue)k 4588(\()s 220 fnt35 4661 11012(nosmallcaps)m
+240 fnt82 5873 11015(\),)m 6055(so)s 6317(it)s 6504(is)s
+6710(not)s 7072(necessary)s 8051(to)s 8285(mention)s 0 10727(this)m
+396(attrib)s 4(ute)k 1243(when)s 1819(gi)s 6(ving)k
+2478(an)s 2761(initial)s 3372(font.)s 480 10353(There)m 1080(are)s
+1413(tw)s 2(o)k 1810(prede\207ned)s 2864(symbols,)s 220 fnt35
+3756 10350(@CurrF)m 11(amily)k 240 fnt82 5083 10353(and)m 220 fnt35
+5474 10350(@CurrF)m 11(ace)k 240 fnt82 6592 10353(,)m 6685(which)s
+7314(respecti)s 6(v)k 3(ely)k 8499(return)s 0 10065(the)m
+337(f)s 2(amily)k 1000(and)s 1392(f)s 2(ace)k
+1831(names)s 2482(of)s 2741(the)s 3077(current)s 3801(font.)s
+4339(F)s 3(or)k 4716(e)s 3(xample,)k 5618(right)s
+6117(no)s 6(w)k 220 fnt35 6567 10062(@CurrF)m 11(amily)k
+240 fnt82 7896 10065(is)m 8094(T)s 8(imes)k 8722(and)s
+220 fnt35 0 9774(@CurrF)m 11(ace)k 240 fnt82 1178 9777(is)m
+1388(Base.)s 480 9403(When)m 1109(Lout)s 1621(runs,)s 2140(the)s
+2488(\207rst)s 2919(thing)s 3464(it)s 3656(reads)s 4211(is)s
+4421(a)s 4587(list)s 4938(of)s 5209(font)s 5654(de\207nitions,)s
+6771(lik)s 2(e)k 7183(these:)s 220 fnt35 480 8895(f)m 6(ontdef )k 11(Times Base {)k
+240 fnt83 2842 8900(implementation-dependent)m 220 fnt35 5517 8895(})m 480 8607(f)m 6(ontdef )k 11(Times Slope {)k
+240 fnt83 2841 8612(implementation-dependent)m 220 fnt35 5516 8607(})m 240 fnt82
+0 8111(Each)m 552(line)s 983(tells)s 1449(Lout)s 1978(of)s
+2267(the)s 2632(e)s 3(xistence)k 3591(of)s 3880(a)s
+4063(font,)s 4573(and)s 4994(assigns)s 5754(it)s 5963(a)s
+6146(f)s 2(amily)k 6839(name)s 7430(and)s 7852(a)s
+8035(f)s 2(ace)k 8504(name.)s 0 7823(There)m 617(are)s
+969(a)s 1140(fe)s 6(w)k 1551(fonts)s 2085(which)s
+2732(are)s 3084(the)s 3437(only)s 3921(members)s 4853(of)s
+5129(their)s 5631(f)s 2(amilies;)k 6514(e)s 6(v)k 3(en)k
+7019(though)s 7747(these)s 8299(fonts)s 8833(do)s 0 7535(not)m
+357(need)s 857(a)s 1013(f)s 2(ace)k 1455(name,)s
+2070(the)s 3(y)k 2523(must)s 3039(be)s 3311(gi)s 6(v)k 3(en)k
+3881(one)s 4274(by)s 4558(their)s 220 fnt35 5045 7532(f)m 6(ontdef)k
+240 fnt82 5707 7535(.)m 5862(The)s 6280(part)s 6701(between)s
+7546(braces)s 8197(may)s 8653(v)s 6(ary)k 0 7247(with)m
+486(dif)s 6(ferent)k 1365(implementations)s 3013(of)s 3288(Lout;)s
+3856(it)s 4052(is)s 4267(supposed)s 5221(to)s 5464(contain)s
+6229(the)s 6581(information)s 7770(Lout)s 8286(needs)s 8887(to)s
+0 6959(w)m 2(ork)k 551(with)s 1033(the)s 1381(font.)s
+480 6585(In)m 735(Basser)s 1431(Lout)s 1941(V)s 26(ersion)k
+2728(3,)s 2954(this)s 3348(implementation-dependent)s 5970(part)s 6400(consists)s
+7206(of)s 7476(a)s 7641(PostScript)s 8681(font)s 0 6297(name,)m
+635(an)s 928(Adobe)s 1634(font)s 2089(metrics)s 2852(\(formerly)s
+3831(AFM\))s 4488(\207le)s 4859(whose)s 5538(F)s 3(ontName)k
+6611(entry)s 7166(must)s 7702(agree)s 8285(with)s 8778(the)s
+0 6009(PostScript)m 1034(font)s 1471(name)s 2037(just)s 2433(mentioned,)s
+3542(the)s 3882(name)s 4448(of)s 4710(a)s 4868(Lout)s
+5372(Character)s 6352(Mapping)s 7261(\(LCM\))s 7979(\207le,)s 8383(and)s
+8778(the)s 0 5721(w)m 2(ord)k 220 fnt35 548 5718(Recode)m
+240 fnt82 1356 5721(or)m 220 fnt35 1615 5718(NoRecode)m 240 fnt82
+2643 5721(:)m 220 fnt35 480 5266(f)m 6(ontdef )k 11(Times Base { )k 11(Times-Roman )k 11(Ti-Ro LtLatin1.LCM Recode })k
+240 fnt82 0 4772(It)m 226(seems)s 883(to)s 1143(ha)s 4(v)k 3(e)k
+1666(become)s 2487(an)s 2792(in)s 9(v)k 6(ariable)k
+3810(rule)s 4258(at)s 4512(Adobe)s 5228(Systems)s 6098(that)s
+6538(the)s 6907(font)s 7374(name)s 7969(and)s 8395(the)s
+8765(\207le)s 0 4484(name)m 591(should)s 1305(be)s 1605(the)s
+1970(same,)s 2585(b)s 4(ut)k 2965(some)s 3543(operating)s
+4517(systems)s 5342(do)s 5652(not)s 6036(permit)s 6736(such)s
+7249(long)s 7746(\207le)s 8124(names,)s 8860(so)s 0 4196(Lout)m
+526(does)s 1031(not)s 1411(use)s 1801(them.)s 2457(The)s
+2900(\207les)s 3363(are)s 3725(searched)s 4633(for)s 4986(in)s
+5243(standard)s 6126(places.)s 6901(Consult)s 7721(the)s 8084(PostScript)s
+0 3908(Reference)m 1064(Manual)s 1891([1)s 2065(])s 2224(for)s
+2603(general)s 3401(information)s 4627(about)s 5260(fonts)s 5830(and)s
+6274(encoding)s 7246(v)s 3(ectors;)k 8086(brie\210y)s 15(,)k
+8843(an)s 0 3620(8-bit)m 520(character)s 1464(code)s 240 fnt83
+1981 3622(c)m 240 fnt82 2153 3620(in)m 2405(Lout')s 13(s)k
+3077(input)s 3638(is)s 3858(mapped)s 4683(to)s 4932(the)s
+5289(character)s 6233(in)s 6485(the)s 6843(Adobe)s 7547(font)s
+8002(metrics)s 8765(\207le)s 0 3332(whose)m 677(name)s 1260(appears)s
+2050(on)s 2356(the)s 2714(line)s 3137(labelled)s 240 fnt83
+3960 3334(c)m 240 fnt82 4131 3332(in)m 4384(the)s 4741(LCM)s
+5323(\207le.)s 5801(The)s 6239(LCM)s 6821(\207le)s 7191(also)s
+7638(de\207nes)s 8377(v)s 6(arious)k 0 3044(character)m 4(-to-character)k
+2162(mappings,)s 3215(such)s 3726(as)s 3991(upper)s 4(-case)k
+5093(to)s 5347(lo)s 6(wer)k 4(-case,)k 6493(which)s
+7150(are)s 7512(used)s 8024(for)s 8377(v)s 6(arious)k
+0 2756(purposes,)m 947(such)s 1431(as)s 1669(the)s 2005(production)s
+3087(of)s 3346(small)s 3906(capitals.)s 4787(If)s 5005(the)s
+5341(w)s 2(ord)k 220 fnt35 5877 2753(NoRecode)m 240 fnt82
+6953 2756(appears,)m 7778(Lout)s 8278(assumes)s 0 2468(that)m 428(the)s
+786(gi)s 6(v)k 3(en)k 1376(encoding)s 2317(v)s 3(ector)k
+2981(is)s 3201(already)s 3968(associated)s 5018(with)s 5510(this)s
+5916(font)s 6371(in)s 6624(the)s 6982(PostScript)s 8035(interpreter)s 9(,)k
+0 2180(and)m 404(optimizes)s 1384(its)s 1660(output)s 2332(accordingly)s 15(.)k
+480 1806(If)m 723(there)s 1270(are)s 1630(tw)s 2(o)k
+2054(font)s 2512(de\207nitions)s 3587(with)s 4083(the)s 4444(same)s
+5005(f)s 2(amily)k 5693(and)s 6111(f)s 2(ace)k
+6576(name,)s 7214(it)s 7420(is)s 7643(an)s 7940(error)s
+8477(unless)s 0 1518(the)m 371(second)s 1117(one)s 1542(has)s
+1936(the)s 2307(same)s 2877(font)s 3346(name)s 3943(and)s
+4370(\207le)s 4755(name)s 5352(as)s 5625(the)s 5997(\207rst,)s
+6498(in)s 6764(which)s 7430(case)s 7920(it)s 8135(is)s
+8369(silently)s 0 1230(ignored.)m 902(A)s 1139(PostScript)s 2188(font)s
+2640(name)s 3221(and)s 3632(\207le)s 4000(may)s 4474(appear)s
+5178(in)s 5428(tw)s 2(o)k 5845(or)s 6111(more)s
+6665(font)s 7117(de\207nitions,)s 8242(allo)s 6(wing)k 0 942(one)m
+402(PostScript)s 1444(font)s 1889(to)s 2128(ha)s 4(v)k 3(e)k
+2629(tw)s 2(o)k 3039(or)s 3298(more)s 3845(equally)s
+4603(v)s 6(alid)k 5133(Lout)s 5645(names,)s 6363(and)s
+6767(dif)s 6(ferent)k 7642(LCM)s 8215(\207les.)s 480 568(The)m
+220 fnt35 917 565(@Char)m 240 fnt82 1685 568(symbol)m 2454(allo)s 6(ws)k
+3133(a)s 3309(character)s 4252(to)s 4501(be)s 4792(speci\207ed)s
+5710(by)s 6014(its)s 6299(name)s 6883(\(its)s 7247(PostScript)s
+8299(name)s 8883(in)s 0 280(Basser)m 697(Lout\))s 1277(rather)s
+1893(than)s 2362(by)s 2656(its)s 2932(code:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 42 48
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(42)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 480 13207(@Char nine)m
+240 fnt82 0 12752(is)m 215(equi)s 6(v)k 6(alent)k
+1265(to)s 220 fnt35 1510 12749(9)m 240 fnt82 1689 12752(in)m
+1938(most)s 2469(fonts.)s 3117(This)s 3599(is)s 3815(useful)s
+4460(as)s 4716(a)s 4888(documentation)s 6373(aid)s 6729(and)s
+7139(to)s 7384(be)s 7672(sure)s 8132(of)s 8409(getting)s
+0 12464(the)m 347(right)s 856(character)s 1788(e)s 6(v)k 3(en)k
+2286(if)s 2501(the)s 2848(encoding)s 3777(v)s 3(ector)k
+4429(of)s 4698(the)s 5044(font)s 5488(is)s 5696(changed.)s
+6656(Ho)s 6(we)k 6(v)k 3(er)k 220 fnt35
+7576 12461(@Char)m 240 fnt82 8332 12464(will)m 8756(f)s 2(ail)k
+0 12176(if)m 217(the)s 565(character)s 1499(named)s 2195(is)s
+2405(not)s 2771(in)s 3014(the)s 3362(encoding)s 4293(v)s 3(ector)k
+4947(of)s 5218(the)s 5566(current)s 6302(font.)s 240 fnt84
+0 11383(3.4.)m 471(@Br)s 4(eak)k 240 fnt82 480 10951(The)m
+220 fnt35 898 10948(@Break)m 240 fnt82 1744 10951(symbol)m 2493(in\210uences)s
+3504(the)s 3842(appearance)s 4962(of)s 5223(paragraphs)s 6313(\(Section)s
+7155(3.2\),)s 7631(of)s 6(fering)k 8437(a)s 8592(\207x)s 3(ed)k
+0 10663(set)m 325(of)s 596(nine)s 1064(styles:)s 220 fnt35
+1275 10155(adjust)m 1916(@Break)s 240 fnt83 2772 10160(object)m 240 fnt82
+3600 10158(Break)m 4301(the)s 4718(paragraphs)s 5887(of)s 240 fnt83
+6228 10160(object)m 240 fnt82 6945 10158(into)m 7439(lines,)s 8066(and)s
+8540(apply)s 220 fnt35 3600 9867(@P)m 26(Adjust)k 240 fnt82
+4633 9870(\(Section)m 5511(3.15\))s 6084(to)s 6348(e)s 6(v)k 3(ery)k
+6949(line)s 7388(e)s 3(xcept)k 8094(the)s 8467(last)s
+8883(in)s 3600 9582(each)m 4095(paragraph;)s 220 fnt35 1128 9074(outdent)m
+1916(@Break)s 240 fnt83 2772 9079(object)m 240 fnt82 3600 9077(Lik)m 2(e)k
+220 fnt35 4122 9074(adjust)m 240 fnt82 4703 9077(,)m 4840(e)s 3(xcept)k
+5551(that)s 220 fnt35 6000 9074(2.0f @Wide {} &0i)m 240 fnt82 7809 9077(is)m
+8049(inserted)s 8894(at)s 3600 8789(the)m 3981(be)s 3(ginning)k
+5022(of)s 5326(e)s 6(v)k 3(ery)k 5935(line)s
+6382(e)s 3(xcept)k 7096(the)s 7477(\207rst,)s 7988(creating)s
+8843(an)s 3600 8501(outdented)m 4602(paragraph;)s 220 fnt35 1187 7993(r)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 7998(object)m 240 fnt82 3600 7996(Break)m
+4222(the)s 4559(paragraphs)s 5648(of)s 240 fnt83 5908 7998(object)m
+240 fnt82 6545 7996(into)m 6960(lines,)s 7507(b)s 4(ut)k
+7858(do)s 8140(not)s 8495(adjust)s 3600 7708(the)m 3948(lines)s
+4450(\(`ragged)s 5317(right'\);)s 220 fnt35 1077 7200(cr)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 7205(object)m 240 fnt82 3600 7203(Lik)m 2(e)k
+220 fnt35 4125 7200(r)m 2(agged)k 240 fnt82 4794 7203(,)m
+4934(e)s 3(xcept)k 5648(that)s 6099(each)s 6628(line)s
+7075(will)s 7534(be)s 7849(centred)s 8644(with)s 3600 6915(respect)m
+4336(to)s 4575(the)s 4923(others;)s 220 fnt35 1114 6407(rr)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 6412(object)m 240 fnt82 3600 6410(Lik)m 2(e)k
+220 fnt35 4115 6407(r)m 2(agged)k 240 fnt82 4784 6410(,)m
+4914(e)s 3(xcept)k 5618(that)s 6059(each)s 6577(line)s
+7014(will)s 7463(be)s 7768(right-justi\207ed)s 3600 6122(with)m 4082(respect)s
+4818(to)s 5057(the)s 5405(others)s 6040(\(`ragged)s 6907(left'\);)s
+220 fnt35 1065 5614(or)m 2(agged)k 1916(@Break)s 240 fnt83
+2772 5619(object)m 240 fnt82 3600 5617(The)m 4028(ob)s 3(vious)k
+4835(combination)s 6088(of)s 220 fnt35 6359 5614(r)m 2(agged)k
+240 fnt82 7088 5617(and)m 220 fnt35 7492 5614(outdent)m 240 fnt82
+8220 5617(;)m 220 fnt35 1413 5110(lines)m 1916(@Break)s 240 fnt83
+2772 5115(object)m 240 fnt82 3600 5113(Break)m 4284(the)s 4685(paragraphs)s
+5837(of)s 240 fnt83 6161 5115(object)m 240 fnt82 6861 5113(into)m
+7339(lines)s 7893(at)s 8178(the)s 8579(same)s 3600 4825(points)m
+4235(that)s 4651(the)s 3(y)k 5113(are)s 5458(brok)s 2(en)k
+6177(into)s 6600(lines)s 7101(in)s 7342(the)s 7689(input,)s
+8286(and)s 8688(also)s 3600 4537(at)m 3819(concatenation)s 5190(symbols)s
+6026(of)s 6283(the)s 6617(form)s 220 fnt35 7128 4534(&)m
+240 fnt83 7270 4539(k)m 220 fnt35 7380 4534(b)m 240 fnt82
+7540 4537(for)m 7865(an)s 3(y)k 240 fnt83 8248 4539(k)m
+240 fnt82 8404 4537(greater)m 3600 4249(than)m 4069(1.)s 4354(Do)s
+4700(not)s 5067(adjust)s 5698(the)s 6047(lines.)s 6663(An)s 3(y)k
+7127(spaces)s 7803(at)s 8035(the)s 8384(start)s 8855(of)s
+3600 3961(a)m 3766(line)s 4180(other)s 4731(than)s 5200(the)s
+5548(\207rst)s 5979(line)s 6393(will)s 6819(appear)s 7516(in)s
+7759(the)s 8107(output;)s 220 fnt35 1303 3453(clines)m 1916(@Break)s
+240 fnt83 2772 3458(object)m 240 fnt82 3600 3456(Break)m 4288(the)s
+4693(paragraphs)s 5849(of)s 240 fnt83 6177 3458(object)m 240 fnt82
+6881 3456(into)m 7363(lines)s 7921(as)s 8228(for)s 220 fnt35
+8623 3453(lines)m 3600 3165(@Break)m 240 fnt82 4396 3168(,)m 4503(then)s
+4972(centre)s 5611(each)s 6106(line)s 6520(with)s 7002(respect)s
+7738(to)s 7977(the)s 8325(others;)s 220 fnt35 1337 2660(r)m -3(lines)k
+1916(@Break)s 240 fnt83 2772 2665(object)m 240 fnt82 3600 2663(Break)m
+4288(the)s 4693(paragraphs)s 5849(of)s 240 fnt83 6177 2665(object)m
+240 fnt82 6881 2663(into)m 7363(lines)s 7921(as)s 8228(for)s
+220 fnt35 8623 2660(lines)m 3600 2372(@Break)m 240 fnt82 4396 2375(,)m
+4535(then)s 5036(right-)s 5555(justify)s 6251(each)s 6778(line)s
+7224(with)s 7738(respect)s 8506(to)s 8778(the)s 3600 2087(others.)m
+0 1634(If)m 235(the)s 588(paragraph)s 1606(w)s 2(as)k
+2032(an)s 2320(entire)s 2924(component)s 4053(of)s 4329(a)s
+4501(g)s 1(alle)k 3(y)k 15(,)k 5178(so)s
+5449(will)s 5880(each)s 6380(of)s 6656(its)s 6937(lines)s
+7444(be;)s 7787(otherwise)s 8778(the)s 0 1346(lines)m 502(are)s
+849(enclosed)s 1744(in)s 1987(a)s 220 fnt35 2153 1343(@OneRo)m 3(w)k
+240 fnt82 3284 1346(symbol)m 4044(after)s 4540(breaking.)s 480 972(The)m
+911(length)s 1570(of)s 1845(the)s 2196(g)s 1(ap)k
+2598(used)s 3099(to)s 3341(separate)s 4183(the)s 4535(lines)s
+5040(produced)s 5993(by)s 6291(paragraph)s 7307(breaking)s 8201(is)s
+8415(al)s 2(w)k 2(ays)k 220 fnt35 0 681(1v)m
+240 fnt82 231 684(.)m 395(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1355(the)s 220 fnt35 1703 681(v)m 240 fnt82 1872 684(unit)m
+2304(itself)s 2852(and)s 3256(the)s 3604(g)s 1(ap)k
+4002(mode)s 4590(may)s 5056(be)s 5338(changed:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 43 49
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.4.)m 454(@Br)s 8(eak)k 240 fnt84
+8833 13840(43)m 240 fnt83 1503 13249(gap)m 220 fnt35 1916 13244(@Break)m
+240 fnt83 2772 13249(object)m 240 fnt82 3600 13247(W)m 9(ithin)k
+240 fnt83 4312 13249(object)m 240 fnt82 4900 13247(,)m 5008(tak)s 2(e)k
+5460(the)s 5809(v)s 6(alue)k 6377(of)s 6649(the)s
+220 fnt35 6998 13244(v)m 240 fnt82 7167 13247(unit)m 7600(to)s
+7839(be)s 8122(the)s 8471(length)s 3600 12959(of)m 240 fnt83
+3871 12961(gap)m 240 fnt82 4224 12959(;)m 1375 12458(+)m 240 fnt83
+1503 12460(gap)m 220 fnt35 1916 12455(@Break)m 240 fnt83 2772 12460(object)m
+240 fnt82 3600 12458(W)m 9(ithin)k 240 fnt83 4320 12460(object)m
+240 fnt82 4908 12458(,)m 5024(tak)s 2(e)k 5485(the)s
+5841(v)s 6(alue)k 6418(of)s 6698(the)s 220 fnt35
+7054 12455(v)m 240 fnt82 7232 12458(unit)m 7673(to)s 7920(be)s
+8211(lar)s 4(ger)k 8832(by)s 3600 12170(the)m 3948(length)s
+4603(of)s 240 fnt83 4874 12172(gap)m 240 fnt82 5287 12170(than)m
+5756(it)s 5948(w)s 2(ould)k 6603(otherwise)s 7588(ha)s 4(v)k 3(e)k
+8089(been;)s 1383 11665(\211)m 240 fnt83 1503 11667(gap)m 220 fnt35
+1916 11662(@Break)m 240 fnt83 2772 11667(object)m 240 fnt82 3600 11665(W)m 9(ithin)k
+240 fnt83 4309 11667(object)m 240 fnt82 4897 11665(,)m 5000(tak)s 2(e)k
+5448(the)s 5792(v)s 6(alue)k 6356(of)s 6623(the)s
+220 fnt35 6968 11662(v)m 240 fnt82 7133 11665(unit)m 7561(to)s
+7796(be)s 8074(smaller)s 8832(by)s 3600 11377(the)m 3948(length)s
+4603(of)s 240 fnt83 4874 11379(gap)m 240 fnt82 5287 11377(than)m
+5756(it)s 5948(w)s 2(ould)k 6603(otherwise)s 7588(ha)s 4(v)k 3(e)k
+8089(been.)s 0 10872(In)m 256(each)s 751(case,)s 1269(the)s
+1617(mode)s 2205(of)s 240 fnt83 2476 10874(gap)m 240 fnt82
+2889 10872(is)m 3099(adopted)s 3915(within)s 240 fnt83 4583 10874(object)m
+240 fnt82 5171 10872(.)m 480 10498(The)m 220 fnt35 908 10495(@Break)m
+240 fnt82 1764 10498(symbol)m 2524(also)s 2962(controls)s 3783(h)s 1(yphenation:)k
+220 fnt35 1141 9990(h)m 6(yphen @Break)k 240 fnt83 2772 9995(object)m
+240 fnt82 3600 9993(Permit)m 4296(h)s 1(yphenation)k 5536(within)s
+6204(the)s 6552(paragraphs)s 7652(of)s 240 fnt83 7923 9995(object)m
+240 fnt82 8511 9993(;)m 220 fnt35 897 9485(noh)m 6(yphen @Break)k
+240 fnt83 2772 9490(object)m 240 fnt82 3600 9488(Prohibit)m 4440(h)s 1(yphenation)k
+5691(within)s 6370(the)s 6729(paragraphs)s 7840(of)s 240 fnt83
+8122 9490(object)m 240 fnt82 8710 9488(;)m 8833(all)s 3600 9200(h)m 1(yphenation)k
+4897(g)s 1(aps)k 5443(without)s 6291(e)s 3(xception)k
+7332(re)s 6(v)k 3(ert)k 7996(to)s 8292(edge-)s
+8812(to-)s 3600 8912(edge)m 4108(mode.)s 0 8409(The)m 220 fnt35
+428 8406(@Break)m 240 fnt82 1284 8409(also)m 1722(has)s 2092(options)s
+2848(which)s 3490(control)s 4222(wido)s 6(w)k 4922(and)s
+5326(orphan)s 6048(lines:)s 220 fnt35 480 7901(unbreakab)m 4(le\207rst @Break)k
+240 fnt83 3058 7906(ob)m 240 fnt82 3292 7904(-)m 240 fnt83
+480 7618(ject)m 240 fnt82 3600 7904(Pre)m 6(v)k 3(ent)k
+4431(column)s 5256(and)s 5710(page)s 6268(breaks)s 6993(\(i.e.)s
+7458(pre)s 6(v)k 3(ent)k 8276(a)s 8492(g)s 1(alle)k 3(y)k
+3600 7616(from)m 4147(splitting\))s 5081(between)s 5959(the)s 6330(\207rst)s
+6784(and)s 7212(second)s 7958(lines)s 8483(of)s 8778(the)s
+3600 7328(paragraphs)m 4700(of)s 240 fnt83 4971 7330(object)m 240 fnt82
+5559 7328(;)m 220 fnt35 480 6820(unbreakab)m 4(lelast @Break)k 240 fnt83
+3058 6825(ob)m 240 fnt82 3292 6823(-)m 240 fnt83 480 6537(ject)m
+240 fnt82 3600 6823(Pre)m 6(v)k 3(ent)k 4429(column)s
+5252(and)s 5704(page)s 6261(breaks)s 6984(between)s 7886(the)s
+8282(last)s 8722(and)s 3600 6535(second)m 4323(last)s 4714(lines)s
+5216(of)s 5487(the)s 5835(paragraphs)s 6935(of)s 240 fnt83
+7206 6537(object)m 240 fnt82 7794 6535(.)m 0 6032(These)m 688(options)s
+1506(w)s 2(ork)k 2119(by)s 2475(adding)s 3241(the)s
+220 fnt35 3651 6029(u)m 240 fnt82 3881 6032(\(unbreakable\))m 5319(suf\207x)s
+5980(to)s 6281(the)s 6691(appropriate)s 7897(g)s 1(aps)k
+8448(during)s 0 5744(paragraph)m 1017(breaking,)s 1966(so)s 2237(their)s
+2738(precise)s 3475(ef)s 6(fect)k 4076(is)s 4290(as)s
+4545(described)s 5524(for)s 5866(this)s 6267(suf\207x.)s 6981(These)s
+7612(options)s 8373(may)s 8844(be)s 0 5456(countermanded)m 1533(by)s
+220 fnt35 1827 5453(breakab)m 4(le\207rst @Break)k 240 fnt82 4057 5456(and)m
+220 fnt35 4461 5453(breakab)m 4(lelast @Break.)k 240 fnt82 480 5082(Se)m 6(v)k 3(eral)k
+1310(options)s 2135(may)s 2669(be)s 3020(gi)s 6(v)k 3(en)k
+3668(to)s 3976(the)s 220 fnt35 4392 5079(@Break)m 240 fnt82
+5317 5082(symbol)m 6145(simultaneously)s 15(,)k 7754(in)s 8065(an)s 3(y)k
+8531(order)s 13(.)k 0 4794(F)m 3(or)k 389(e)s 3(xample,)k
+220 fnt35 480 4293({ adjust 1.2fx h)m 6(yphen } @Break ...)k 240 fnt82 0 3795(is)m
+210(a)s 375(typical)s 1079(initial)s 1689(v)s 6(alue.)k
+2365(There)s 2977(may)s 3442(be)s 3723(empty)s 4375(objects)s
+5102(and)s 220 fnt35 5505 3792(@Null)m 240 fnt82 6149 3795(objects)m
+6877(in)s 7119(the)s 7466(left)s 7842(parameter)s 8855(of)s
+220 fnt35 0 3504(@Break)m 240 fnt82 796 3507(;)m 908(these)s
+1455(are)s 1802(ignored.)s 240 fnt84 0 2714(3.5.)m 471(@Space)s
+240 fnt82 480 2237(The)m 220 fnt35 911 2234(@Space)m 240 fnt82
+1812 2237(symbol)m 2576(changes)s 3402(the)s 3754(v)s 6(alue)k
+4326(of)s 4601(the)s 220 fnt35 4953 2234(s)m 240 fnt82
+5120 2237(unit)m 5556(of)s 5831(measurement)s 7169(\(Section)s 8026(3.2\))s
+8458(within)s 0 1949(its)m 276(right)s 787(parameter)s 1801(to)s
+2040(the)s 2388(v)s 6(alue)k 2956(gi)s 6(v)k 3(en)k
+3536(by)s 3830(the)s 4178(left)s 4555(parameter:)s 220 fnt35
+480 1448(1c @Space { a b c d })m 240 fnt82 0 952(has)m 370(result)s 480 499(a)m
+1153(b)s 1833(c)s 2499(d)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 44 50
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(44)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(As)m
+311(for)s 643(the)s 220 fnt35 985 13202(@Break)m 240 fnt82
+1835 13205(symbol,)m 2641(the)s 2982(left)s 3353(parameter)s 4361(of)s
+220 fnt35 4626 13202(@Space)m 240 fnt82 5517 13205(may)m 5976(be)s
+6252(gi)s 6(v)k 3(en)k 6826(relati)s 6(v)k 3(e)k
+7582(to)s 7815(the)s 8156(enclosing)s 220 fnt35 0 12914(s)m
+240 fnt82 163 12917(unit,)m 642(and)s 1046(it)s 1238(may)s
+1704(include)s 2464(a)s 2630(g)s 1(ap)k 3028(mode.)s
+3724(Note)s 4245(that)s 4663(the)s 220 fnt35 5011 12914(@F)m 6(ont)k
+240 fnt82 5723 12917(symbol)m 6483(also)s 6921(sets)s 7330(the)s
+220 fnt35 7678 12914(s)m 240 fnt82 7841 12917(unit.)m 480 12543(The)m
+906(left)s 1280(parameter)s 2292(of)s 2560(the)s 220 fnt35
+2906 12540(@Space)m 240 fnt82 3800 12543(symbol)m 4558(may)s 5021(also)s
+5456(hold)s 5938(an)s 3(y)k 6332(one)s 6732(of)s
+7000(the)s 7346(\207v)s 3(e)k 7755(special)s 8470(v)s 6(alues)k
+220 fnt35 0 12252(lout)m 240 fnt82 349 12255(,)m 220 fnt35
+461 12252(compress)m 240 fnt82 1406 12255(,)m 220 fnt35 1518 12252(separ)m 2(ate)k
+240 fnt82 2362 12255(,)m 220 fnt35 2474 12252(troff)m 240 fnt82
+2849 12255(,)m 2961(and)s 220 fnt35 3371 12252(te)m 6(x)k
+240 fnt82 3656 12255(,)m 3768(which)s 4415(control)s 5152(the)s
+5505(w)s 2(ay)k 5962(in)s 6210(which)s 6857(Lout)s
+7374(treats)s 7946(white)s 8539(space)s 0 11967(separating)m 1047(tw)s 2(o)k
+1470(objects.)s 2324(The)s 2764(names)s 220 fnt35 3439 11964(troff)m
+240 fnt82 3887 11967(and)m 220 fnt35 4304 11964(te)m 6(x)k
+240 fnt82 4661 11967(indicate)m 5486(that)s 5917(the)s 6278(beha)s 4(viour)k
+7303(of)s 7587(these)s 8147(options)s 8916(is)s 0 11679(inspired)m
+828(by)s 1122(these)s 1669(other)s 2220(document)s 3224(formatting)s
+4285(systems.)s 480 11305(The)m 897(def)s 2(ault)k 1607(setting,)s
+220 fnt35 2339 11302(lout)m 240 fnt82 2688 11305(,)m 2784(produces)s
+3687(as)s 3926(man)s 3(y)k 4498(spaces)s 5161(in)s
+5393(the)s 5729(output)s 6390(as)s 6629(there)s 7150(are)s
+7486(in)s 7717(the)s 8054(input.)s 8698(The)s 220 fnt35
+0 11014(compress)m 240 fnt82 1017 11017(setting)m 1719(causes)s 2407(all)s
+2712(sequences)s 3746(of)s 4029(tw)s 2(o)k 4452(or)s
+4723(more)s 5283(white)s 5882(space)s 6482(characters)s 7512(to)s
+7764(be)s 8058(treated)s 8778(the)s 0 10729(same)m 556(as)s
+815(one)s 1227(white)s 1823(space)s 2419(character)s 13(.)k
+3454(The)s 220 fnt35 3891 10726(separ)m 2(ate)k 240 fnt82
+4804 10729(setting)m 5504(is)s 5723(lik)s 2(e)k 220 fnt35
+6144 10726(compress)m 240 fnt82 7159 10729(b)m 4(ut)k 7530(also)s
+7977(causes)s 8662(zero)s 0 10441(white)m 587(spaces)s 1263(between)s
+2118(tw)s 2(o)k 2529(objects)s 3258(\(b)s 4(ut)k
+3700(not)s 4067(within)s 4736(one)s 5138(w)s 2(ord\))k
+5757(to)s 5997(be)s 6280(treated)s 6988(the)s 7337(same)s
+7885(as)s 8136(one)s 8539(white)s 0 10153(space)m 587(character)s 13(.)k
+480 9779(The)m 220 fnt35 902 9776(troff)m 240 fnt82 1330 9779(setting)m
+2013(is)s 2216(the)s 2557(same)s 3097(as)s 220 fnt35
+3340 9776(lout)m 240 fnt82 3742 9779(e)m 3(xcept)k 4416(that)s
+4828(where)s 6(v)k 3(er)k 5761(a)s 5920(sentence)s
+6792(ends)s 7275(at)s 7500(the)s 7841(end)s 8238(of)s
+8502(a)s 8661(line,)s 0 9491(one)m 415(e)s 3(xtra)k
+962(space)s 1562(is)s 1785(added.)s 2535(F)s 3(ormally)k 15(,)k
+3513(when)s 4102(tw)s 2(o)k 4525(objects)s 5266(are)s
+5627(separated)s 6600(by)s 6907(white)s 7507(space)s 8108(characters)s
+0 9203(which)m 660(include)s 1439(at)s 1689(least)s 2205(one)s
+2625(ne)s 6(wline)k 3451(character)s 9(,)k 4442(and)s
+4864(the)s 5231(\207rst)s 5680(object)s 6343(is)s 6572(a)s
+6756(w)s 2(ord)k 7323(ending)s 8046(in)s 8308(an)s 3(y)k
+8724(one)s 0 8915(of)m 288(a)s 471(certain)s 1194(set)s
+1536(of)s 1824(sequences)s 2862(of)s 3150(characters,)s 4241(the)s
+4606(e)s 3(xtra)k 5157(space)s 5761(is)s 5988(added.)s
+6741(The)s 7186(set)s 7528(of)s 7816(sequences)s 8855(of)s
+0 8627(characters)m 1025(depends)s 1868(on)s 2173(the)s 2528(current)s
+3272(language)s 4199(and)s 4610(is)s 4828(de\207ned)s 5598(in)s
+5849(the)s 220 fnt35 6204 8624(langdef)m 240 fnt82 6987 8627(for)m
+7333(that)s 7758(language)s 8686(\(see)s 0 8339(Section)m 774(3.8\).)s
+480 7965(The)m 220 fnt35 930 7962(te)m 6(x)k 240 fnt82
+1297 7965(option)m 1989(is)s 2221(the)s 2592(most)s 3139(complicated.)s
+4494(First,)s 5060(the)s 220 fnt35 5430 7962(compress)m 240 fnt82
+6458 7965(option)m 7149(is)s 7382(applied.)s 8272(Then,)s 8894(at)s
+0 7677(e)m 6(v)k 3(ery)k 576(sentence)s 1455(ending,)s
+2213(whether)s 3043(or)s 3302(not)s 3667(at)s 3899(the)s
+4246(end)s 4650(of)s 4921(a)s 5086(line,)s 5551(one)s
+5952(e)s 3(xtra)k 6486(space)s 7073(is)s 7282(added.)s
+8018(A)s 8247(sentence)s 0 7389(ending)m 709(is)s 923(de\207ned)s
+1690(as)s 1944(for)s 220 fnt35 2286 7386(troff)m 240 fnt82
+2726 7389(e)m 3(xcept)k 3411(that,)s 3880(in)s 4127(addition)s
+4972(to)s 5215(the)s 5568(preceding)s 6568(w)s 2(ord)k
+7120(ha)s 4(ving)k 7825(to)s 8068(end)s 8476(in)s
+8724(one)s 0 7101(of)m 268(a)s 431(certain)s 1134(set)s
+1456(of)s 1724(sequences)s 2742(of)s 3010(characters,)s 4081(the)s
+4426(character)s 5357(preceding)s 6350(that)s 6765(sequence)s 7695(must)s
+8217(e)s 3(xist)k 8722(and)s 0 6813(must)m 525(be)s
+807(a)s 973(lo)s 6(wer)k 4(-case)k 2053(letter)s 13(.)k
+2693(A)s 2924(character)s 3858(is)s 4068(a)s 4234(lo)s 6(wer)k 4(-case)k
+5314(letter)s 5864(if,)s 6116(in)s 6359(the)s 6707(Lout)s
+7219(Character)s 8208(Mapping)s 0 6525(\207le)m 393(\(Section)s 1278(3.3\))s
+1738(associated)s 2810(with)s 3325(the)s 3705(current)s 4473(font,)s
+4997(an)s 5313(upper)s 4(-case)k 6432(equi)s 6(v)k 6(alent)k
+7508(of)s 7811(the)s 8192(character)s 0 6237(is)m 210(de\207ned.)s
+240 fnt84 0 5494(3.6.)m 471(@YUnit)s 1378(and)s 1819(@ZUnit)s
+240 fnt82 480 5062(The)m 220 fnt35 917 5059(@YUnit)m 240 fnt82
+1741 5062(symbol)m 2510(changes)s 3342(the)s 3699(v)s 6(alue)k
+4277(of)s 4557(the)s 220 fnt35 4915 5059(y)m 240 fnt82
+5092 5062(unit)m 5534(of)s 5814(measurement)s 7158(\(Section)s 8020(3.2\))s
+8458(within)s 0 4774(its)m 276(right)s 787(parameter)s 1801(to)s
+2040(the)s 2388(v)s 6(alue)k 2956(gi)s 6(v)k 3(en)k
+3536(by)s 3830(the)s 4178(left)s 4555(parameter:)s 220 fnt35
+480 4273(1c @YUnit { ...)m 13( })k 240 fnt82 0 3779(ensures)m 760(that)s
+1170(the)s 1510(v)s 6(alue)k 2070(of)s 220 fnt35
+2333 3776(1y)m 240 fnt82 2615 3779(within)m 3275(the)s 3615(right)s
+4118(parameter)s 5124(will)s 5542(be)s 220 fnt35 5816 3776(1c)m
+240 fnt82 6043 3779(.)m 6199(The)s 220 fnt35 6619 3776(@ZUnit)m
+240 fnt82 7413 3779(symbol)m 8165(is)s 8366(similar)s 9(,)k
+0 3491(setting)m 688(the)s 1034(v)s 6(alue)k 1600(of)s
+1869(the)s 220 fnt35 2215 3488(z)m 240 fnt82 2376 3491(unit)m
+2806(in)s 3047(its)s 3321(right)s 3830(parameter)s 13(.)k
+4933(Both)s 5453(units)s 5967(ha)s 4(v)k 3(e)k
+6466(def)s 2(ault)k 7185(v)s 6(alue)k 7751(zero.)s
+8324(The)s 8749(left)s 0 3203(parameter)m 1011(may)s 1473(not)s
+1836(include)s 2592(a)s 2755(g)s 1(ap)k 3149(mode,)s
+3784(nor)s 4160(may)s 4622(it)s 4811(use)s 5182(the)s
+220 fnt35 5526 3200(w)m 240 fnt82 5682 3203(,)m 220 fnt35
+5786 3200(b)m 240 fnt82 5900 3203(,)m 220 fnt35 6003 3200(r)m
+240 fnt82 6076 3203(,)m 6180(or)s 6435(of)s 6702(course)s
+220 fnt35 7379 3200(d)m 240 fnt82 7545 3203(units,)m 8114(b)s 4(ut)k
+8472(it)s 8660(may)s 0 2915(be)m 3(gin)k 577(with)s
+220 fnt35 1050 2912(+)m 240 fnt82 1220 2915(or)m 220 fnt35
+1470 2912(-)m 240 fnt82 1584 2915(to)m 1814(indicate)s 2616(that)s
+3025(v)s 6(alue)k 3583(is)s 3784(to)s 4014(be)s
+4286(added)s 4907(to)s 5136(or)s 5386(subtracted)s 6416(from)s
+6931(the)s 7269(current)s 7996(v)s 6(alue.)k 8662(An)s 3(y)k
+0 2627(ne)m 3(g)k 1(ati)k 6(v)k 3(e)k
+853(result)s 1443(of)s 1714(using)s 220 fnt35 2286 2624(-)m
+240 fnt82 2410 2627(will)m 2836(be)s 3118(silently)s 3875(replaced)s
+4742(by)s 5036(zero.)s 480 2253(These)m 1123(units)s 1655(are)s
+2018(not)s 2400(used)s 2913(internally)s 3898(by)s 4208(Lout.)s
+4840(The)s 3(y)k 5399(are)s 5762(supplied)s 6647(as)s
+6913(part)s 7360(of)s 7647(the)s 8011(style)s 8534(infor)s
+8998(-)s 0 1965(mation)m 731(for)s 1080(the)s 1439(con)s 9(v)k 3(enience)k
+2690(of)s 2972(application)s 4102(packages.)s 5154(F)s 3(or)k
+5554(e)s 3(xample,)k 6479(the)s 6838(Eq)s 7173(equation)s
+8065(formatting)s 0 1677(package)m 840(uses)s 1303(them)s 1841(to)s
+2080(\207ne-)s 2507(tune)s 2975(the)s 3323(appearance)s 4454(of)s
+4725(equations.)s 240 fnt84 0 884(3.7.)m 471(@SetColour)s 1788(and)s
+2229(@SetColor)s 240 fnt82 480 452(The)m 220 fnt35 927 449(@SetColour)m
+240 fnt82 2204 452(and)m 220 fnt35 2628 449(@SetColor)m 240 fnt82
+3783 452(symbols,)m 4708(which)s 5370(ha)s 4(v)k 3(e)k
+5891(identical)s 6788(ef)s 6(fect,)k 7451(return)s 8098(their)s
+8615(right)s 0 164(parameter)m 1047(in)s 1323(the)s 1704(colour)s
+2408(speci\207ed)s 3349(by)s 3676(their)s 4206(left)s 4617(parameter)s 13(.)k
+5755(The)s 6216(form)s 6773(of)s 7077(the)s 7458(left)s
+7868(parameter)s 8916(is)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 45 51
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.7.)m 454(@SetColour)s 1710(and)s 2136(@SetColor)s
+240 fnt84 8833 13840(45)m 240 fnt82 0 13250(implementation-dependent;)m 2693(in)s
+2954(Basser)s 3670(Lout)s 4200(it)s 4410(must)s 4954(be)s
+5254(an)s 5555(object)s 6218(whose)s 6904(v)s 6(alue)k
+7490(is)s 7719(a)s 7903(sequence)s 8855(of)s 0 12962(w)m 2(ords)k
+634(comprising)s 1763(a)s 1929(PostScript)s 2971(command)s 3973(for)s
+4311(setting)s 5001(colour)s 13(.)k 5763(F)s 3(or)k
+6152(e)s 3(xample,)k 220 fnt35 480 12461({ 1.0 0.0 0.0 setrgbcolor } @SetColour { hello)m 8(, w)k 2(or)k -3(ld })k
+240 fnt82 0 11962(produces)m 915(the)s 1263(red)s 1626(result)s
+1.0 0.0 0.0 setrgbcolor 480 11459(hello,)m 1065(w)s 2(orld)k 0.0 0.0 0.0 setrgbcolor
+0 10975(Of)m 322(course,)s 1050(a)s 1213(colour)s 1881(output)s
+2550(de)s 6(vice)k 3222(is)s 3429(needed)s 4162(to)s
+4398(see)s 4756(the)s 5101(ef)s 6(fect;)k 5747(on)s
+6041(a)s 6204(monochrome)s 7520(de)s 6(vice)k 8191(the)s
+8536(result)s 0 10687(will)m 422(be)s 700(some)s 1257(shade)s
+1854(of)s 2121(gre)s 3(y)k 15(.)k 2688(The)s
+220 fnt35 3112 10684(@SetColour)m 240 fnt82 4365 10687(command)m 5363(will)s
+5785(not)s 6147(accept)s 6813(an)s 7092(empty)s 7740(left)s
+8112(parameter)s 0 10399(\(it)m 273(refuses)s 1002(to)s 1243(belie)s 6(v)k 3(e)k
+1983(that)s 2403(this)s 2801(could)s 3393(cause)s 3983(a)s
+4151(change)s 4887(of)s 5161(colour\),)s 5960(b)s 4(ut)k
+6324(otherwise)s 7311(it)s 7506(trusts)s 8076(the)s 8426(user)s
+8887(to)s 0 10111(supply)m 693(something)s 1743(sensible.)s 480 9737(The)m
+220 fnt35 901 9734(@SetColour)m 240 fnt82 2151 9737(command)m 3145(accepts)s
+3892(the)s 4232(special)s 4943(v)s 6(alue)k 220 fnt35
+5504 9734(nochange)m 240 fnt82 6512 9737(for)m 6843(the)s 7183(left)s
+7553(parameter)s 13(.)k 8650(This)s 0 9449(v)m 6(alue)k
+574(causes)s 1256(the)s 1611(right)s 2129(parameter)s 3150(to)s
+3396(ha)s 4(v)k 3(e)k 3904(the)s 4258(colour)s
+4936(it)s 5135(w)s 2(ould)k 5797(ha)s 4(v)k 3(e)k
+6305(had)s 6716(without)s 7514(the)s 220 fnt35 7869 9446(@SetColour)m
+240 fnt82 0 9161(command.)m 480 8787(There)m 1132(is)s 1382(no)s
+1715(def)s 2(ault)k 2476(colour)s 9(,)k 3225(so)s
+3530(the)s 3918(user)s 4416(must)s 4981(ensure)s 5701(that)s
+6159(the)s 6546(root)s 7031(g)s 1(alle)k 3(y)k
+7705(or)s 8004(each)s 8539(of)s 8850(its)s 0 8499(components)m
+1208(is)s 1418(enclosed)s 2313(in)s 2556(a)s 220 fnt35
+2722 8496(@SetColour)m 240 fnt82 3979 8499(symbol)m 4739(whose)s 5407(left)s
+5784(parameter)s 6798(is)s 7008(not)s 220 fnt35 7374 8496(nochange)m
+240 fnt82 8330 8499(.)m 480 8125(Lout)m 1023(mak)s 2(es)k
+1715(no)s 2039(attempt)s 2847(to)s 3117(understand)s 4257(colour)s 9(,)k
+4998(it)s 5221(simply)s 5958(prints)s 6584(the)s 6964(PostScript)s
+8038(commands)s 0 7837(when)m 601(appropriate.)s 1879(This)s 2381(has)s
+2776(the)s 3150(adv)s 6(antage)k 4196(of)s 4492(permitting)s
+5566(access)s 6253(to)s 6517(an)s 3(y)k 6940(of)s
+7237(PostScript')s 13(s)k 8455(colour)s 0 7549(models)m 768(\(some)s
+1434(require)s 2192(initialization)s 3481(which)s 4149(can)s 4564(be)s
+4872(supplied)s 5767(using)s 220 fnt35 6365 7546(@PrependGr)m 2(aphic)k
+240 fnt82 8178 7549(\),)m 8390(b)s 4(ut)k 8778(the)s
+0 7261(disadv)m 6(antage)k 1299(of)s 1570(of)s 6(fering)k
+2386(no)s 2679(w)s 2(ay)k 3130(to)s 3369(mak)s 2(e)k
+3941(relati)s 6(v)k 3(e)k 4703(changes)s 5525(\(`as)s
+5933(before)s 6599(only)s 7079(redder)s 9(,)k 16(')k
+7836(and)s 8240(so)s 8506(on\).)s 480 6887(F)m 3(or)k
+870(those)s 1432(who)s 1899(wish)s 2409(to)s 2649(obtain)s
+3305(colour)s 3977(without)s 4769(w)s 2(orking)k 5619(v)s 3(ery)k
+6096(hard,)s 6629(the)s 220 fnt35 6978 6884(setrgbcolor)m 240 fnt82
+8124 6887(command)m 0 6599(used)m 496(abo)s 3(v)k 3(e)k
+1117(is)s 1325(a)s 4(v)k 6(ailable)k 2232(in)s
+2474(e)s 6(v)k 3(ery)k 3048(v)s 3(ersion)k
+3805(of)s 4075(PostScript,)s 5162(requires)s 5981(no)s 6273(initialization,)s
+7584(and)s 7987(is)s 8196(simple)s 8887(to)s 0 6311(use.)m
+485(The)s 915(three)s 1450(numbers,)s 2384(which)s 3028(range)s
+3617(from)s 4143(0.0)s 4501(to)s 4742(1.0,)s 5151(determine)s
+6164(the)s 6515(intensity)s 7394(of)s 7667(red,)s 8081(green,)s
+8722(and)s 0 6023(blue)m 468(respecti)s 6(v)k 3(ely)k 15(.)k
+1762(Some)s 2363(useful)s 3002(v)s 6(alues)k 3658(for)s
+3996(the)s 4344(left)s 4721(parameter)s 5735(are)s 220 fnt35
+480 5458(1.0)m 838(0.0)s 1196(0.0)s 1554(setrgbcolor)s 240 fnt83
+2979 5463(r)m 8(ed)k 220 fnt35 480 5139(0.0)m 838(1.0)s
+1196(0.0)s 1554(setrgbcolor)s 240 fnt83 2979 5144(gr)m 8(een)k
+220 fnt35 480 4809(0.0)m 838(0.0)s 1196(1.0)s 1554(setrgbcolor)s
+240 fnt83 2979 4814(blue)m 220 fnt35 480 4479(1.0)m 838(1.0)s
+1196(1.0)s 1554(setrgbcolor)s 240 fnt83 2979 4484(white)m 220 fnt35
+480 4160(0.5)m 837(0.5)s 1194(0.5)s 1551(setrgbcolor)s 240 fnt83
+2979 4165(gr)m 8(e)k 7(y)k 220 fnt35 480 3830(0.0)m
+838(0.0)s 1196(0.0)s 1554(setrgbcolor)s 240 fnt83 2979 3835(blac)m 4(k)k
+240 fnt82 0 3274(Colouring)m 1042(an)s 1344(object)s 2007(white)s
+2613(is)s 2841(useful)s 3499(for)s 3856(producing)s 4899(an)s
+5200(empty)s 5871(space)s 6477(whose)s 7164(size)s 7609(is)s
+7838(that)s 8275(of)s 8565(some)s 0 2986(object.)m 240 fnt84
+0 2193(3.8.)m 471(@Language)s 1762(and)s 2203(@CurrLang)s 240 fnt82
+480 1716(The)m 220 fnt35 905 1713(@Language)m 240 fnt82 2153 1716(symbol)m
+2910(informs)s 3701(Lout)s 4210(that)s 4625(its)s 4898(right)s
+5406(parameter)s 6417(is)s 6624(written)s 7354(in)s 7594(the)s
+7939(language)s 8855(of)s 0 1428(its)m 276(left)s 653(parameter:)s
+220 fnt35 480 927(Danish @Language { ...)m 13( })k 240 fnt82 0 428(Basser)m
+706(Lout)s 1228(V)s 26(ersion)k 2025(3)s 2199(uses)s
+2671(this)s 3077(information)s 4271(in)s 4524(tw)s 2(o)k
+4943(w)s 2(ays:)k 5609(to)s 5857(h)s 1(yphenate)k
+6906(w)s 2(ords)k 7549(appropriately)s 8887(to)s 0 140(that)m
+418(language,)s 1389(and)s 1793(to)s 2032(change)s 2766(the)s
+3114(v)s 6(alue)k 3682(of)s 3953(the)s 220 fnt35
+4301 137(@CurrLang)m 240 fnt82 5486 140(symbol)m 6246(\(see)s 6686(belo)s 6(w\).)k
+7508(Other)s 8112(uses,)s 8630(such)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 46 52
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(46)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(as)m
+250(right-to-left)s 1422(formatting)s 2483(of)s 2754(certain)s 3460(languages,)s
+4524(may)s 4990(be)s 5272(added)s 5902(in)s 6145(the)s
+6493(future.)s 480 12831(The)m 953(left)s 1375(parameter)s 2434(must)s
+3004(either)s 3652(be)s 3979(empty)s 4676(\(which)s 5442(means)s
+6149(to)s 6433(lea)s 4(v)k 3(e)k 7031(the)s
+7424(current)s 8206(language)s 0 12543(unchanged\))m 1167(or)s 1428(else)s
+1857(it)s 2051(must)s 2578(ha)s 4(v)k 3(e)k
+3080(been)s 3591(gi)s 6(v)k 3(en)k 4173(in)s
+4418(a)s 220 fnt35 4586 12540(langdef)m 240 fnt82 5363 12543(language)m
+6285(de\207nition)s 7261(at)s 7495(the)s 7845(be)s 3(ginning)k
+8855(of)s 0 12255(the)m 348(input:)s 220 fnt35 480 11747(langdef Danish Dansk {)m
+240 fnt83 2993 11752(implementation-dependent)m 220 fnt35 5608 11747(})m 240 fnt82
+0 11248(After)m 220 fnt35 571 11245(langdef)m 240 fnt82 1355 11248(comes)m
+2025(a)s 2199(sequence)s 3140(of)s 3419(one)s 3829(or)s
+4096(more)s 4651(simple)s 5352(w)s 2(ords,)k 6050(which)s
+6700(are)s 7055(alternati)s 6(v)k 3(e)k 8117(names)s
+8788(for)s 0 10960(the)m 347(language)s 1265(being)s 1849(de\207ned.)s
+2716(F)s 3(ollo)k 6(wing)k 3743(them)s 4279(comes)s
+4940(an)s 5221(implementation-dependent)s 7843(part)s 8272(between)s 0 10672(braces.)m
+760(In)s 1001(Basser)s 1684(Lout)s 2181(V)s 26(ersion)k
+2955(3)s 3104(this)s 3486(part)s 3902(contains)s 4736(the)s
+5069(name)s 5629(of)s 5885(the)s 6219(Lout)s 6716(h)s 1(yphenation)k
+7941(information)s 0 10384(\207le)m 383(\(minus)s 1121(its)s 1419(.lh)s
+1745(suf\207x\))s 2441(to)s 2702(be)s 3007(used)s 3527(when)s
+4125(h)s 1(yphenating)k 5384(w)s 2(ords)k 6040(in)s
+6306(this)s 6725(language,)s 7718(follo)s 6(wed)k 8643(by)s
+8960(a)s 0 10096(sequence)m 933(of)s 1204(w)s 2(ords)k
+1838(which)s 2480(de\207ne)s 3121(the)s 3469(ends)s 3959(of)s
+4230(sentences.)s 5310(F)s 3(or)k 5699(e)s 3(xample:)k
+220 fnt35 480 9596(langdef English { english .)m 13( :)k 11( ? ! .\) ?\) !\) })k 240 fnt82
+0 9097(de\207nes)m 748(a)s 934(language)s 1874(called)s 2522(English)s
+3329(with)s 3831(h)s 1(yphenation)k 5091(patterns)s 5918(\207le)s
+220 fnt35 6298 9094(english.lh)m 240 fnt82 7289 9097(and)m 7713(se)s 6(v)k 3(en)k
+8326(w)s 2(ays)k 8887(to)s 0 8809(end)m 424(a)s
+610(sentence.)s 1617(The)s 2065(use)s 2460(of)s 2751(these)s
+3318(sentence)s 4217(endings)s 5034(is)s 5264(described)s 6258(in)s
+6521(Section)s 7315(3.5.)s 7799(If)s 8049(there)s 8602(is)s
+8833(no)s 0 8521(h)m 1(yphenation)k 1236(\207le)s 1592(a)s 4(v)k 6(ailable,)k
+2546(this)s 2937(is)s 3143(indicated)s 4072(by)s 4361(writing)s
+220 fnt35 5099 8518(-)m 240 fnt82 5219 8521(for)m 5552(the)s
+5895(\207le)s 6251(name;)s 6877(if)s 7089(there)s 7617(are)s
+7959(no)s 8247(sentence)s 0 8233(ends,)m 546(the)s 3(y)k
+1009(are)s 1356(simply)s 2061(omitted.)s 480 7859(The)m 220 fnt35
+913 7856(@CurrLang)m 240 fnt82 2103 7859(symbol,)m 2920(which)s 3567(has)s
+3942(no)s 4240(parameters,)s 5399(e)s 6(v)k 6(aluates)k
+6332(to)s 6576(the)s 6929(\207rst)s 7365(name)s 7944(gi)s 6(v)k 3(en)k
+8529(in)s 8778(the)s 220 fnt35 0 7568(langdef)m 240 fnt82
+776 7571(of)m 1047(the)s 1395(language)s 2315(in)s 2558(force)s
+3104(at)s 3336(the)s 3684(point)s 4236(where)s 4876(it)s
+5068(is)s 5278(in)s 9(v)k 4(ok)k 2(ed:)k
+220 fnt35 480 7070(Dansk @Language { )m 11(This is @CurrLang.)k 13( })k 240 fnt82
+0 6571(has)m 370(result)s 480 6118(This)m 956(is)s 1166(Danish.)s
+0 5665(It)m 205(is)s 415(typically)s 1305(used)s 1802(with)s
+2284(the)s 220 fnt35 2632 5662(@Case)m 240 fnt82 3419 5665(symbol)m
+4179(lik)s 2(e)k 4591(this:)s 220 fnt35 480 5164(@CurrLang @Case {)m
+480 4876( Danish @Y)m 4(ield tirsdag)k 480 4588( English @Y)m 4(ield )k 11(T)k 26(uesda)k 6(y)k
+480 4300( F)m 9(rench @Y)k 4(ield Mardi)k 480 4012(})m 240 fnt82
+0 3518(This)m 476(e)s 3(xample)k 1339(e)s 6(v)k 6(aluates)k
+2267(to)s 2506(the)s 2854(name)s 3428(of)s 3699(the)s
+4047(third)s 4556(day)s 4956(of)s 5227(the)s 5575(week)s
+6141(in)s 6384(the)s 6732(current)s 7468(language.)s 480 3144(The)m
+908(current)s 1644(language)s 2563(is)s 2773(part)s 3204(of)s
+3474(the)s 3822(style)s 4329(of)s 4599(an)s 4882(object,)s
+5573(lik)s 2(e)k 5984(its)s 6260(font.)s 6809(As)s
+7125(e)s 3(xplained)k 8110(in)s 8352(Section)s 0 2856(2.6,)m
+419(style)s 939(is)s 1162(inherited)s 2081(through)s 2896(the)s
+3257(point)s 3822(of)s 4105(appearance,)s 5300(which)s 5955(for)s
+6305(language)s 7238(can)s 7640(be)s 7935(une)s 3(xpected.)k
+0 2568(F)m 3(or)k 380(e)s 3(xample,)k 1284(an)s
+1557(inde)s 3(x)k 2131(entry)s 2666(which)s 3298(originates)s
+4281(in)s 4514(a)s 4671(French)s 5382(chapter)s 6135(b)s 4(ut)k
+6487(appears)s 7258(in)s 7491(an)s 7764(English)s 8542(inde)s 3(x)k
+0 2280(will)m 426(ha)s 4(v)k 3(e)k 927(English)s
+1715(for)s 2053(its)s 2329(language,)s 3300(so)s 3566(must)s
+4091(be)s 4373(e)s 3(xplicitly)k 5326(set)s 5651(to)s
+5890(French)s 6611(using)s 220 fnt35 7183 2277(@Language)m 240 fnt82
+8374 2280(.)m 240 fnt84 0 1487(3.9.)m 471(@OneCol)s 1533(and)s
+1974(@OneRo)s 2(w)k 240 fnt82 480 1055(The)m 220 fnt35
+913 1052(@OneRo)m 3(w)k 240 fnt82 2049 1055(symbol)m 2814(returns)s
+3533(its)s 3814(right)s 4330(parameter)s 5350(modi\207ed)s 6264(so)s
+6535(that)s 6958(only)s 7443(the)s 7796(principal)s 8706(ro)s 6(w)k
+0 767(mark)m 540(protrudes.)s 1595(This)s 2059(is)s 2257(normally)s
+3162(the)s 3498(\207rst)s 3917(ro)s 6(w)k 4324(mark,)s
+4910(b)s 4(ut)k 5260(another)s 6025(one)s 6415(may)s
+6869(be)s 7139(chosen)s 7849(by)s 8130(preceding)s 0 479(it)m
+192(with)s 220 fnt35 674 476(^/)m 240 fnt82 901 479(or)m
+220 fnt35 1160 476(^//)m 240 fnt82 1388 479(.)m 1552(F)s 3(or)k
+1941(e)s 3(xample,)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 47 53
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.9.)m 454(@OneCol)s 1479(and)s 1905(@OneRow)s
+240 fnt84 8831 13840(47)m 220 fnt35 480 13252(@OneRo)m 3(w { |0.5r)k -8(t Slope @F)k 6(ont x + 2 ^//1p @HLine //1p |0.5r)k -8(t 5 })k
+240 fnt82 0 12756(has)m 370(result)s 468 371 0 188 240 288 60 480 11777 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+468 371 0 188 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
+468 371 0 188 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 211(x)m
+240 fnt82 166 209(+)m 354(2)s 468 0 0 0 240 288 60 0 188 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+181 3(5)m
+grestore
+
+grestore
+end end restore
+grestore
+0 11061(with)m
+482(one)s 884(ro)s 6(w)k 1304(mark)s 1856(protruding)s
+2919(from)s 3443(the)s 3791(bar)s 4156(as)s 4406(sho)s 6(wn.)k
+5190(Compare)s 6123(this)s 6519(with)s 220 fnt35 480 10560(@OneRo)m 3(w { |0.5r)k -8(t Slope @F)k 6(ont x + 2 //1p @HLine //1p |0.5r)k -8(t 5 })k
+240 fnt82 0 10064(where)m 640(the)s 988(mark)s 1540(protrudes)s
+2494(from)s 3018(the)s 3366(numerator:)s 468 371 0 263 240 288 60 480 9085 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+468 371 0 263 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
+468 371 0 263 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 211(x)m
+240 fnt82 166 209(+)m 354(2)s 468 0 0 0 240 288 60 0 188 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+181 3(5)m
+grestore
+
+grestore
+end end restore
+grestore
+220 fnt35
+0 8631(@OneCol)m 240 fnt82 1016 8634(has)m 1391(the)s 1744(same)s
+2296(ef)s 6(fect)k 2897(on)s 3198(columns)s 4065(as)s
+220 fnt35 4320 8631(@OneRo)m 3(w)k 240 fnt82 5456 8634(does)m
+5951(on)s 6252(ro)s 6(ws,)k 6823(with)s 7310(the)s
+7663(symbols)s 220 fnt35 8517 8631(^|)m 240 fnt82 8722 8634(and)m
+220 fnt35 0 8343(^||)m 240 fnt82 257 8346(\(or)m 220 fnt35
+595 8343(^&)m 240 fnt82 840 8346(\))m 968(determining)s 2176(which)s
+2818(mark)s 3370(is)s 3580(chosen.)s 240 fnt84 0 7553(3.10.)m
+591(@W)s 4(ide)k 1411(and)s 1852(@High)s 240 fnt82
+480 7076(The)m 220 fnt35 910 7073(@Wide)m 240 fnt82 1687 7076(symbol)m
+2450(returns)s 3167(its)s 3446(right)s 3960(parameter)s 4977(modi\207ed)s
+5888(to)s 6130(ha)s 4(v)k 3(e)k 6634(the)s
+6985(width)s 7590(gi)s 6(v)k 3(en)k 8173(by)s
+8470(its)s 8749(left)s 0 6788(parameter)m 9(,)k 1058(which)s
+1707(must)s 2238(be)s 2527(a)s 2699(length)s 3361(\(Section)s
+4220(3.2\))s 4655(whose)s 5329(unit)s 5768(of)s 6045(measurement)s
+7386(is)s 220 fnt35 7602 6785(c)m 240 fnt82 7707 6788(,)m
+220 fnt35 7821 6785(i)m 240 fnt82 7855 6788(,)m 220 fnt35
+7968 6785(p)m 240 fnt82 8082 6788(,)m 220 fnt35 8196 6785(m)m
+240 fnt82 8365 6788(,)m 220 fnt35 8478 6785(f)m 240 fnt82
+8536 6788(,)m 220 fnt35 8650 6785(s)m 240 fnt82 8753 6788(,)m
+8867(or)s 220 fnt35 0 6497(v)m 240 fnt82 109 6500(.)m
+278(If)s 513(the)s 867(right)s 1383(parameter)s 2403(is)s
+2618(not)s 2990(as)s 3245(wide)s 3772(as)s 4027(required,)s
+4936(white)s 5528(space)s 6121(is)s 6336(added)s 6972(at)s
+7209(the)s 7563(right;)s 8131(if)s 8354(it)s 8551(is)s
+8767(too)s 0 6212(wide,)m 585(its)s 875(paragraphs)s 1988(are)s
+2349(brok)s 2(en)k 3083(\(Section)s 3949(3.4\))s 4391(so)s
+4670(that)s 5102(it)s 5308(\207ts.)s 5777(A)s 220 fnt35
+6021 6209(@OneCol)m 240 fnt82 7046 6212(operation)m 8020(is)s 8244(included)s
+0 5924(in)m 257(the)s 620(ef)s 6(fect)k 1231(of)s
+220 fnt35 1517 5921(@Wide)m 240 fnt82 2231 5924(,)m 2353(since)s
+2915(it)s 3122(does)s 3627(not)s 4008(mak)s 2(e)k
+4595(sense)s 5184(for)s 5537(an)s 5835(object)s 6494(of)s
+6780(\207x)s 3(ed)k 7329(width)s 7946(to)s 8200(ha)s 4(v)k 3(e)k
+8716(tw)s 2(o)k 0 5636(column)m 775(marks.)s 552 5262(The)m
+220 fnt35 993 5259(@High)m 240 fnt82 1725 5262(symbol)m 2498(similarly)s
+3413(ensures)s 4194(that)s 4625(its)s 4914(result)s 5517(is)s
+5740(of)s 6024(a)s 6203(gi)s 6(v)k 3(en)k
+6796(height,)s 7514(by)s 7821(adding)s 8539(white)s 0 4974(space)m
+573(at)s 790(the)s 1123(bottom.)s 1950(In)s 2191(this)s
+2572(case)s 3024(it)s 3201(is)s 3396(an)s 3664(error)s
+4172(for)s 4495(the)s 4828(right)s 5324(parameter)s 6323(to)s
+6547(be)s 6814(too)s 7158(lar)s 4(ge.)k 7780(A)s
+220 fnt35 7995 4971(@OneRo)m 3(w)k 240 fnt82 0 4686(operation)m
+960(is)s 1170(included.)s 240 fnt84 0 3893(3.11.)m 591(@HShift)s
+1550(and)s 1991(@VShift)s 240 fnt82 480 3461(The)m 220 fnt35
+917 3458(@HShift)m 240 fnt82 1802 3461(symbol)m 2572(returns)s 3296(its)s
+3582(right)s 4103(parameter)s 5127(with)s 5619(principal)s 6533(mark)s
+7095(shifted)s 7813(as)s 8073(prescribed)s 0 3173(by)m 294(its)s
+570(left)s 947(parameter:)s 220 fnt35 1124 2665(+)m 240 fnt83
+1244 2670(length)m 220 fnt35 1897 2665(@HShift)m 240 fnt83 2772 2670(object)m
+240 fnt82 3600 2668(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
+6016(the)s 6364(right)s 6875(by)s 240 fnt83 7169 2670(length)m
+240 fnt82 7762 2668(;)m 220 fnt35 1180 2160(-)m 240 fnt83
+1244 2165(length)m 220 fnt35 1897 2160(@HShift)m 240 fnt83 2772 2165(object)m
+240 fnt82 3600 2163(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
+6016(the)s 6364(left)s 6741(by)s 240 fnt83 7035 2165(length)m
+240 fnt82 7628 2163(;)m 240 fnt83 1244 1660(length)m 220 fnt35
+1897 1655(@HShift)m 240 fnt83 2772 1660(object)m 240 fnt82 3600 1658(Principal)m
+4512(mark)s 5058(shifted)s 5760(so)s 6020(as)s 6264(to)s
+6497(lie)s 240 fnt83 6786 1660(length)m 240 fnt82 7433 1658(to)m
+7666(the)s 8008(right)s 8513(of)s 8778(the)s 3600 1370(left)m
+3977(edge)s 4485(of)s 240 fnt83 4756 1372(object)m 240 fnt82
+5344 1370(;)m 0 867(In)m 256(each)s 751(chase)s 220 fnt35
+1338 864(@HShift)m 240 fnt82 2213 867(includes)m 3061(a)s 220 fnt35
+3227 864(@OneCol)m 240 fnt82 4239 867(ef)m 6(fect.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 48 54
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(48)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 480 13203(The)m
+916(units)s 1440(of)s 1720(measurement)s 3062(of)s 240 fnt83
+3342 13205(length)m 240 fnt82 4003 13203(may)m 4478(be)s 220 fnt35
+4768 13200(c)m 240 fnt82 4873 13203(,)m 220 fnt35 4989 13200(i)m
+240 fnt82 5023 13203(,)m 220 fnt35 5138 13200(p)m 240 fnt82
+5252 13203(,)m 220 fnt35 5368 13200(m)m 240 fnt82 5537 13203(,)m
+220 fnt35 5652 13200(f)m 240 fnt82 5710 13203(,)m 220 fnt35
+5825 13200(s)m 240 fnt82 5928 13203(,)m 220 fnt35 6044 13200(v)m
+240 fnt82 6153 13203(,)m 6268(or)s 220 fnt35 6536 13200(w)m
+240 fnt82 6692 13203(.)m 6864(In)s 7129(the)s 7485(latter)s
+8043(case,)s 220 fnt35 8569 13200(1w)m 240 fnt82 8916 13203(is)m
+0 12915(tak)m 2(en)k 579(to)s 825(be)s 1113(the)s
+1468(width)s 2076(of)s 2354(the)s 2708(right)s 3226(parameter)s 9(,)k
+4285(so)s 4557(that,)s 5029(for)s 5373(e)s 3(xample,)k
+220 fnt35 6294 12912(0.5w @HShift)m 240 fnt82 7699 12915(will)m 8132(centre)s
+8778(the)s 0 12627(principal)m 904(column)s 1679(mark)s 2231(within)s
+2899(the)s 3247(right)s 3758(parameter)s 13(.)k 548 12253(The)m
+220 fnt35 984 12250(@VShift)m 240 fnt82 1855 12253(symbol)m 2624(is)s
+2842(similar)s 3572(e)s 3(xcept)k 4261(that)s 4688(it)s
+4888(applies)s 5624(v)s 3(ertically)k 6584(to)s 6832(the)s
+7188(principal)s 8100(ro)s 6(w)k 8529(mark:)s 220 fnt35
+0 11962(+)m 240 fnt83 120 11967(length)m 240 fnt82 771 11965(shifts)m
+1337(it)s 1527(do)s 6(wn,)k 220 fnt35 2159 11962(-)m
+240 fnt83 2223 11967(length)m 240 fnt82 2874 11965(shifts)m 3440(it)s
+3629(up,)s 3974(and)s 240 fnt83 4376 11967(length)m 240 fnt82
+5027 11965(shifts)m 5593(it)s 5783(to)s 240 fnt83 6019 11967(length)m
+240 fnt82 6670 11965(belo)m 6(w)k 7301(the)s 7647(top)s
+8004(edge)s 8510(of)s 8778(the)s 0 11677(object.)m 748(W)s 9(ith)k
+220 fnt35 1274 11674(@VShift)m 240 fnt82 2077 11677(,)m 220 fnt35
+2184 11674(1w)m 240 fnt82 2522 11677(is)m 2732(tak)s 2(en)k
+3305(to)s 3544(be)s 3826(the)s 4174(height)s 4832(of)s
+5103(the)s 5451(right)s 5962(parameter)s 13(.)k 240 fnt84
+0 10884(3.12.)m 591(@HExpand)s 1854(and)s 2295(@VExpand)s 240 fnt82
+558 10407(The)m 220 fnt35 1004 10404(@HExpand)m 240 fnt82 2195 10407(symbol)m
+2973(causes)s 3666(its)s 3961(right)s 4490(parameter)s 5522(to)s
+5779(be)s 6079(as)s 6348(wide)s 6887(as)s 7155(it)s
+7365(possibly)s 8235(could)s 8844(be)s 0 10119(without)m 784(violating)s
+1679(a)s 220 fnt35 1837 10116(@Wide)m 240 fnt82 2603 10119(symbol)m
+3355(or)s 3606(intruding)s 4528(into)s 4945(the)s 5285(space)s
+5864(occupied)s 6778(by)s 7064(neighbouring)s 8386(g)s 1(aps)k
+8867(or)s 0 9831(objects.)m 841(The)s 220 fnt35 1269 9828(@VExpand)m
+240 fnt82 2430 9831(symbol)m 3190(is)s 3400(similar)s 9(,)k
+4160(b)s 4(ut)k 4522(it)s 4714(af)s 6(fects)k
+5394(height.)s 6156(F)s 3(or)k 6545(e)s 3(xample,)k
+7459(in)s 7702(the)s 8050(object)s 220 fnt35 480 9330(8i @Wide 11i @High {)m
+480 9042( //1i ||1i @HExpand @VExpand x ||1i)m 480 8754( //1i)m 480 8466(})m 240 fnt82 0 7972(object)m
+220 fnt35 655 7969(x)m 240 fnt82 834 7972(could)m 1435(ha)s 4(v)k 3(e)k
+1947(an)s 3(y)k 2356(size)s 2794(up)s 3098(to)s
+3348(six)s 3694(inches)s 4367(wide)s 4899(by)s 5204(nine)s
+5683(inches)s 6357(high,)s 6901(so)s 7178(the)s 220 fnt35
+7537 7969(@HExpand)m 240 fnt82 8722 7972(and)m 220 fnt35 0 7681(@VExpand)m
+240 fnt82 1166 7684(symbols)m 2021(cause)s 2614(it)s 2812(to)s
+3057(ha)s 4(v)k 3(e)k 3564(e)s 3(xactly)k
+4311(this)s 4713(size.)s 5254(This)s 5736(is)s 5952(important,)s
+6994(for)s 7338(e)s 3(xample,)k 8258(if)s 220 fnt35
+8481 7681(x)m 240 fnt82 8655 7684(con)m 8998(-)s 0 7396(tains)m
+220 fnt35 502 7393(|1r)m -8(t)k 240 fnt82 879 7396(or)m
+220 fnt35 1138 7393(/1r)m -8(t)k 240 fnt82 1459 7396(;)m
+1571(without)s 2362(the)s 2710(e)s 3(xpansion)k 3735(these)s
+4282(might)s 4900(not)s 5266(mo)s 3(v)k 3(e)k
+5848(as)s 6098(f)s 2(ar)k 6420(across)s 7068(or)s
+7327(do)s 6(wn)k 7911(as)s 8161(e)s 3(xpected.)k
+480 7022(As)m 809(Section)s 1595(2.6)s 1961(e)s 3(xplains)k
+2818(in)s 3074(detail,)s 3723(most)s 4260(objects)s 5001(are)s
+5360(already)s 6130(as)s 6392(lar)s 4(ge)k 6933(as)s
+7196(the)s 3(y)k 7671(possibly)s 8536(could)s 0 6734(be.)m
+379(Consequently)s 1738(these)s 2273(symbols)s 3110(are)s 3446(needed)s
+4170(only)s 4638(rarely)s 15(.)k 220 fnt35 5331 6731(@HExpand)m
+240 fnt82 6493 6734(includes)m 7329(a)s 220 fnt35 7483 6731(@OneCol)m
+240 fnt82 8483 6734(ef)m 6(fect,)k 0 6446(and)m 220 fnt35
+404 6443(@VExpand)m 240 fnt82 1565 6446(includes)m 2413(a)s 220 fnt35
+2579 6443(@OneRo)m 3(w)k 240 fnt82 3710 6446(ef)m 6(fect.)k
+240 fnt84 0 5657(3.13.)m 591(@HContract)s 1976(and)s 2417(@VContract)s
+240 fnt82 542 5225(The)m 220 fnt35 972 5222(@HContr)m 2(act)k
+240 fnt82 2239 5225(symbol)m 3001(reduces)s 3784(the)s 4135(size)s
+4564(of)s 4837(its)s 5116(right)s 5629(parameter)s 6645(to)s
+6887(a)s 7055(reasonable)s 8136(minimum)s 0 4937(\(after)m 575(paragraph)s
+1588(breaking\).)s 2668(F)s 3(or)k 3057(e)s 3(xample,)k
+220 fnt35 480 4436(5i @Wide @HContr)m 2(act { A |1r)k -8(t B })k 240 fnt82
+0 3942(has)m 370(result)s 480 3491(A)m 650(B)s 0 3040(in)m
+233(which)s 864(the)s 1201(B)s 1393(is)s 1592(much)s
+2170(closer)s 2789(to)s 3017(the)s 3354(A)s 3574(than)s
+4032(it)s 4213(w)s 2(ould)k 4857(otherwise)s 5831(ha)s 4(v)k 3(e)k
+6321(been.)s 220 fnt35 6926 3037(@VContr)m 2(act)k 240 fnt82
+8167 3040(is)m 8366(similar)s 9(,)k 0 2752(b)m 4(ut)k
+362(in)s 605(a)s 771(v)s 3(ertical)k 1538(direction.)s
+2551(See)s 2952(Section)s 3726(2.6)s 4079(for)s 4417(a)s
+4583(more)s 5130(e)s 3(xtensi)k 6(v)k 3(e)k
+6077(discussion.)s 240 fnt84 0 2008(3.14.)m 591(@HLimited)s 1864(and)s
+2305(@VLimited)s 240 fnt82 579 1576(The)m 220 fnt35 1047 1573(@HLimited)m
+240 fnt82 2221 1576(symbol)m 3021(limits)s 3654(the)s 4042(width)s
+4684(a)s 4(v)k 6(ailable)k 5631(to)s 5910(recursi)s 6(v)k 3(e)k
+6871(and)s 7315(recepti)s 6(v)k 3(e)k 8277(symbols)s
+0 1288(within)m 692(its)s 993(right)s 1529(parameter)s 2567(to)s
+2831(whate)s 6(v)k 3(er)k 3783(is)s 4018(a)s 4(v)k 6(ailable)k
+4950(without)s 5766(increasing)s 6826(the)s 7198(e)s 3(xisting)k
+8030(size)s 8482(of)s 8778(the)s 220 fnt35 0 997(@HLimited)m
+240 fnt82 1138 1000(object.)m 1890(So)s 2199(this)s 2599(symbol)s
+3362(acts)s 3788(lik)s 2(e)k 220 fnt35 4204 997(@Wide)m
+240 fnt82 4981 1000(with)m 5467(respect)s 6206(to)s 6449(limiting)s
+7261(the)s 7613(space)s 8204(occupied)s 0 712(by)m 315(recursi)s 6(v)k 3(e)k
+1258(and)s 1684(recepti)s 6(v)k 3(e)k 2627(symbols,)s
+3553(e)s 3(xcept)k 4256(that)s 4695(instead)s 5451(of)s
+5744(enforcing)s 6734(a)s 6921(\207x)s 3(ed)k 7477(constant)s
+8355(limit,)s 8934(it)s 0 424(enforces)m 860(whate)s 6(v)k 3(er)k
+1787(size)s 2214(is)s 2424(already)s 3181(in)s 3424(place.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 49 55
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.14.)m 574(@HLimited)s 1763(and)s 2189(@VLimited)s
+240 fnt84 8832 13840(49)m 240 fnt82 480 13249(The)m 220 fnt35
+904 13246(@VLimited)m 240 fnt82 2022 13249(symbol)m 2778(is)s 2983(e)s 3(xactly)k
+3719(the)s 4063(same,)s 4656(e)s 3(xcept)k 5332(that)s
+5746(it)s 5933(applies)s 6656(v)s 3(ertically)k 7604(rather)s
+8215(than)s 8679(hor)s 8998(-)s 0 12961(izontally)m 15(.)k
+240 fnt84 0 12168(3.15.)m 591(@HAdjust,)s 1804(@V)s 32(Adjust,)k
+2972(and)s 3413(@P)s 17(Adjust)k 240 fnt82 551 11692(These)m
+1189(symbols)s 2050(spread)s 2743(their)s 3252(right)s 3774(parameter)s
+4800(apart)s 5348(until)s 5852(it)s 6056(occupies)s 6955(all)s
+7260(the)s 7619(space)s 8218(a)s 4(v)k 6(ailable)k
+0 11404(to)m 268(it;)s 220 fnt35 602 11401(@HAdjust)m 240 fnt82
+1678 11404(adjusts)m 220 fnt35 2422 11401(|)m 240 fnt82 2549 11404(sequences,)m
+220 fnt35 3656 11401(@V)m 17(Adjust)k 240 fnt82 4702 11404(adjusts)m
+220 fnt35 5447 11401(/)m 240 fnt82 5601 11404(sequences,)m 6707(and)s
+220 fnt35 7141 11401(@P)m 26(Adjust)k 240 fnt82 8179 11404(adjusts)m
+220 fnt35 8924 11401(&)m 240 fnt82 0 11116(sequences.)m 1134(F)s 3(or)k
+1523(e)s 3(xample,)k 220 fnt35 480 10615(4i @Wide @P)m 26(Adjust { 1 2 3 4 5 6 7 8 })k
+240 fnt82 0 10118(has)m 370(result)s 480 9663(1)m 1274(2)s
+2088(3)s 2892(4)s 3706(5)s 4512(6)s 5325(7)s
+6133(8)s 0 9209(More)m 571(precisely)s 15(,)k 1521(the)s
+1865(widening)s 2806(is)s 3012(ef)s 6(fected)k 3828(by)s
+4119(enlar)s 4(ging)k 5067(the)s 5411(size)s 5835(of)s
+6102(each)s 6593(component)s 7714(e)s 3(xcept)k 8391(the)s
+8735(last)s 0 8921(by)m 284(an)s 556(equal)s 1118(fraction)s
+1907(of)s 2167(the)s 2504(space)s 3080(that)s 3488(w)s 2(ould)k
+4132(otherwise)s 5106(be)s 5377(left)s 5744(o)s 3(v)k 3(er)k
+6212(\211)s 6381(just)s 6775(the)s 7113(opposite)s 7969(of)s
+8229(the)s 8566(usual)s 0 8633(procedure,)m 1063(which)s 1705(assigns)s
+2447(all)s 2740(the)s 3088(lefto)s 3(v)k 3(er)k
+3884(space)s 4471(to)s 4710(the)s 5058(last)s 5449(component)s
+6573(\(Section)s 7426(2.6\).)s 220 fnt35 480 8256(@P)m 26(Adjust)k
+240 fnt82 1497 8259(is)m 1716(used)s 2222(by)s 2525(the)s
+220 fnt35 2883 8256(adjust)m 240 fnt82 3533 8259(and)m 220 fnt35
+3946 8256(outdent)m 240 fnt82 4743 8259(options)m 5508(of)s 5789(the)s
+220 fnt35 6146 8256(@Break)m 240 fnt82 7011 8259(symbol)m 7780(\(Section)s
+8643(3.4\).)s 0 7971(It)m 213(has)s 591(a)s 765(slight)s
+1364(peculiarity:)s 2559(it)s 2759(will)s 3193(not)s 3567(enlar)s 4(ge)k
+4330(components)s 5546(when)s 6130(the)s 6486(immediately)s 7742(follo)s 6(wing)k
+8728(g)s 1(ap)k 0 7683(has)m 398(width)s 1029(0.)s
+1342(This)s 1847(is)s 2086(to)s 2354(pre)s 6(v)k 3(ent)k
+3151(space)s 3767(from)s 4320(appearing)s 5345(\(for)s 5791(e)s 3(xample\))k
+6755(between)s 7638(a)s 7833(w)s 2(ord)k 8410(and)s
+8843(an)s 0 7395(immediately)m 1248(follo)s 6(wing)k 2225(comma.)s
+3093(The)s 3521(other)s 4072(tw)s 2(o)k 4482(symbols)s
+5331(will)s 5757(enlar)s 4(ge)k 6512(such)s 7008(components.)s
+240 fnt84 0 6602(3.16.)m 591(@HScale)s 1587(and)s 2028(@VScale)s
+220 fnt35 538 6167(@HScale)m 240 fnt82 1516 6170(causes)m 2189(its)s
+2462(right)s 2970(parameter)s 3982(to)s 4218(e)s 3(xpand)k
+4962(to)s 5199(\207ll)s 5516(the)s 5861(space)s 6446(a)s 4(v)k 6(ailable,)k
+7402(by)s 7693(geometricallly)s 0 5882(scaling)m 730(it:)s 220 fnt35
+480 5381(4i @Wide @HScale { 1 2 3 4 5 6 7 8 })m 240 fnt82 0 4887(has)m 370(result)s gsave
+480 0 translate
+4.4965 1.0000 scale
+0 4432(1)m
+155(2)s 329(3)s 493(4)s 667(5)s 833(6)s
+1006(7)s 1174(8)s
+grestore
+0 3978(and)m 220 fnt35 480 3527(0.5i @Wide @HScale { 1 2 3 4 5 6 7 8 })m
+240 fnt82 0 3033(has)m 370(result)s gsave
+480 0 translate
+0.5621 1.0000 scale
+0 2578(1)m 155(2)s
+329(3)s 493(4)s 667(5)s 833(6)s 1006(7)s
+1174(8)s
+grestore
+220 fnt35 0 2121(@HScale)m 240 fnt82 980 2124(\207rst)m
+1409(applies)s 220 fnt35 2136 2121(@HContr)m 2(act)k 240 fnt82
+3398 2124(to)m 3635(its)s 3910(parameter)s 9(,)k 4960(then)s
+5427(horizontally)s 6635(scales)s 7254(it)s 7444(to)s 7682(the)s
+8028(actual)s 8651(size.)s 0 1836(The)m 433(principal)s 1342(mark)s
+1899(of)s 2175(the)s 2528(right)s 3044(parameter)s 4063(has)s
+4438(no)s 4736(ef)s 6(fect)k 5337(on)s 5639(the)s
+5992(result;)s 6639(the)s 6992(parameter)s 8011(is)s 8226(scaled)s
+8887(to)s 0 1548(the)m 365(actual)s 1007(size)s 1451(and)s
+1872(positioned)s 2944(to)s 3200(\207ll)s 3537(the)s 3902(space)s
+4506(a)s 4(v)k 6(ailable.)k 5539(\(T)s 19(aking)k
+6347(account)s 7168(of)s 7456(alignment)s 8489(of)s 8778(the)s
+0 1260(principal)m 904(mark)s 1456(only)s 1936(causes)s 2611(trouble)s
+3344(in)s 3587(practice.\))s 220 fnt35 480 883(@VScale)m 240 fnt82
+1460 886(is)m 1681(similar)s 9(,)k 2452(b)s 4(ut)k
+2825(in)s 3080(a)s 3257(v)s 3(ertical)k 4035(direction.)s
+220 fnt35 5059 883(@HScale)m 240 fnt82 6051 886(and)m 220 fnt35
+6467 883(@VScale)m 240 fnt82 7447 886(each)m 7953(ha)s 4(v)k 3(e)k
+8465(both)s 8960(a)s 220 fnt35 0 595(@OneCol)m 240 fnt82
+1012 598(and)m 1416(a)s 220 fnt35 1582 595(@OneRo)m 3(w)k
+240 fnt82 2713 598(ef)m 6(fect.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 50 56
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(50)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt84 0 13203(3.17.)m
+591(@HCo)s 2(v)k 2(er)k 1679(and)s 2120(@VCo)s 2(v)k 2(er)k
+240 fnt82 529 12771(The)m 220 fnt35 946 12768(@VCo)m 3(v)k 5(er)k
+240 fnt82 1941 12771(symbol)m 2690(v)s 3(ertically)k 3631(scales)s
+4241(its)s 4506(right)s 5006(parameter)s 6009(so)s 6264(that)s
+6671(it)s 6852(co)s 3(v)k 3(ers)k 7510(e)s 6(v)k 3(ery)k
+8075(object)s 8708(that)s 0 12483(shares)m 648(its)s 924(ro)s 6(w)k
+1344(mark.)s 1999(F)s 3(or)k 2388(e)s 3(xample,)k
+220 fnt35 480 11982(@VCo)m 3(v)k 5(er \( 45d @Rotate Hello @VCo)k 3(v)k 5(er \))k
+240 fnt82 0 11486(produces)m 748 843 0 396 240 288 60 480 10303 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+748 843 0 396 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
+gsave
+0 396 translate
+1.0000 4.1328 scale
+0 -54(\()m
+grestore
+gsave
+210 396 translate
+45.0000 rotate
+0 -54(Hello)m
+grestore
+gsave
+680 396 translate
+1.0000 4.1328 scale
+0 -54(\))m
+
+grestore
+
+grestore
+end end restore
+grestore
+0 9852(The)m 428(ro)s 6(w)k 848(mark)s 1400(has)s
+1770(been)s 2279(added)s 2909(to)s 3148(sho)s 6(w)k
+3702(clearly)s 4405(where)s 5045(it)s 5237(lies.)s 5732(This)s
+6208(should)s 6905(be)s 7187(compared)s 8188(with)s 220 fnt35
+480 9351(@VScale \( 45d @Rotate Hello @VScale \))m 240 fnt82 0 8855(which)m 642(produces)s 748 486 0 39 240 288 60 480 8029 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+748 486 0 39 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
+gsave
+0 229 translate
+1.0000 2.3824 scale
+0 -54(\()m
+
+grestore
+gsave
+210 39 translate
+45.0000 rotate
+0 -54(Hello)m
+grestore
+gsave
+0 229 translate
+1.0000 2.3824 scale
+680 -54(\))m
+grestore
+
+grestore
+end end restore
+grestore
+0 7578(Scaling)m 786(abandons)s 1759(mark)s
+2328(alignment)s 3361(and)s 3782(so)s 4065(is)s 4292(able)s
+4763(to)s 5018(e)s 3(xactly)k 5776(co)s 3(v)k 3(er)k
+6378(the)s 6743(rest)s 7164(of)s 7452(the)s 7817(ro)s 6(w)k 15(,)k
+8292(whereas)s 0 7290(co)m 3(v)k 3(ering)k 896(preserv)s 3(es)k
+1859(mark)s 2424(alignment)s 3453(and)s 3869(so)s 4148(is)s
+4371(obliged)s 5160(in)s 5415(general)s 6186(to)s 6438(more)s
+6998(than)s 7479(co)s 3(v)k 3(er)k 8077(the)s
+8438(rest)s 8855(of)s 0 7002(the)m 348(ro)s 6(w)k 15(.)k
+480 6628(If)m 700(the)s 1038(parameter)s 2042(of)s 220 fnt35
+2303 6625(@VCo)m 3(v)k 5(er)k 240 fnt82 3299 6628(has)m
+3658(zero)s 4112(v)s 3(ertical)k 4869(size,)s 5337(this)s
+5723(is)s 5923(tak)s 2(en)k 6485(to)s 6714(mean)s
+7279(that)s 7687(co)s 3(v)k 3(ering)k 8561(is)s
+8760(not)s 0 6340(required)m 863(after)s 1368(all)s 1670(and)s
+2083(the)s 220 fnt35 2441 6337(@VCo)m 3(v)k 5(er)k
+240 fnt82 3456 6340(is)m 3675(silently)s 4441(ignored.)s 5345(If)s
+5585(ho)s 6(we)k 6(v)k 3(er)k 6463(the)s
+6820(parameter)s 7843(has)s 8223(non-zero)s 0 6052(size)m 434(abo)s 3(v)k 3(e)k
+1064(the)s 1420(mark)s 1980(b)s 4(ut)k 2350(zero)s
+2822(size)s 3256(belo)s 6(w)k 15(,)k 3935(or)s
+4202(vice)s 4664(v)s 3(ersa,)k 5280(this)s 5684(is)s
+5901(tak)s 2(en)k 6482(to)s 6729(be)s 7019(an)s
+7310(error)s 7841(since)s 8396(scaling)s 0 5764(cannot)m 698(mak)s 2(e)k
+1270(the)s 1618(parameter)s 2632(co)s 3(v)k 3(er)k
+3217(the)s 3565(rest)s 3969(of)s 4240(the)s 4588(ro)s 6(w)k 15(.)k
+220 fnt35 480 5387(@HCo)m 3(v)k 5(er)k 240 fnt82
+1505 5390(is)m 1722(similar)s 9(,)k 2489(horizontally)s 3705(co)s 3(v)k 3(ering)k
+4596(all)s 4896(objects)s 5631(that)s 6056(share)s 6623(its)s
+6906(column)s 7688(mark.)s 8350(Neither)s 0 5102(symbol)m 753(w)s 2(orks)k
+1379(well)s 1837(near)s 2300(g)s 1(alle)k 3(y)k
+2926(tar)s 4(gets,)k 3658(because)s 4463(the)s 4803(scale)s
+5328(f)s 2(actor)k 5934(to)s 6166(apply)s 6744(is)s
+6946(determined)s 8071(before)s 8729(an)s 3(y)k 0 4814(g)m 1(alle)k 3(y)k
+634(\210ushing)s 1459(tak)s 2(es)k 1999(place.)s 240 fnt84
+0 4021(3.18.)m 591(@StartHSpan,@StartVSpan,)s 3642(@StartHVSpan,)s 5374(@HSpan,)s 6416(and)s
+6857(@VSpan)s 240 fnt82 556 3544(These)m 1199(symbols)s 2065(w)s 2(ork)k
+2632(together)s 3492(to)s 3747(produce)s 4591(spanning)s 5525(columns)s
+6403(and)s 6824(ro)s 6(ws)k 7350(in)s 7610(a)s
+7792(more)s 8356(\210e)s 3(xible)k 0 3256(w)m 2(ay)k
+451(than)s 920(is)s 1130(possible)s 1970(in)s 2213(practice)s
+3024(with)s 220 fnt35 3506 3253(//)m 240 fnt82 3691 3256(and)m
+220 fnt35 4095 3253(||)m 240 fnt82 4189 3256(.)m 4353(An)s
+4703(object)s 220 fnt35 480 2755(@Star)m -8(tHSpan object)k 240 fnt82
+0 2258(causes)m 220 fnt35 682 2255(object)m 240 fnt82 1330 2258(to)m
+1577(be)s 1866(printed,)s 2658(b)s 4(ut)k 3027(occup)s 2(ying)k
+4084(all)s 4384(the)s 4740(horizontal)s 5771(space)s 6366(to)s
+6612(the)s 6968(right)s 7486(on)s 7791(the)s 8146(ro)s 6(w)k
+8574(mark)s 0 1970(on)m 289(which)s 922(it)s 1105(lies)s
+1478(up)s 1762(to)s 1992(and)s 2387(including)s 3335(the)s
+3675(rightmost)s 220 fnt35 4642 1967(@HSpan)m 240 fnt82 5572 1970(symbol)m
+6323(on)s 6611(that)s 7020(mark)s 7563(not)s 7920(preceded)s
+8832(by)s 220 fnt35 0 1679(@Star)m -8(tHVSpan)k 240 fnt82
+1496 1682(,)m 220 fnt35 1603 1679(@Star)m -8(tHSpan)k 240 fnt82
+2953 1682(,)m 220 fnt35 3059 1679(@Star)m -8(tVSpan)k 240 fnt82
+4397 1682(,)m 4503(or)s 220 fnt35 4761 1679(@VSpan)m 240 fnt82
+5628 1682(.)m 5791(The)s 6218(column)s 6992(mark)s 7543(of)s
+7813(this)s 8208(spanning)s 0 1394(object)m 644(is)s 854(not)s
+1220(constrained)s 2380(to)s 2619(align)s 3154(with)s 3636(an)s 3(y)k
+4033(of)s 4304(the)s 4652(column)s 5427(marks)s 6062(of)s
+6333(the)s 6681(columns)s 7543(it)s 7735(spans.)s 480 1020(If)m
+739(there)s 1301(is)s 1541(no)s 220 fnt35 1863 1017(@HSpan)m
+240 fnt82 2831 1020(symbol)m 3621(an)s 3(ywhere)k 4633(to)s
+4901(the)s 5279(right)s 5819(of)s 220 fnt35 6119 1017(@Star)m -8(tHSpan)k
+240 fnt82 7469 1020(,)m 7606(then)s 8104(the)s 8482(object)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 51 57
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.18.)m 574(@StartHSpan,@StartVSpan,)s 3376(@StartHVSpan,)s 4953(@HSpan,)s
+5919(and)s 6345(@VSpan)s 240 fnt84 8839 13840(51)m 240 fnt82
+0 13205(spans)m 585(only)s 1067(its)s 1345(o)s 6(wn)k
+1811(column.)s 2695(This)s 3173(means)s 3837(that)s 4257(it)s
+4451(occupies)s 5341(that)s 5761(column)s 6538(as)s 6790(usual)s
+7352(b)s 4(ut)k 7716(its)s 7994(mark)s 8548(is)s
+8760(not)s 0 12917(constrained)m 1160(to)s 1399(align)s 1934(with)s
+2416(those)s 2977(of)s 3248(the)s 3596(other)s 4147(objects)s
+4875(in)s 5118(the)s 5466(column.)s 480 12543(Similarly)m 15(,)k
+1457(the)s 220 fnt35 1801 12540(@Star)m -8(tVSpan)k 240 fnt82
+3196 12543(symbol)m 3952(causes)s 4624(its)s 4896(object)s 5537(to)s
+5772(occup)s 2(y)k 6513(all)s 6802(the)s 7147(v)s 3(ertical)k
+7910(space)s 8493(belo)s 6(w)k 0 12255(it)m 191(on)s
+486(the)s 832(column)s 1605(mark)s 2155(on)s 2451(which)s
+3091(it)s 3281(lies,)s 3717(do)s 6(wn)k 4299(to)s
+4537(and)s 4939(including)s 5894(the)s 6240(bottommost)s 220 fnt35
+7441 12252(@VSpan)m 240 fnt82 8366 12255(symbol)m 0 11967(on)m 294(that)s
+708(mark)s 1256(not)s 1618(preceded)s 2535(by)s 2825(a)s
+220 fnt35 2987 11964(@Star)m -8(tHVSpan)k 240 fnt82 4483 11967(,)m
+220 fnt35 4586 11964(@Star)m -8(tHSpan)k 240 fnt82 5936 11967(,)m
+220 fnt35 6039 11964(@Star)m -8(tVSpan)k 240 fnt82 7377 11967(,)m
+7480(or)s 220 fnt35 7735 11964(@HSpan)m 240 fnt82 8614 11967(;)m
+8722(and)s 0 11679(if)m 206(there)s 728(is)s 927(no)s
+220 fnt35 1209 11676(@VSpan)m 240 fnt82 2125 11679(symbol)m 2874(an)s 3(ywhere)k
+3846(belo)s 6(w)k 4468(it)s 4649(on)s 4935(that)s
+5342(mark,)s 5929(then)s 6387(the)s 6724(object)s 7357(spans)s
+7929(only)s 8398(its)s 8662(o)s 6(wn)k 0 11391(ro)m 6(w)k 15(,)k
+458(occup)s 2(ying)k 1507(its)s 1783(ro)s 6(w)k
+2203(b)s 4(ut)k 2565(with)s 3047(its)s 3323(mark)s
+3875(not)s 4241(constrained)s 5401(to)s 5640(align)s 6175(with)s
+6657(the)s 7005(ro)s 6(w)k 7425(mark.)s 480 11017(The)m
+220 fnt35 949 11014(@Star)m -8(tHVSpan)k 240 fnt82 2547 11017(symbol)m
+3349(combines)s 4359(the)s 4748(ef)s 6(fects)k 5470(of)s
+220 fnt35 5783 11014(@Star)m -8(tHSpan)k 240 fnt82 7235 11017(and)m
+220 fnt35 7681 11014(@Star)m -8(tVSpan)k 240 fnt82 9019 11017(,)m
+0 10729(allo)m 6(wing)k 884(an)s 1167(object)s 1811(to)s
+2050(span)s 2546(both)s 3029(columns)s 3891(and)s 4295(ro)s 6(ws)k
+4805(simultaneously)s 15(.)k 6402(F)s 3(or)k 6791(e)s 3(xample,)k
+7705(in)s 220 fnt35 480 10228(@Star)m -8(tHVSpan x | | @HSpan)k 480 9940(/)m
+480 9652(@VSpan | |)m 240 fnt82 0 9156(the)m 378(object)s 220 fnt35
+1052 9153(x)m 240 fnt82 1250 9156(will)m 1706(occup)s 2(y)k
+2481(a)s 2677(rectangular)s 3841(area)s 4328(spanning)s 5276(three)s
+5840(columns,)s 6788(tw)s 2(o)k 7228(ro)s 6(ws,)k
+7824(and)s 8258(the)s 8637(g)s 1(aps)k 0 8868(between)m
+854(them.)s 480 8494(The)m 908(objects)s 1636(lying)s 2182(in)s
+2425(the)s 2774(re)s 3(gion)k 3439(spanned)s 4283(should)s
+4980(all)s 5274(be)s 5556(empty)s 15(,)k 6247(or)s
+6506(the)s 220 fnt35 6855 8491(@HSpan)m 240 fnt82 7794 8494(and)m
+220 fnt35 8199 8491(@VSpan)m 240 fnt82 0 8206(symbols)m 865(can)s
+1271(be)s 1570(used)s 2084(to)s 2340(document)s 3360(the)s
+3725(spanning)s 4660(that)s 5095(is)s 5322(occurring.)s 6418(At)s
+6734(present)s 7501(there)s 8051(may)s 8534(be)s 8833(no)s
+0 7918(g)m 1(alle)k 3(y)k 639(tar)s 4(gets)k
+1328(or)s 1593(recursi)s 6(v)k 3(e)k 2521(symbols)s
+3376(within)s 4050(the)s 4404(right)s 4921(parameter)s 5941(of)s
+220 fnt35 6218 7915(@Star)m -8(tHSpan)k 240 fnt82 7568 7918(,)m
+220 fnt35 7681 7915(@Star)m -8(tVSpan)k 240 fnt82 9019 7918(,)m
+0 7630(or)m 220 fnt35 246 7627(@Star)m -8(tHVSpan)k 240 fnt82
+1742 7630(.)m 1892(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+2838(the)s 3172(right)s 3670(parameter)s 4670(may)s 5122(otherwise)s
+6093(be)s 6362(an)s 6631(arbitrary)s 7492(object,)s 8169(including)s
+0 7342(paragraphs)m 1100(of)s 1371(te)s 3(xt)k 1786(that)s
+2204(require)s 2936(breaking.)s 480 6968(If)m 722(the)s 1082(right)s
+1605(parameter)s 2631(of)s 220 fnt35 2914 6965(@Star)m -8(tHSpan)k
+240 fnt82 4264 6968(,)m 220 fnt35 4383 6965(@Star)m -8(tVSpan)k
+240 fnt82 5721 6968(,)m 5840(or)s 220 fnt35 6111 6965(@Star)m -8(tHVSpan)k
+240 fnt82 7679 6968(occupies)m 8579(more)s 0 6680(horizontal)m 1022(or)s
+1279(v)s 3(ertical)k 2044(space)s 2629(than)s 3095(all)s
+3386(of)s 3655(the)s 4001(spanned)s 4842(columns)s 5701(or)s
+5958(ro)s 6(ws)k 6466(combined)s 7466(require,)s 8247(the)s
+8592(e)s 3(xtra)k 0 6392(space)m 601(goes)s 1106(into)s
+1546(the)s 1908(last)s 2314(spanned)s 3172(column)s 3962(or)s
+4235(ro)s 6(w)k 15(.)k 4765(Ov)s 3(erlapping)k
+6026(spanning)s 6958(ro)s 6(ws)k 7483(and)s 7902(columns)s
+8779(are)s 0 6104(permitted.)m 1081(Gaps)s 1626(spanned)s 2471(by)s
+2767(span)s 3266(objects)s 3996(are)s 4345(unbreakable)s 5572(\(their)s
+220 fnt35 6151 6101(u)m 240 fnt82 6321 6104(indicator)m 7232(is)s
+7444(set)s 7772(automatically)s 0 5816(and)m 404(cannot)s 1102(be)s
+1384(re)s 6(v)k 4(ok)k 2(ed\).)k 240 fnt84
+0 5033(3.19.)m 591(@Scale)s 240 fnt82 588 4601(This)m 1112(symbol)s
+1920(geometrically)s 3335(scales)s 4004(its)s 4328(right)s 4887(parameter)s
+5949(by)s 6291(the)s 6687(scale)s 7268(f)s 2(actor)k
+7930(gi)s 6(v)k 3(en)k 8558(in)s 8850(its)s
+0 4313(left)m 377(parameter:)s 220 fnt35 480 3812(1.0 @Scale Hello 2.0 @Scale Hello 0.5 @Scale Hello)m 240 fnt82
+0 3357(has)m 370(result)s gsave
+480 2849 translate
+1.0000 1.0000 scale
+0 -54(Hello)m
+grestore
+gsave
+1124 2849 translate
+2.0000 2.0000 scale
+0 -54(Hello)m
+grestore
+gsave
+2292 2849 translate
+0.5000 0.5000 scale
+0 -54(Hello)m
+
+grestore
+0 2286(The)m 433(left)s 815(parameter)s 1834(can)s 2228(be)s
+2515(tw)s 2(o)k 2930(scale)s 3468(f)s 2(actors,)k
+4227(in)s 4475(which)s 5122(case)s 5594(the)s 5947(\207rst)s
+6383(applies)s 7116(horizontally)s 15(,)k 8368(and)s 8778(the)s
+0 1998(second)m 723(v)s 3(ertically:)k 220 fnt35 480 1497({0.5 2.0} @Scale Hello)m
+240 fnt82 0 1003(has)m 370(result)s gsave
+480 495 translate
+0.5000 2.0000 scale
+0 -54(Hello)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 52 58
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save 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
+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
+240 fnt84 0 13840(52)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(The)m
+433(left)s 815(parameter)s 1834(may)s 2305(be)s 2592(empty)s 15(,)k
+3287(in)s 3535(which)s 4182(case)s 4654(Lout)s 5171(will)s
+5602(scale)s 6140(the)s 6493(object)s 7142(by)s 7441(a)s
+7612(common)s 8512(f)s 2(actor)k 0 12917(horizontally)m 1209(and)s
+1613(v)s 3(ertically)k 2565(so)s 2831(as)s 3081(to)s
+3320(occup)s 2(y)k 4064(all)s 4357(a)s 4(v)k 6(ailable)k
+5265(horizontal)s 6289(space:)s 220 fnt35 480 12416({} @Scale { Hello w)m 2(or)k -3(ld })k
+240 fnt82 0 11922(has)m 370(result)s gsave
+0 10765 translate
+7.9609 7.9609 scale
+0 -54(Hello)m 583(w)s 2(orld)k
+
+grestore
+0 9861(The)m 433(right)s 949(parameter)s 1969(may)s 2440(be)s
+2728(an)s 3(y)k 3130(object.)s 220 fnt35 3884 9858(@Scale)m
+240 fnt82 4712 9861(has)m 5088(both)s 5576(a)s 220 fnt35
+5748 9858(@OneCol)m 240 fnt82 6765 9861(and)m 7175(a)s 220 fnt35
+7346 9858(@OneRo)m 3(w)k 240 fnt82 8483 9861(ef)m 6(fect,)k
+0 9573(and)m 404(the)s 752(marks)s 1387(of)s 1658(the)s
+2006(result)s 2596(coincide)s 3462(with)s 3944(the)s 4292(principal)s
+5196(marks)s 5831(of)s 6102(the)s 6450(right)s 6961(parameter)s 13(.)k
+240 fnt84 0 8780(3.20.)m 591(@Rotate)s 240 fnt82 542 8348(The)m
+220 fnt35 973 8345(@Rotate)m 240 fnt82 1897 8348(symbol)m 2660(will)s
+3089(rotate)s 3691(its)s 3970(right)s 4484(parameter)s 5501(counterclockwise)s
+7233(an)s 7519(amount)s 8300(gi)s 6(v)k 3(en)k
+8883(in)s 0 8060(de)m 3(grees)k 778(\(positi)s 6(v)k 3(e)k
+1661(or)s 1920(ne)s 3(g)k 1(ati)k 6(v)k 3(e\))k
+2845(by)s 3139(its)s 3415(left)s 3792(parameter)s 13(.)k
+4897(F)s 3(or)k 5286(e)s 3(xample,)k 220 fnt35
+480 7559(30d @Rotate { hello)m 8(, w)k 2(or)k -3(ld })k 240 fnt82
+0 7065(has)m 370(result)s gsave
+534 6112 translate
+30.0000 rotate
+0 -54(hello,)m 583(w)s 2(orld)k
+
+grestore
+0 5586(Before)m 710(rotating)s 1511(the)s 1863(object,)s 220 fnt35
+2559 5583(@OneCol)m 240 fnt82 3576 5586(and)m 220 fnt35 3984 5583(@OneRo)m 3(w)k
+240 fnt82 5120 5586(are)m 5471(applied)s 6238(to)s 6482(it.)s
+6782(The)s 7215(result)s 7809(is)s 8024(a)s 8195(rectangle)s
+0 5298(whose)m 668(marks)s 1303(pass)s 1766(through)s 2568(the)s
+2916(point)s 3468(where)s 4108(the)s 4456(original)s 5254(marks)s
+5889(crossed:)s 1587 283 340 113 240 288 60 480 4075 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1587 283 340 113 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
+1587 283 340 113 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
+240 fnt78 2547 4128(\336)m gsave
+3256 3921 translate
+240 fnt82 1515 1037 379 267 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1515 1037 379 267 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
+1515 1037 379 267 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
+gsave
+379 267 translate
+30.0000 rotate
+1587 283 340 113 240 288 60 -340 -113 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1587 283 340 113 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
+1587 283 340 113 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
+
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 3470(As)m
+324(this)s 728(e)s 3(xample)k 1598(sho)s 6(ws,)k
+2306(rotation)s 3113(by)s 3415(an)s 3705(angle)s 4287(other)s
+4845(than)s 5322(a)s 5495(multiple)s 6355(of)s 6633(ninety)s
+7293(de)s 3(grees)k 8079(introduces)s 0 3182(quite)m 534(a)s
+700(lot)s 1012(of)s 1283(white)s 1870(space.)s 2565(So,)s
+2925(for)s 3263(e)s 3(xample,)k 4177(the)s 4525(result)s
+5115(of)s 220 fnt35 480 2674(-30d)m 968(@Rotate)s 1890(30d)s
+2305(@Rotate)s 240 fnt83 3286 2679(object)m 240 fnt82 0 2176(is)m
+210(a)s 376(much)s 965(lar)s 4(ger)k 1577(object)s
+2221(than)s 240 fnt83 2690 2178(object)m 240 fnt82 3278 2176(,)m
+3385(despite)s 4118(the)s 4466(f)s 2(act)k 4881(that)s
+5299(one)s 5701(rotation)s 6501(cancels)s 7255(the)s 7603(other)s 13(.)k
+480 1802(Rotation)m 1362(of)s 1634(objects)s 2363(containing)s 3427(recepti)s 6(v)k 3(e)k
+4350(and)s 4755(recursi)s 6(v)k 3(e)k 5678(symbols)s
+6528(is)s 6739(permitted,)s 7762(b)s 4(ut)k 8125(for)s
+8464(angles)s 0 1514(other)m 553(than)s 1024(multiples)s 1967(of)s
+2240(ninety)s 2894(de)s 3(grees)k 3675(it)s 3869(is)s
+4082(best)s 4529(to)s 4770(mak)s 2(e)k 5345(the)s
+5695(size)s 6125(of)s 6398(the)s 6748(rotated)s 7472(object)s
+8118(clear)s 8644(with)s 220 fnt35 0 1223(@Wide)m 240 fnt82
+774 1226(and)m 220 fnt35 1178 1223(@High)m 240 fnt82 1897 1226(symbols:)m
+220 fnt35 480 725(30d @Rotate 5i @Wide 4i @High)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 53 59
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13845(3.20.)m 574(@Rotate)s 240 fnt84 8833 13842(53)m
+220 fnt35 480 13253({ //1i @T)m 26(e)k 6(xtPlace)k 480 12965( //1i)m
+480 12677(})m 240 fnt82 0 12183(This)m 532(is)s 798(because)s
+1667(for)s 2061(angles)s 2779(other)s 3386(than)s 3911(multiples)s
+4907(of)s 5234(ninety)s 5942(de)s 3(grees)k 6776(the)s
+7180(space)s 7823(a)s 4(v)k 6(ailable)k 8788(for)s
+220 fnt35 0 11892(@T)m 26(e)k 6(xtPlace)k 240 fnt82
+1218 11895(to)m 1457(occup)s 2(y)k 2201(is)s 2411(indeterminate,)s
+3831(and)s 4235(the)s 4583(result)s 5173(is)s 5383(poor)s 13(.)k
+240 fnt84 0 11102(3.21.)m 591(@Backgr)s 4(ound)k 240 fnt82
+577 10625(The)m 220 fnt35 1042 10622(@Bac)m 4(kg)k 2(round)k
+240 fnt82 2515 10625(symbol)m 3312(will)s 3775(print)s 4323(its)s
+4637(left)s 5051(parameter)s 6102(in)s 6382(the)s 6767(background)s
+7993(of)s 8301(its)s 8615(right)s 0 10337(parameter)m 13(.)k
+1115(That)s 1624(is,)s 1901(the)s 2260(result)s 2860(has)s
+3241(the)s 3600(size)s 4038(of)s 4319(the)s 4678(right)s
+5200(parameter)s 9(,)k 6263(b)s 4(ut)k 6635(the)s
+6994(left)s 7382(parameter)s 8407(will)s 8844(be)s 0 10049(printed)m
+735(\207rst)s 1166(in)s 1409(the)s 1757(same)s 2304(space,)s
+2942(with)s 3424(its)s 3700(marks)s 4335(aligned)s 5097(with)s
+5579(the)s 5927(marks)s 6562(of)s 6833(the)s 7181(right)s
+7692(parameter)s 13(.)k 240 fnt84 0 9256(3.22.)m 591(@K)s 6(er)k 3(nShrink)k
+240 fnt82 541 8824(This)m 1018(symbol)s 1779(returns)s 2495(its)s
+2772(right)s 3284(parameter)s 4300(unchanged)s 5397(in)s 5641(appearance)s
+6774(b)s 4(ut)k 7137(occup)s 2(ying)k 8187(a)s
+8355(slightly)s 0 8536(smaller)m 770(bounding)s 1737(box.)s 2269(The)s
+2705(reduction)s 3673(is)s 3891(by)s 4193(the)s 4549(amount)s
+5335(of)s 5614(k)s 2(erning)k 6404(that)s 6830(w)s 2(ould)k
+7493(be)s 7783(applied)s 8553(if)s 8778(the)s 0 8248(right)m
+511(parameter)s 1525(w)s 2(as)k 1946(immediately)s 240 fnt83
+3194 8250(followed)m 240 fnt82 4084 8248(by)m 4378(the)s 4726(left)s
+5103(parameter)s 13(.)k 6208(F)s 3(or)k 6597(e)s 3(xample,)k
+220 fnt35 480 7747(.)m 13( @K)k 8(er)k -5(nShr)k -3(ink P)k
+240 fnt82 0 7292(has)m 370(result)s 104 158 0 54 240 288 60 480 6844 LoutGr2
+LoutBox stroke
+grestore
+0 0(P)m
+grestore
+0 6393(where)m
+649(a)s 824(box)s 1249(of)s 1529(size)s 1965(0)s
+2150(has)s 2529(been)s 3048(dra)s 3(wn)k 3709(around)s
+4441(the)s 4799(result)s 5398(to)s 5647(mak)s 2(e)k
+6228(its)s 6513(e)s 3(xtent)k 7164(clear)s 13(.)k
+7787(Compare)s 8730(this)s 0 6105(with)m 482(`P')s 806(alone:)s
+130 158 0 54 240 288 60 480 5656 LoutGr2
+LoutBox stroke
+grestore
+0 0(P)m
+grestore
+0 5205(in)m 243(which)s 885(the)s 1232(bounding)s
+2191(box)s 2605(e)s 3(xactly)k 3346(encloses)s 4206(the)s
+4554(object,)s 5245(or)s 5503(at)s 5735(least)s 6231(is)s
+6441(supposed)s 7390(to.)s 7740(The)s 8167(bounding)s 0 4917(box)m
+415(is)s 625(smaller)s 1387(on)s 1684(the)s 2032(right)s
+2543(by)s 2837(the)s 3185(amount)s 3963(of)s 4234(k)s 2(erning)k
+5016(that)s 5434(w)s 2(ould)k 6089(be)s 6371(applied)s
+7133(between)s 7987(`P')s 8311(and)s 8715(`.)s 16('.)k
+480 4543(The)m 916(only)s 1405(kno)s 6(wn)k 2117(use)s
+2501(for)s 2847(this)s 3252(symbol)s 4020(is)s 4239(to)s
+4486(produce)s 5322(tuck)s 2(ed-in)k 6288(subscripts)s 7304(in)s
+7555(the)s 7912(Eq)s 8245(equation)s 0 4255(formatting)m 1061(package.)s
+240 fnt84 0 3462(3.23.)m 591(@Common,)s 1872(@Rump,)s 2847(and)s
+3288(@Meld)s 240 fnt82 540 2985(The)m 220 fnt35 968 2982(@Common)m
+240 fnt82 2127 2985(and)m 220 fnt35 2531 2982(@Rump)m 240 fnt82
+3391 2985(symbols)m 4240(compare)s 5119(tw)s 2(o)k 5529(paragraph)s
+6542(objects:)s 220 fnt35 480 2484({ Aardv)m 5(ar)k -3(k, 29 } @Common { Aardv)k 5(ar)k -3(k, 359 })k
+240 fnt82 0 1990(If)m 234(either)s 842(parameter)s 1860(is)s
+2075(not)s 2446(a)s 2616(paragraph)s 3634(object,)s 4329(it)s
+4526(is)s 4741(con)s 9(v)k 3(erted)k 5734(into)s
+6164(a)s 6334(single-object)s 7633(paragraph)s 8651(\207rst.)s 0 1702(The)m
+418(result)s 998(of)s 220 fnt35 1259 1699(@Common)m 240 fnt82
+2408 1702(is)m 2608(the)s 2946(common)s 3831(pre\207x)s 4433(of)s
+4694(the)s 5032(tw)s 2(o)k 5432(paragraphs;)s 6583(that)s
+6991(is,)s 7247(those)s 7798(initial)s 8398(objects)s 0 1414(which)m
+640(are)s 985(equal)s 1555(in)s 1796(the)s 2142(tw)s 2(o)k
+2549(paragraphs.)s 3760(In)s 4013(the)s 4359(e)s 3(xample)k
+5220(abo)s 3(v)k 3(e,)k 5890(the)s 6236(result)s
+6824(is)s 220 fnt35 7031 1411(Aardv)m 5(ar)k -3(k,)k
+240 fnt82 7949 1414(.)m 8111(The)s 8536(result)s 0 1126(of)m
+220 fnt35 271 1123(@Rump)m 240 fnt82 1131 1126(is)m 1341(that)s
+1759(part)s 2190(of)s 2461(the)s 2809(second)s 3532(object)s
+4176(which)s 4818(is)s 5028(not)s 5394(included)s 6276(in)s
+220 fnt35 6519 1123(@Common)m 240 fnt82 7618 1126(;)m 7730(the)s
+8078(result)s 8668(of)s 220 fnt35 480 625({ Aardv)m 5(ar)k -3(k, 29 } @Rump { Aardv)k 5(ar)k -3(k, 359 })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 54 60
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(54)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(is)m
+220 fnt35 210 13202(359)m 240 fnt82 567 13205(.)m 480 12831(If)m
+698(the)s 1034(tw)s 2(o)k 1431(objects)s 2147(ha)s 4(v)k 3(e)k
+2635(nothing)s 3408(in)s 3638(common,)s 4571(the)s 4907(result)s
+5484(of)s 220 fnt35 5743 12828(@Common)m 240 fnt82 6889 12831(will)m
+7303(be)s 7572(an)s 7843(empty)s 8482(object)s 0 12543(and)m
+400(the)s 744(result)s 1330(of)s 220 fnt35 1597 12540(@Rump)m
+240 fnt82 2453 12543(will)m 2874(be)s 3152(the)s 3496(second)s
+4215(object.)s 4959(If)s 5185(the)s 5528(tw)s 2(o)k
+5934(objects)s 6658(are)s 7001(identical,)s 7926(the)s 8270(result)s
+8855(of)s 220 fnt35 0 12252(@Common)m 240 fnt82 1159 12255(will)m
+1585(be)s 1867(the)s 2215(\207rst)s 2646(object,)s 3337(and)s
+3741(the)s 4089(result)s 4679(of)s 220 fnt35 4950 12252(@Rump)m
+240 fnt82 5810 12255(will)m 6236(be)s 6518(an)s 6801(empty)s
+7453(object.)s 480 11881(The)m 933(only)s 1438(kno)s 6(wn)k
+2167(use)s 2567(for)s 220 fnt35 2930 11878(@Rump)m 240 fnt82
+3815 11881(and)m 220 fnt35 4244 11878(@Common)m 240 fnt82 5428 11881(is)m
+5663(to)s 5927(implement)s 7034(mer)s 4(ged)k 7830(inde)s 3(x)k
+8439(entries)s 0 11593(\(Section)m 853(2.8\).)s 480 11219(The)m 220 fnt35
+947 11216(@Meld)m 240 fnt82 1732 11219(symbol)m 2531(returns)s 3284(the)s
+3671(minimum)s 4700(meld)s 5275(of)s 5585(tw)s 2(o)k
+6034(paragraphs,)s 7229(that)s 7686(is)s 7935(the)s 8323(shortest)s
+0 10931(paragraph)m 1013(that)s 1431(contains)s 2279(the)s 2627(tw)s 2(o)k
+3037(original)s 3835(paragraphs)s 4935(as)s 5185(subsequences.)s 6652(F)s 3(or)k
+7041(e)s 3(xample,)k 220 fnt35 480 10430({ Aardv)m 5(ar)k -3(k , 1 , 2 } @Meld { Aardv)k 5(ar)k -3(k , 2 , 3 })k
+240 fnt82 0 9936(produces)m 480 9433(Aardv)m 6(ark)k 1438(,)s
+1545(1)s 1700(,)s 1807(2)s 1981(,)s 2088(3)s
+0 8949(The)m 455(result)s 1073(is)s 1310(related)s 2045(to)s
+2312(the)s 2687(well-kno)s 6(wn)k 3909(longest)s 4688(common)s
+5610(substring,)s 6622(in)s 6893(that)s 7338(the)s 7714(meld)s
+8278(contains)s 0 8661(e)m 6(v)k 3(erything)k 1076(not)s
+1451(in)s 1704(the)s 2061(lcs)s 2387(plus)s 2846(one)s
+3257(cop)s 2(y)k 3785(of)s 4065(e)s 6(v)k 3(erything)k
+5142(in)s 5394(the)s 5751(lcs.)s 6190(This)s 6675(function)s
+7539(is)s 7758(well-suited)s 8887(to)s 0 8373(melding)m 830(comple)s 3(x)k
+1698(inde)s 3(x)k 2274(entries.)s 3067(Note)s 3580(that)s
+3990(there)s 4515(must)s 5033(be)s 5307(a)s 5465(non-zero)s
+6360(amount)s 7131(of)s 7394(space)s 7973(before)s 8631(each)s
+0 8085(comma,)m 805(otherwise)s 1783(each)s 2271(will)s 2690(become)s
+3484(part)s 3908(of)s 4172(the)s 4513(preceding)s 5502(w)s 2(ord,)k
+6093(and,)s 6539(since)s 220 fnt35 7079 8082(@Meld)m 240 fnt82
+7818 8085(compares)m 8778(the)s 0 7797(tw)m 2(o)k 410(paragraphs)s
+1510(w)s 2(ord)k 2058(by)s 2352(w)s 2(ord,)k
+2949(the)s 3297(result)s 3887(will)s 4313(be)s 4595(dif)s 6(ferent)k
+5470(and)s 5874(less)s 6283(satisf)s 2(actory)k 15(.)k
+240 fnt84 0 7004(3.24.)m 591(@Insert)s 240 fnt82 541 6572(The)m
+220 fnt35 970 6569(@Inser)m -8(t)k 240 fnt82 1808 6572(symbol)m
+2569(inserts)s 3245(its)s 3522(left)s 3901(parameter)s 4916(at)s
+5149(the)s 5499(be)s 3(ginning)k 6508(of)s 6781(the)s
+7130(\207rst)s 7563(paragraph)s 8577(of)s 8850(its)s 0 6284(right)m
+511(parameter:)s 220 fnt35 480 5783(X @Inser)m -8(t { A B // C // D })k 240 fnt82
+0 5289(is)m 210(equi)s 6(v)k 6(alent)k 1254(to)s
+220 fnt35 480 4788({ XA B // C // D })m 240 fnt82 0 4294(Notice)m 707(that)s
+1139(a)s 1320(zero-width)s 2426(space)s 3028(separates)s 220 fnt35
+3968 4291(X)m 240 fnt82 4185 4294(from)m 4723(the)s 5085(\207rst)s
+5531(paragraph,)s 6608(so)s 6889(if)s 7120(some)s 7696(wider)s
+8314(space)s 8916(is)s 0 4006(required)m 857(it)s 1052(must)s
+1580(be)s 1865(placed)s 2550(at)s 2785(the)s 3137(end)s
+3544(of)s 220 fnt35 3818 4003(X)m 240 fnt82 3960 4006(.)m
+4127(The)s 220 fnt35 4558 4003(@Inser)m -8(t)k 240 fnt82
+5397 4006(operation)m 6361(is)s 6574(applied)s 7339(to)s 7581(the)s
+7932(v)s 6(alue)k 8503(of)s 8778(the)s 0 3718(right)m
+511(parameter)s 1525(after)s 2021(e)s 6(v)k 6(aluation.)k
+480 3344(The)m 917(only)s 1407(kno)s 6(wn)k 2121(use)s
+2506(for)s 2853(this)s 3259(symbol)s 4029(is)s 4249(to)s
+4498(attach)s 5134(something)s 6194(lik)s 2(e)k 240 fnt84
+6616 3343(Figur)m 4(e)k 7355(6)s 240 fnt82 7538 3344(to)m
+7787(the)s 8145(front)s 8679(of)s 8960(a)s 0 3056(multi-paragraph)m
+1596(caption.)s 240 fnt84 0 2263(3.25.)m 591(@OneOf)s 240 fnt82
+534 1831(The)m 220 fnt35 956 1828(@OneOf)m 240 fnt82 1877 1831(symbol)m
+2631(returns)s 3339(one)s 3734(of)s 3999(the)s 4341(sequence)s
+5268(of)s 5533(objects)s 6254(which)s 6890(is)s 7094(its)s
+7364(right)s 7869(parameter)s 8876(as)s 0 1543(its)m 276(result:)s
+220 fnt35 480 1092(@OneOf {)m 480 804( @ResultA)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 55 61
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13845(3.25.)m 574(@OneOf)s 240 fnt84 8833 13842(55)m
+220 fnt35 480 13209( @ResultB)m 480 12921( @ResultC)m 480 12633(})m 240 fnt82
+0 12139(The)m 451(choice)s 1155(is)s 1388(made)s 1986(to)s
+2248(ensure)s 2952(that)s 3393(whate)s 6(v)k 3(er)k
+4344(g)s 1(alle)k 3(y)k 5001(tar)s 4(get)k
+5624(is)s 5857(required)s 6735(at)s 6990(the)s 7362(moment)s
+8229(is)s 8463(found.)s 0 11851(F)m 3(or)k 389(e)s 3(xample,)k
+1304(if)s 1522(we)s 1858(are)s 2206(e)s 6(v)k 6(aluating)k
+220 fnt35 3244 11848(@OneOf)m 240 fnt82 4172 11851(as)m 4423(part)s
+4855(of)s 5127(an)s 5411(attempt)s 6188(to)s 6428(attach)s
+7056(a)s 7223(g)s 1(alle)k 3(y)k 7858(whose)s
+8527(tar)s 4(get)k 0 11563(is)m 220 fnt35 222 11560(@SomeT)m 26(arget)k
+240 fnt82 1622 11563(,)m 1741(then)s 2223(the)s 2583(result)s
+3186(abo)s 3(v)k 3(e)k 3820(will)s 4259(be)s
+220 fnt35 4553 11560(@ResultA)m 240 fnt82 5613 11563(if)m 5843(it)s
+6047(contains)s 220 fnt35 6908 11560(@SomeT)m 26(arget)k 240 fnt82
+8308 11563(,)m 8427(or)s 8699(else)s 220 fnt35 0 11272(@ResultB)m
+240 fnt82 1042 11275(if)m 1260(it)s 1453(contains)s 220 fnt35
+2302 11272(@SomeT)m 26(arget)k 240 fnt82 3702 11275(,)m 3810(or)s
+4070(else)s 220 fnt35 4498 11272(@ResultC)m 240 fnt82 5552 11275(\(whether)m
+6462(or)s 6722(not)s 7089(it)s 7282(contains)s 8131(the)s
+8480(tar)s 4(get,)k 0 10987(or)m 259(if)s 476(there)s
+1009(is)s 1219(no)s 1512(tar)s 4(get\).)k 480 10613(Use)m
+930(of)s 220 fnt35 1224 10610(@OneOf)m 240 fnt82 2174 10613(in)m
+2440(conjunction)s 3650(with)s 4155(recursi)s 6(v)k 3(e)k
+5100(symbols)s 5972(can)s 6384(lead)s 6863(to)s 7125(problems.)s
+8202(Consider)s 0 10325(this)m 396(e)s 3(xample:)k 220 fnt35
+480 9824(def @Recursiv)m 5(e {)k 480 9248( def @ChoiceA { @APlace // @Recursiv)m 5(e })k 480 8672( def @ChoiceB { @BPlace // @Recursiv)m 5(e })k
+480 8096( @OneOf {)m 480 7808( @ChoiceA)m 480 7520( @ChoiceB)m 480 7232( })m 480 6944(})m
+240 fnt82 0 6450(Lout)m 523(belie)s 6(v)k 3(es)k
+1360(that)s 1790(e)s 3(xpanding)k 220 fnt35 2849 6447(@Recursiv)m 5(e)k
+240 fnt82 4106 6450(is)m 4328(the)s 4687(right)s 5210(thing)s
+5767(to)s 6017(do)s 6322(when)s 6910(searching)s 7890(for)s
+8240(either)s 8855(of)s 0 6162(the)m 380(g)s 1(alle)k 3(y)k
+1046(tar)s 4(gets)k 220 fnt35 1762 6159(@APlace)m 240 fnt82
+2763 6162(and)m 220 fnt35 3199 6159(@BPlace)m 240 fnt82 4108 6162(.)m
+4305(When)s 4966(searching)s 5968(for)s 220 fnt35 6338 6159(@BPlace)m
+240 fnt82 7339 6162(this)m 7768(leads)s 8342(Lout)s 8887(to)s
+0 5874(e)m 3(xpand)k 220 fnt35 760 5871(@Recursiv)m 5(e)k
+240 fnt82 1945 5874(,)m 2065(then)s 220 fnt35 2547 5871(@ChoiceA)m
+240 fnt82 3596 5874(,)m 3717(then)s 4199(the)s 220 fnt35
+4560 5871(@Recursiv)m 5(e)k 240 fnt82 5818 5874(symbol)m 6592(within)s
+220 fnt35 7273 5871(@ChoiceA)m 240 fnt82 8322 5874(,)m 8442(and)s
+8860(so)s 0 5586(on)m 320(in\207nitely)s 15(.)k 1355(This)s
+1854(problem)s 2734(can)s 3146(be)s 3451(a)s 4(v)k 4(oided)k
+4283(by)s 4600(attaching)s 5552(a)s 220 fnt35 5741 5583(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 7291 5586(symbol)m 8074(to)s 8336(each)s 8855(of)s
+0 5298(the)m 357(inner)s 220 fnt35 918 5295(@Recursiv)m 5(e)k
+240 fnt82 2172 5298(symbols:)m 3146(these)s 3703(are)s 4059(then)s
+4538(not)s 4914(a)s 4(v)k 6(ailable)k 5831(for)s
+6179(e)s 3(xpansion)k 7214(until)s 7716(a)s 7892(decision)s
+8756(has)s 0 5010(been)m 510(made)s 1085(to)s 1326(e)s 3(xpand)k
+2074(the)s 2424(symbol)s 3185(the)s 3(y)k 3650(lie)s
+3945(within.)s 4721(In)s 4979(this)s 5376(particular)s 6352(e)s 3(xample)k
+7216(it)s 7410(w)s 2(ould)k 8066(be)s 8350(simpler)s
+0 4722(to)m 239(write)s 220 fnt35 480 4270(def @Recursiv)m 5(e {)k
+480 3694( @OneOf {)m 480 3406( @APlace)m 480 3118( @BPlace)m 480 2830( })m 480 2542( // @Recursiv)m 5(e)k
+480 2254(})m 240 fnt82 0 1760(b)m 4(ut)k 378(this)s
+791(f)s 2(actoring)k 1720(is)s 1947(not)s 2329(possible)s
+3186(when)s 3778(the)s 4143(recursi)s 6(v)k 3(e)k
+5081(calls)s 5586(ha)s 4(v)k 3(e)k 6103(parameters)s
+7218(that)s 7652(are)s 8016(required)s 8887(to)s 0 1472(dif)m 6(fer)k
+583(in)s 826(the)s 1174(tw)s 2(o)k 1584(cases.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 56 62
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(56)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt84 0 13203(3.26.)m
+591(@Next)s 240 fnt82 535 12771(The)m 220 fnt35 957 12768(@Ne)m 6(xt)k
+240 fnt82 1676 12771(symbol)m 2430(returns)s 3138(its)s 3409(parameter)s
+4417(plus)s 4861(one.)s 5366(It)s 5565(is)s 5769(rather)s
+6380(cle)s 6(v)k 3(er)k 7008(at)s 7234(w)s 2(orking)k
+8078(this)s 8468(out:)s 8934(it)s 0 12483(hunts)m 570(through)s
+1372(the)s 1720(parameter)s 2734(from)s 3258(right)s 3769(to)s
+4008(left,)s 4432(looking)s 5217(for)s 5555(a)s 5721(number)s
+6512(to)s 6751(increment:)s 220 fnt35 480 11982(@Ne)m 6(xt \(3.99\))k
+240 fnt82 0 11486(has)m 404(result)s 1029(\(3.100\).)s 1925(If)s
+220 fnt35 2190 11483(@Ne)m 6(xt)k 240 fnt82 2949 11486(cannot)m
+3681(\207nd)s 4147(a)s 4348(digit)s 4880(inside)s 5542(its)s
+5852(parameter)s 9(,)k 6939(it)s 7166(is)s 7410(an)s
+7728(error)s 13(.)k 8377(Roman)s 0 11198(numerals)m 925(are)s
+1270(handled)s 2084(by)s 2376(storing)s 3091(them)s 3627(in)s
+3868(a)s 4032(database,)s 4960(as)s 5208(e)s 3(xplained)k
+6191(in)s 6432(Section)s 7204(4.2;)s 220 fnt35 7614 11195(@Ne)m 6(xt)k
+240 fnt82 8336 11198(will)m 8760(not)s 0 10910(increment)m 1015(a)s
+1181(Roman)s 1930(numeral.)s 240 fnt84 0 10167(3.27.)m 591(@Case)s
+240 fnt82 540 9735(The)m 220 fnt35 968 9732(@Case)m 240 fnt82
+1755 9735(symbol)m 2515(selects)s 3202(its)s 3478(result)s 4068(from)s
+4592(a)s 4758(list)s 5109(of)s 5380(alternati)s 6(v)k 3(es,)k
+6578(depending)s 7629(on)s 7926(a)s 8092(tag:)s 220 fnt35
+480 9234(@Da)m 6(y @Case {)k 480 8946( { 1 21 31 } @Y)m 4(ield st)k 480 8658( { 2 22 } @Y)m 4(ield nd)k
+480 8370( { 3 23 } @Y)m 4(ield rd)k 480 8082( else @Y)m 4(ield th)k 480 7794(})m
+240 fnt82 0 7300(In)m 257(this)s 654(e)s 3(xample)k
+1518(the)s 1868(result)s 2459(will)s 2886(be)s 3169(st)s
+3390(if)s 220 fnt35 3608 7297(@Da)m 6(y)k 240 fnt82
+4274 7300(is)m 4485(1,)s 4714(21,)s 5062(or)s 5322(31,)s
+5670(and)s 6076(nd)s 6375(if)s 220 fnt35 6593 7297(@Da)m 6(y)k
+240 fnt82 7259 7300(is)m 7471(2)s 7646(or)s 7906(22,)s
+8254(etc.)s 8698(The)s 0 7012(ef)m 6(fect)k 594(is)s
+801(similar)s 1520(to)s 1756(accessing)s 2722(a)s 2885(database,)s
+3812(though)s 4532(in)s 4773(a)s 4936(more)s 5480(compact)s
+6347(form.)s 6972(The)s 7397(right)s 7905(parameter)s 8916(is)s
+0 6724(a)m 171(sequence)s 1109(of)s 220 fnt35 1385 6721(@Y)m 4(ield)k
+240 fnt82 2143 6724(symbols,)m 3053(each)s 3553(with)s 4040(a)s
+4211(left)s 4594(parameter)s 5613(whose)s 6286(v)s 6(alue)k
+6859(is)s 7074(a)s 7245(sequence)s 8183(of)s 8459(one)s
+8867(or)s 0 6436(more)m 547(juxtapositions)s 1940(of)s 2211(simple)s
+2904(w)s 2(ords,)k 3594(and)s 3998(a)s 4164(right)s
+4675(parameter)s 5689(which)s 6331(may)s 6797(be)s 7079(an)s 3(y)k
+7476(object.)s 480 6062(W)m 19(e)k 895(\207rst)s 1372(describe)s
+2271(the)s 2665(beha)s 4(viour)k 3725(when)s 4347(the)s
+4742(v)s 6(alue)k 5356(of)s 5674(the)s 6068(left)s
+6492(parameter)s 7552(of)s 220 fnt35 7870 6059(@Case)m 240 fnt82
+8703 6062(is)m 8960(a)s 0 5774(juxtaposition)m 1302(of)s 1568(one)s
+1965(or)s 2220(more)s 2762(simple)s 3450(w)s 2(ords.)k
+4193(Then)s 4737(the)s 5080(result)s 5666(of)s 5932(the)s
+220 fnt35 6275 5771(@Case)m 240 fnt82 7058 5774(is)m 7263(the)s
+7606(right)s 8112(parameter)s 0 5486(of)m 287(the)s 652(\207rst)s
+220 fnt35 1100 5483(@Y)m 4(ield)k 240 fnt82 1870 5486(whose)m
+2554(left)s 2948(parameter)s 3979(contains)s 4844(either)s 5463(the)s
+5828(v)s 6(alue)k 6413(of)s 6701(the)s 7065(left)s
+7459(parameter)s 8490(of)s 8778(the)s 220 fnt35 0 5195(@Case)m
+240 fnt82 727 5198(,)m 834(or)s 1093(the)s 1441(special)s
+2159(v)s 6(alue)k 220 fnt35 2727 5195(else)m 240 fnt82
+3121 5198(.)m 3285(If)s 3515(there)s 4048(is)s 4258(no)s
+4551(such)s 220 fnt35 5047 5195(@Y)m 4(ield)k 240 fnt82
+5800 5198(it)m 5992(is)s 6202(an)s 6485(error)s 13(.)k
+480 4824(When)m 1133(the)s 1506(left)s 1908(parameter)s 2946(of)s
+220 fnt35 3242 4821(@Case)m 240 fnt82 4054 4824(is)m 4288(not)s
+4679(a)s 4870(juxtaposition)s 6200(of)s 6496(simple)s 7214(w)s 2(ords,)k
+7928(the)s 8301(result)s 8916(is)s 0 4536(the)m 350(right)s
+864(parameter)s 1881(of)s 2155(the)s 2506(\207rst)s 220 fnt35
+2940 4533(@Y)m 4(ield)k 240 fnt82 3696 4536(whose)m 4367(left)s
+4746(parameter)s 5763(is)s 220 fnt35 5976 4533(else)m 240 fnt82
+6370 4536(,)m 6480(or)s 6742(an)s 7028(error)s 7554(otherwise.)s
+8650(This)s 0 4248(permits)m 767(e)s 3(xamples)k 1718(lik)s 2(e)k
+220 fnt35 480 3747(@RunningTitle @Case {)m 480 3459( dft @Y)m 4(ield @Title)k 480 3171( else @Y)m 4(ield @RunningTitle)k
+480 2883(})m 240 fnt82 0 2389(where)m 661(a)s 848(running)s
+1667(title)s 2115(is)s 2346(returned)s 3221(unless)s 3892(it)s
+4105(has)s 4496(the)s 4866(v)s 6(alue)k 220 fnt35
+5455 2386(dft)m 240 fnt82 5776 2389(\(which)m 6519(presumably)s 7710(means)s
+8393(that)s 8833(no)s 0 2101(running)m 798(title)s 1224(w)s 2(as)k
+1645(supplied\),)s 2642(in)s 2885(which)s 3527(case)s 3994(an)s
+4277(ordinary)s 5141(title)s 5567(is)s 5777(returned)s 6631(instead.)s
+480 1727(When)m 1126(a)s 1310(recepti)s 6(v)k 3(e)k
+2250(symbol)s 3028(is)s 3256(placed)s 3955(within)s 4641(a)s
+220 fnt35 4825 1724(@Case)m 240 fnt82 5552 1727(,)m 5677(it)s
+5887(should)s 6601(be)s 6901(included)s 7801(in)s 8062(each)s
+8575(alter)s 8998(-)s 0 1439(nati)m 6(v)k 3(e,)k
+695(since)s 1255(otherwise)s 2254(Basser)s 2964(Lout)s 3490(may)s
+3969(become)s 4783(confused)s 5718(when)s 6308(trying)s 6945(to)s
+7198(predict)s 7934(whether)s 8778(the)s 0 1151(symbol)m 755(will)s
+1176(be)s 1453(a)s 1613(part)s 2039(of)s 2305(the)s
+2648(result)s 3232(or)s 3486(not.)s 3951(Alternati)s 6(v)k 3(ely)k 15(,)k
+5288(if)s 5500(it)s 5687(can)s 6071(be)s 6347(guaranteed)s
+7449(that)s 7862(the)s 8204(recepti)s 6(v)k 3(e)k
+0 863(symbol)m 764(will)s 1195(ne)s 6(v)k 3(er)k
+1782(be)s 2069(searched)s 2967(for)s 3310(when)s 3891(the)s
+4244(cases)s 4804(that)s 5226(it)s 5423(does)s 5918(not)s
+6289(lie)s 6587(within)s 7260(are)s 7612(selected,)s 8493(that)s
+8916(is)s 0 575(all)m 293(right)s 804(too.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 57 63
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13845(3.28.)m 574(@Moment)s 240 fnt84 8831 13842(57)m
+0 13250(3.28.)m 591(@Moment)s 240 fnt82 480 12818(The)m 908(prede\207ned)s
+1976(symbol)s 220 fnt35 2736 12815(@Moment)m 240 fnt82 3808 12818(has)m
+4178(the)s 4526(follo)s 6(wing)k 5503(de\207nition:)s 220 fnt35
+480 12317(def @Moment)m 480 12029( named @T)m 26(ag {})k 480 11741( named @Second {})m 480 11453( named @Min)m 2(ute {})k
+480 11165( named @Hour {})m 480 10877( named @Da)m 6(y {})k 480 10589( named @Month {})m 480 10301( named @Y)m 30(ear {})k
+480 10013( named @Centur)m -6(y {})k 480 9725( named @W)m 6(eekDa)k 6(y {})k
+480 9437( named @Y)m 30(earDa)k 6(y {})k 480 9149( named @Da)m 6(ylightSa)k 4(ving {})k
+480 8861({})m 240 fnt82 0 8367(It)m 208(may)s 677(be)s
+962(used)s 1463(lik)s 2(e)k 1878(an)s 3(y)k
+2278(other)s 2832(symbol.)s 3705(Lout)s 4220(pro)s 3(vides)k
+5095(an)s 5381(in)s 9(v)k 4(ocation)k 6439(of)s
+220 fnt35 6713 8364(@Moment)m 240 fnt82 7788 8367(with)m 8273(tag)s
+220 fnt35 8622 8364(no)m 3(w)k 240 fnt82 9019 8367(,)m
+0 8079(whose)m 668(other)s 1219(parameters)s 2317(are)s 2664(numbers)s
+3539(encoding)s 4470(the)s 4818(current)s 5554(date)s 6008(and)s
+6412(time:)s 220 fnt35 480 7514(@Second)m 240 fnt82 2482 7517(the)m
+2830(current)s 3566(second,)s 4338(usually)s 5083(between)s 5937(00)s
+6232(and)s 6636(59)s 220 fnt35 480 7183(@Min)m 2(ute)k
+240 fnt82 2482 7186(the)m 2830(current)s 3566(minute,)s 4337(between)s
+5191(00)s 5486(and)s 5890(59)s 220 fnt35 480 6873(@Hour)m
+240 fnt82 2482 6876(the)m 2830(current)s 3566(hour)s 9(,)k
+4103(between)s 4957(00)s 5252(and)s 5656(23)s 220 fnt35
+480 6563(@Da)m 6(y)k 240 fnt82 2482 6566(the)m 2830(current)s
+3566(day)s 3966(of)s 4237(the)s 4585(month,)s 5304(between)s
+6158(1)s 6313(and)s 6717(31)s 220 fnt35 480 6234(@Month)m
+240 fnt82 2482 6237(the)m 2830(current)s 3566(month,)s 4285(between)s
+5139(1)s 5294(\(January\))s 6245(and)s 6649(12)s 6943(\(December\))s
+220 fnt35 480 5905(@Y)m 30(ear)k 240 fnt82 2482 5908(the)m
+2830(current)s 3566(year)s 4037(of)s 4308(the)s 4656(century)s 15(,)k
+5465(between)s 6319(00)s 6614(and)s 7018(99)s 220 fnt35
+480 5576(@Centur)m -6(y)k 240 fnt82 2482 5579(the)m 2830(current)s
+3566(century)s 15(,)k 4375(e.g.)s 4765(19)s 5056(or)s
+5315(20)s 220 fnt35 480 5247(@W)m 6(eekDa)k 6(y)k
+240 fnt82 2482 5250(the)m 2830(current)s 3566(day)s 3966(of)s
+4237(the)s 4585(week,)s 5197(between)s 6051(1)s 6206(\(Sunday\))s
+7132(and)s 7536(7)s 7704(\(Saturday\))s 220 fnt35 480 4916(@Y)m 30(earDa)k 6(y)k
+240 fnt82 2482 4919(the)m 2830(current)s 3566(day)s 3966(of)s
+4237(the)s 4585(year)s 9(,)k 5094(between)s 5948(0)s
+6123(and)s 6527(365)s 220 fnt35 480 4587(@Da)m 6(ylightSa)k 4(ving)k
+240 fnt82 2482 4590(an)m 2784(implementation-dependent)s 5427(number)s 6237(that)s
+6675(may)s 7160(encode)s 7914(the)s 8282(daylight)s 2482 4302(sa)m 4(ving)k
+3156(currently)s 4072(in)s 4315(ef)s 6(fect)k 0 3741(Unix)m
+519(manual)s 1262(entries)s 1934(state)s 2411(that)s 220 fnt35
+2814 3738(@Second)m 240 fnt82 3813 3741(can)m 4186(be)s 4453(as)s
+4687(high)s 5155(as)s 5389(61,)s 5720(to)s 5944(allo)s 6(w)k
+6507(for)s 6830(leap)s 7265(seconds.)s 8171(Judicious)s 0 3453(use)m
+375(of)s 646(databases)s 1613(can)s 2002(con)s 9(v)k 3(ert)k
+2767(these)s 3314(numbers)s 4189(into)s 4614(useful)s 5253(dates.)s
+5908(F)s 3(or)k 6297(e)s 3(xample,)k 220 fnt35
+480 2952(@Moment&&no)m 3(w @Open { @Da)k 6(y {@Months&&@Month}, @Centur)k -6(y{@Y)k 30(ear} })k
+240 fnt82 0 2454(produces)m 915(something)s 1965(lik)s 2(e)k
+2377(17)s 2665(September)s 9(,)k 3785(1999)s 4316(gi)s 6(v)k 3(en)k
+4896(a)s 5062(suitable)s 5861(database)s 6740(of)s 7011(months.)s
+240 fnt84 0 1661(3.29.)m 591(@Null)s 240 fnt82 480 1229(This)m
+979(symbol)s 1762(pro)s 3(vides)k 2657(a)s 2846(con)s 9(v)k 3(enient)k
+3967(w)s 2(ay)k 4441(to)s 4703(remo)s 3(v)k 3(e)k
+5493(unw)s 2(anted)k 6503(concatenation)s 7911(symbols.)s 8896(If)s
+0 941(there)m 544(is)s 765(a)s 942(concatenation)s 2339(symbol)s
+3110(preceding)s 220 fnt35 4117 938(@Null)m 240 fnt82 4702 941(,)m
+4821(the)s 220 fnt35 5180 938(@Null)m 240 fnt82 5836 941(and)m
+6252(the)s 6611(concatenation)s 8007(symbol)s 8779(are)s 0 653(both)m
+482(deleted.)s 1335(Otherwise,)s 2423(if)s 2638(there)s 3170(is)s
+3379(a)s 3544(follo)s 6(wing)k 4519(concatenation)s 5903(symbol,)s
+6714(it)s 6905(and)s 7307(the)s 220 fnt35 7654 650(@Null)m
+240 fnt82 8298 653(are)m 8643(both)s 0 365(deleted.)m 794(Otherwise,)s
+220 fnt35 1883 362(@Null)m 240 fnt82 2528 365(becomes)m 3416(an)s
+3699(empty)s 4351(object.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 58 64
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(58)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 480 13205(These)m
+1107(rules)s 1622(apply)s 2208(to)s 2447(a)s 2613(fully)s
+3118(parenthesized)s 4490(v)s 3(ersion)k 5248(of)s 5519(the)s
+5867(e)s 3(xpression.)k 7051(F)s 3(or)k 7440(e)s 3(xample,)k
+8354(in)s 220 fnt35 480 12704(...)m 13( //1vx @Null |0.5i ...)k 240 fnt82
+0 12249(it)m 202(is)s 423(the)s 782(horizontal)s 1817(concatenation)s
+3213(symbol)s 3984(follo)s 6(wing)k 220 fnt35 4972 12246(@Null)m
+240 fnt82 5628 12249(that)m 6057(disappears,)s 7184(because)s 8008(in)s
+8262(the)s 8621(fully)s 0 11961(parenthesized)m 1372(v)s 3(ersion)k
+220 fnt35 480 11460(...)m 13( //1vx { @Null |0.5i ...)k 13( })k 240 fnt82
+0 10966(there)m 533(is)s 743(no)s 1036(concatenation)s 2421(symbol)s
+3181(preceding)s 4177(the)s 220 fnt35 4525 10963(@Null)m 240 fnt82
+5110 10966(.)m 240 fnt84 0 10173(3.30.)m 591(@Galley)s 1534(and)s
+1975(@F)s 6(or)k 4(ceGalley)k 240 fnt82 480 9696(These)m
+1131(symbols)s 2004(both)s 2511(act)s 2874(as)s 3148(a)s
+3338(placeholder)s 4538(for)s 4900(a)s 5090(g)s 1(alle)k 3(y)k 15(.)k
+5844(That)s 6366(is,)s 6656(the)s 3(y)k 7144(may)s
+7634(be)s 7940(replaced)s 8832(by)s 0 9408(components)m 1210(of)s
+1483(a)s 1651(g)s 1(alle)k 3(y)k 15(.)k
+2383(In)s 2641(the)s 2991(case)s 3460(of)s 220 fnt35
+3734 9405(@F)m 6(orceGalle)k 4(y)k 240 fnt82 5189 9408(the)m
+5539(g)s 1(alle)k 3(y)k 6175(will)s 6604(then)s
+7075(ha)s 4(v)k 3(e)k 7578(a)s 7746(forcing)s
+8492(g)s 1(alle)k 3(y)k 0 9120(ef)m 6(fect)k
+583(at)s 802(this)s 1184(point)s 1723(although)s 2604(it)s
+2783(need)s 3280(not)s 3632(be)s 3901(declared)s 4754(using)s
+220 fnt35 5313 9117(f)m 6(orce into)k 240 fnt82 6202 9120(.)m
+6353(See)s 6740(Section)s 7501(2.7)s 7835(for)s 8160(a)s
+8312(detailed)s 0 8832(discussion)m 1054(of)s 1325(g)s 1(alle)k 3(ys,)k
+2105(forcing)s 2848(g)s 1(alle)k 3(ys,)k 3628(and)s
+4032(tar)s 4(gets.)k 240 fnt84 0 8039(3.31.)m 591(@NotRe)s 3(v)k 2(ealed)k
+240 fnt82 480 7607(The)m 220 fnt35 938 7604(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 2495 7607(symbol)m 3285(e)s 3(x)k 3(erts)k
+3931(\207ne)s 4376(control)s 5138(o)s 3(v)k 3(er)k
+5647(the)s 6026(process)s 6824(of)s 7125(e)s 3(xpanding)k
+8204(recepti)s 6(v)k 3(e)k 0 7319(symbols.)m 955(It)s
+1152(may)s 1611(appear)s 2300(only)s 2773(within)s 3433(the)s
+3774(body)s 4300(of)s 4564(a)s 4722(de\207nition,)s 5739(immediately)s
+6979(follo)s 6(wing)k 7949(the)s 8289(name)s 8855(of)s
+0 7031(a)m 166(recepti)s 6(v)k 3(e)k 1088(symbol.)s
+1957(F)s 3(or)k 2346(e)s 3(xample:)k 220 fnt35
+480 6530(def A { @Galle)m 4(y })k 480 5954(def B { @Galle)m 4(y })k 480 5378(def ABList)m
+480 5090({)m 480 4802( A)m 480 4514( // B @NotRe)m 6(v)k 5(ealed)k
+480 4226( // ABList)m 480 3938(})m 240 fnt82 0 3444(The)m 424(meaning)s
+1297(is)s 1503(that)s 1916(the)s 2260(symbol)s 3016(immediately)s
+4259(preceding)s 220 fnt35 5251 3441(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 6718 3444(,)m 220 fnt35 6821 3441(B)m 240 fnt82
+7015 3444(in)m 7253(this)s 7645(e)s 3(xample,)k 8555(is)s
+8760(not)s 0 3156(re)m 6(v)k 3(ealed)k 851(to)s
+1083(g)s 1(alle)k 3(ys)k 1800(which)s 2435(encounter)s
+220 fnt35 3431 3153(ABList)m 240 fnt82 4113 3156(while)m 4693(searching)s
+5655(for)s 5986(tar)s 4(gets;)k 6723(to)s 6955(such)s
+7444(g)s 1(alle)k 3(ys)k 8161(it)s 8345(appears)s
+0 2868(that)m 220 fnt35 408 2865(ABList)m 240 fnt82 1086 2868(contains)m
+220 fnt35 1923 2865(A)m 240 fnt82 2116 2868(only)m 15(,)k
+2624(not)s 220 fnt35 2979 2865(B)m 240 fnt82 3117 2868(,)m
+3213(hence)s 3816(only)s 4286(g)s 1(alle)k 3(ys)k
+4999(tar)s 4(geted)k 5811(to)s 220 fnt35 6039 2865(A)m
+240 fnt82 6233 2868(will)m 6648(e)s 3(xpand)k 220 fnt35
+7384 2865(ABList)m 240 fnt82 8013 2868(.)m 8166(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+0 2580(after)m 220 fnt35 496 2577(ABList)m 240 fnt82 1185 2580(is)m
+1395(e)s 3(xpanded)k 2368(by)s 2662(such)s 3158(a)s
+3324(g)s 1(alle)k 3(y)k 15(,)k 220 fnt35
+3996 2577(B)m 240 fnt82 4194 2580(will)m 4620(be)s 4902(a)s 4(v)k 6(ailable)k
+5810(as)s 6060(a)s 6226(tar)s 4(get)k 6825(in)s
+7068(the)s 7416(usual)s 7976(w)s 2(ay)k 15(.)k
+480 2206(Apart)m 1081(from)s 1602(this)s 1994(meaning,)s 220 fnt35
+2922 2203(@NotRe)m 6(v)k 5(ealed)k 240 fnt82 4445 2206(has)m
+4812(no)s 5102(ef)s 6(fect)k 5694(at)s 5923(all,)s
+6264(and)s 6665(the)s 7010(body)s 7540(of)s 7808(the)s
+8152(de\207nition)s 0 1918(may)m 501(be)s 819(understood)s 1976(by)s
+2306(deleting)s 220 fnt35 3164 1915(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 4727 1918(and)m 5166(an)s 3(y)k 5599(preceding)s
+6630(space.)s 7361(Thus,)s 7982(the)s 8366(symbol)s 0 1630(preceding)m
+220 fnt35 1001 1627(@NotRe)m 6(v)k 5(ealed)k 240 fnt82
+2533 1630(may)m 3004(ha)s 4(v)k 3(e)k 3510(named)s
+4211(and)s 4620(right)s 5136(parameters)s 6239(in)s 6487(the)s
+6840(usual)s 7405(w)s 2(ay;)k 7919(these)s 8471(w)s 2(ould)k
+0 1342(follo)m 6(w)k 672(after)s 1168(the)s 220 fnt35
+1516 1339(@NotRe)m 6(v)k 5(ealed)k 240 fnt82 3043 1342(symbol.)m
+480 968(This)m 944(symbol)s 1692(w)s 2(as)k 2101(introduced)s
+3169(to)s 3396(o)s 3(v)k 3(ercome)k 4377(a)s
+4530(problem)s 5375(with)s 5845(\210oating)s 6616(\207gures)s 7306(treated)s
+8001(as)s 8238(displays.)s 0 680(It)m 205(turned)s 874(out)s
+1240(to)s 1479(be)s 1761(essential)s 2638(to)s 2877(specify)s
+3621(the)s 3969(layout)s 4627(of)s 4898(a)s 5064(column)s
+5839(\(in)s 6161(part\))s 6660(as)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 59 65
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.31.)m 574(@NotRe)s 3(vealed)k 240 fnt84
+8832 13840(59)m 220 fnt35 480 13251(@BodyT)m 26(e)k 6(xtPlace)k
+480 12963(// @FigurePlace)m 480 12675(// @BodyT)m 26(e)k 6(xtPlace)k 480 12387(// @FigurePlace)m
+480 12099(// @BodyT)m 26(e)k 6(xtPlace)k 480 11811(...)m 240 fnt82
+0 11360(so)m 256(that)s 664(\207gures)s 1356(could)s 1935(alternate)s
+2802(with)s 3274(body)s 3798(te)s 3(xt)k 4202(do)s 6(wn)k
+4776(the)s 5114(column.)s 5986(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6935(some)s 7486(means)s 8138(w)s 2(as)k 8548(need)s
+8998(-)s 0 11072(ed)m 291(to)s 538(ensure)s 1226(that)s
+1652(in)s 1903(the)s 2259(absence)s 3080(of)s 3359(an)s 3(y)k
+3764(\207gures)s 4474(there)s 5015(could)s 5613(only)s 6101(be)s
+6391(one)s 220 fnt35 6801 11069(@BodyT)m 26(e)k 6(xtPlace)k
+240 fnt82 8527 11072(in)m 8778(the)s 0 10784(column,)m 831(since)s
+1385(otherwise)s 2377(v)s 6(arious)k 3132(problems)s 4080(arose,)s
+4698(for)s 5042(e)s 3(xample)k 5912(the)s 220 fnt35
+6267 10781(@NP)m 240 fnt82 6851 10784(symbol)m 7618(merely)s 8342(causing)s
+0 10496(a)m 174(skip)s 634(from)s 1167(one)s 220 fnt35
+1577 10493(@BodyT)m 26(e)k 6(xtPlace)k 240 fnt82 3303 10496(to)m
+3551(the)s 3907(ne)s 3(xt)k 4385(in)s 4636(the)s
+4992(same)s 5548(column,)s 6381(rather)s 7006(than)s 7483(to)s
+7730(the)s 8087(\207rst)s 8526(in)s 8778(the)s 0 10208(ne)m 3(xt)k
+490(column.)s 1394(Also,)s 1974(without)s 2787(this)s 3204(feature)s
+3944(the)s 4314(optimal)s 5120(page)s 5650(break)s 2(er')k 13(s)k
+6595(attempts)s 7477(to)s 7737(end)s 8163(a)s 8351(column)s
+0 9920(early)m 545(w)s 2(ould)k 1214(be)s 1510(frustrated)s
+2496(by)s 2805(Lout)s 3331(then)s 3814(disco)s 3(v)k 3(ering)k
+4991(that)s 5423(plenty)s 6090(of)s 6375(space)s 6976(e)s 3(xisted)k
+7722(at)s 7968(a)s 8149(follo)s 6(wing)k 220 fnt35
+0 9629(@BodyT)m 26(e)k 6(xtPlace)k 240 fnt82 1703 9632(in)m
+1931(the)s 2263(same)s 2795(column.)s 3662(The)s 4074(solution)s
+4887(is)s 5082(based)s 5669(on)s 220 fnt35 5951 9629(ABList)m
+240 fnt82 6625 9632(abo)m 3(v)k 3(e;)k 7287(each)s
+7767(occurrence)s 8855(of)s 220 fnt35 0 9341(@BodyT)m 26(e)k 6(xtPlace)k
+240 fnt82 1712 9344(after)m 2201(a)s 220 fnt35 2361 9341(@FigurePlace)m
+240 fnt82 3798 9344(is)m 4002(not)s 4361(re)s 6(v)k 3(ealed)k
+5213(in)s 5449(the)s 5791(enclosing)s 6754(de\207nition,)s 7772(and)s
+8169(so)s 8428(cannot)s 0 9056(be)m 282(found)s 899(by)s
+1193(body)s 1727(te)s 3(xt)k 2142(g)s 1(alle)k 3(ys)k
+2866(unless)s 3515(a)s 3682(\207gure)s 4296(has)s 4666(pre)s 6(viously)k
+5724(attached)s 6578(to)s 6817(the)s 7165(preceding)s 220 fnt35
+8162 9053(@Figure)m 240 fnt82 8998 9056(-)m 220 fnt35 0 8765(Place)m
+240 fnt82 540 8768(.)m 240 fnt84 0 8021(3.32.)m 591(The)s
+1046(cr)s 4(oss)k 1614(r)s 4(efer)k 4(ence)k
+2616(symbols)s 3494(&&)s 3941(and)s 4382(&&&)s 240 fnt82
+480 7544(The)m 941(cross)s 1516(reference)s 2493(symbol)s 220 fnt35
+3286 7541(&&)m 240 fnt82 3668 7544(tak)m 2(es)k 4241(the)s
+4623(name)s 5230(of)s 5534(a)s 5734(symbol)s 6527(\(not)s
+7006(an)s 7322(object\))s 8068(for)s 8439(its)s 8749(left)s
+0 7256(parameter)m 9(,)k 1068(and)s 1489(an)s 1788(object)s
+2449(whose)s 3134(v)s 6(alue)k 3718(must)s 4260(be)s
+4559(a)s 4741(simple)s 5451(w)s 2(ord,)k 6064(or)s
+6340(se)s 6(v)k 3(eral)k 7079(simple)s 7788(w)s 2(ords,)k
+8495(for)s 8850(its)s 0 6968(right)m 519(parameter)s 13(.)k
+1633(The)s 2069(result)s 2668(is)s 2887(a)s 3061(cross)s
+3612(reference,)s 4615(which)s 5265(may)s 5740(be)s 6030(thought)s
+6831(of)s 7111(as)s 7369(an)s 7661(arro)s 6(w)k
+8275(pointing)s 0 6680(from)m 524(the)s 872(cross)s 1414(reference)s
+2357(symbol)s 3117(to)s 3356(the)s 3704(be)s 3(ginning)k
+4712(of)s 4983(an)s 5266(in)s 9(v)k 4(ocation)k
+6320(of)s 6591(the)s 6939(named)s 7635(symbol.)s 480 6306(The)m
+894(in)s 9(v)k 4(ocation)k 1934(pointed)s 2696(to,)s
+2975(kno)s 6(wn)k 3665(as)s 3901(the)s 240 fnt83
+4235 6308(tar)m 8(g)k 2(et)k 240 fnt82 4846 6306(of)m
+5103(the)s 5437(cross)s 5965(reference,)s 6945(is)s 7141(generally)s
+8070(one)s 8458(whose)s 220 fnt35 0 6015(@T)m 26(ag)k
+240 fnt82 643 6018(parameter)m 1677(has)s 2067(v)s 6(alue)k
+2655(equal)s 3248(to)s 3507(the)s 3875(right)s 4406(parameter)s
+5440(of)s 5731(the)s 6099(cross)s 6661(reference)s 7624(symbol.)s
+8513(Three)s 0 5730(special)m 759(tags,)s 220 fnt35 1292 5727(preceding)m
+240 fnt82 2243 5730(,)m 220 fnt35 2391 5727(f)m 6(ollo)k 3(wing)k
+240 fnt82 3221 5730(,)m 3369(and)s 220 fnt35 3814 5727(f)m 6(oll_or_prec)k
+240 fnt82 4948 5730(,)m 5097(point)s 5690(respecti)s 6(v)k 3(ely)k
+6930(to)s 7210(the)s 7599(\207rst)s 8072(in)s 9(v)k 4(ocation)k
+0 5442(preceding)m 1006(the)s 1365(cross)s 1918(reference)s 2872(in)s
+3126(the)s 3485(\207nal)s 3976(printed)s 4721(document,)s 5783(to)s
+6033(the)s 6392(\207rst)s 6834(in)s 9(v)k 4(ocation)k
+7899(follo)s 6(wing)k 8887(it,)s 0 5154(and)m 404(to)s
+643(the)s 991(\207rst)s 1422(follo)s 6(wing)k 2399(it)s
+2591(if)s 2808(such)s 3304(e)s 3(xists)k 3896(else)s
+4323(to)s 4562(the)s 4910(\207rst)s 5341(preceding)s 6337(it.)s
+480 4780(A)m 709(cross)s 1249(reference)s 2190(may)s 2654(be)s
+2935(used)s 3430(in)s 3671(four)s 4127(w)s 2(ays:)k
+4782(where)s 5420(an)s 5701(object)s 6343(is)s 6552(e)s 3(xpected,)k
+7504(in)s 7745(which)s 8385(case)s 8850(its)s 0 4492(v)m 6(alue)k
+576(is)s 795(a)s 970(cop)s 2(y)k 1497(of)s
+1777(the)s 2134(tar)s 4(get;)k 2794(with)s 3285(the)s
+220 fnt35 3642 4489(@Open)m 240 fnt82 4457 4492(and)m 220 fnt35
+4870 4489(@Use)m 240 fnt82 5544 4492(symbols;)m 6463(with)s 6954(the)s
+220 fnt35 7311 4489(@T)m 26(agged)k 240 fnt82 8309 4492(symbol;)m
+0 4204(and)m 414(in)s 667(the)s 220 fnt35 1025 4201(into)m
+240 fnt82 1441 4204(clause)m 2105(or)s 220 fnt35 2374 4201(@T)m 26(arget)k
+240 fnt82 3271 4204(symbol)m 4041(of)s 4323(a)s 4499(g)s 1(alle)k 3(y)k
+5143(de\207nition,)s 6177(in)s 6430(which)s 7083(case)s 7560(the)s
+7918(v)s 6(alue)k 8496(of)s 8778(the)s 0 3916(tag)m
+345(must)s 870(be)s 220 fnt35 1152 3913(preceding)m 240 fnt82
+2103 3916(,)m 220 fnt35 2210 3913(f)m 6(ollo)k 3(wing)k
+240 fnt82 3040 3916(,)m 3147(or)s 220 fnt35 3406 3913(f)m 6(oll_or_prec)k
+240 fnt82 4540 3916(.)m 480 3542(W)m 9(ithin)k 1233(an)s
+220 fnt35 1557 3539(into)m 240 fnt82 2004 3542(clause)m 2698(or)s
+220 fnt35 2999 3539(@T)m 26(arget)k 240 fnt82 3927 3542(symbol,)m
+4780(the)s 5169(alternati)s 6(v)k 3(e)k 6265(form)s
+220 fnt35 6830 3539(&&&)m 240 fnt82 7365 3542(is)m 7616(acceptable)s
+8722(and)s 0 3254(indicates)m 900(a)s 1066(forcing)s 1809(g)s 1(alle)k 3(y)k
+2443(\(Section)s 3296(2.7\).)s 480 2880(Except)m 1203(within)s 1870(an)s
+220 fnt35 2151 2877(into)m 240 fnt82 2556 2880(clause)m 3208(or)s
+220 fnt35 3465 2877(@T)m 26(arget)k 240 fnt82 4351 2880(symbol,)m
+5162(the)s 5508(symbol)s 6267(referred)s 7078(to)s 7315(must)s
+7839(ha)s 4(v)k 3(e)k 8339(a)s 220 fnt35
+8503 2877(@T)m 26(ag)k 240 fnt82 0 2592(parameter)m 13(.)k
+1100(This)s 1570(is)s 1775(so)s 2035(e)s 6(v)k 3(en)k
+2530(if)s 2741(the)s 3084(right)s 3589(parameter)s 4597(of)s
+4863(the)s 5205(cross)s 5742(reference)s 6679(is)s 220 fnt35
+6884 2589(preceding)m 240 fnt82 7835 2592(,)m 220 fnt35 7936 2589(f)m 6(ollo)k 3(wing)k
+240 fnt82 8766 2592(,)m 8867(or)s 220 fnt35 0 2301(f)m 6(oll_or_prec)k
+240 fnt82 1134 2304(.)m 240 fnt84 0 1515(3.33.)m 591(@T)s 22(agged)k
+240 fnt82 480 1038(The)m 220 fnt35 924 1035(@T)m 26(agged)k
+240 fnt82 1929 1038(symbol)m 2705(tak)s 2(es)k 3261(a)s
+3444(cross)s 4002(reference)s 4961(for)s 5315(its)s 5607(left)s
+6001(parameter)s 7031(and)s 7451(an)s 7750(object,)s 8458(whose)s
+0 750(v)m 6(alue)k 565(must)s 1087(be)s 1366(a)s
+1528(juxtaposition)s 2831(of)s 3099(simple)s 3788(w)s 2(ords,)k
+4475(or)s 4731(se)s 6(v)k 3(eral)k 5450(w)s 2(ords,)k
+6136(or)s 6392(an)s 6672(empty)s 7320(object,)s 8008(for)s
+8343(its)s 8615(right)s 0 462(parameter)m 13(.)k 1104(It)s
+1307(has)s 1675(the)s 2021(ef)s 6(fect)k 2615(of)s
+2885(attaching)s 3812(its)s 4086(right)s 4595(parameter)s 5607(as)s
+5856(an)s 6137(additional)s 7146(tag)s 7489(to)s 7726(the)s
+8072(in)s 9(v)k 4(ocation)k 0 174(denoted)m 819(by)s
+1117(its)s 1397(left)s 1778(parameter)s 9(,)k 2834(unless)s
+3487(the)s 3839(right)s 4353(parameter)s 5371(is)s 5585(empty)s 15(,)k
+6279(in)s 6526(which)s 7172(case)s 220 fnt35 7643 171(@T)m 26(agged)k
+240 fnt82 8636 174(does)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 60 66
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(60)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(nothing.)m
+896(The)s 1324(result)s 1914(of)s 220 fnt35 2185 13202(@T)m 26(agged)k
+240 fnt82 3174 13205(is)m 3384(al)s 2(w)k 2(ays)k
+220 fnt35 4095 13202(@Null)m 240 fnt82 4680 13205(,)m 4787(which)s
+5429(mak)s 2(es)k 6089(it)s 6281(ef)s 6(fecti)k 6(v)k 3(ely)k
+7340(in)s 9(visible.)k 240 fnt84 0 12412(3.34.)m 591(@Open and @Use)s
+240 fnt82 480 11935(The)m 220 fnt35 904 11932(@Open)m 240 fnt82
+1706 11935(symbol)m 2462(tak)s 2(es)k 2998(a)s 3159(cross)s
+3697(reference)s 4636(or)s 4891(symbol)s 5647(in)s 9(v)k 4(ocation)k
+6696(for)s 7030(its)s 7302(left)s 7675(parameter)s 9(,)k
+8722(and)s 0 11647(an)m 269(arbitrary)s 1130(object,)s 1807(which)s
+2435(must)s 2946(be)s 3214(enclosed)s 4095(in)s 4324(braces,)s
+5027(for)s 5351(its)s 5613(right)s 6110(parameter)s 13(.)k
+7201(The)s 7615(right)s 8112(parameter)s 0 11359(may)m 462(refer)s
+966(to)s 1201(the)s 1544(e)s 3(xported)k 2432(parameters)s
+3525(and)s 3925(nested)s 4589(de\207nitions)s 5646(of)s 5912(the)s
+6256(in)s 9(v)k 4(ocation)k 7305(denoted)s 8117(by)s
+8406(the)s 8749(left)s 0 11071(parameter)m 9(,)k 1050(and)s
+1452(its)s 1725(v)s 6(alue)k 2291(is)s 2499(the)s
+220 fnt35 2844 11068(@Open)m 240 fnt82 3648 11071(symbol')m 13(s)k
+4560(result.)s 5252(The)s 5678(tar)s 4(get)k 6274(of)s
+6543(the)s 6889(cross)s 7428(reference)s 8369(may)s 8832(lie)s
+0 10783(in)m 234(an)s 507(e)s 3(xternal)k 1318(database)s
+2187(\(Section)s 3031(3.35\).)s 3684(An)s 3(y)k 4138(symbol)s
+4888(a)s 4(v)k 6(ailable)k 5787(outside)s 6524(the)s
+220 fnt35 6862 10780(@Open)m 240 fnt82 7658 10783(which)m 8290(happens)s
+0 10495(to)m 239(ha)s 4(v)k 3(e)k 741(the)s
+1089(same)s 1637(name)s 2212(as)s 2462(one)s 2865(of)s
+3137(the)s 3485(symbols)s 4335(made)s 4910(a)s 4(v)k 6(ailable)k
+5818(by)s 6113(the)s 220 fnt35 6462 10492(@Open)m 240 fnt82
+7268 10495(will)m 7695(be)s 7978(una)s 4(v)k 6(ailable)k
+0 10207(within)m 668(the)s 220 fnt35 1016 10204(@Open)m 240 fnt82
+1762 10207(.)m 538 9833(The)m 220 fnt35 963 9830(@Use)m 240 fnt82
+1625 9833(symbol)m 2382(is)s 2589(an)s 220 fnt35 2869 9830(@Open)m
+240 fnt82 3672 9833(symbol)m 4429(in)s 4669(a)s 4832(dif)s 6(ferent)k
+5704(form.)s 6329(It)s 6531(may)s 6994(only)s 7471(appear)s
+8165(among)s 8867(or)s 0 9545(after)m 502(the)s 857(de\207nitions)s
+1925(in)s 2175(Lout')s 13(s)k 2844(input,)s 3450(and)s
+3861(it)s 4060(is)s 4277(equi)s 6(v)k 6(alent)k
+5328(to)s 5574(enclosing)s 6551(the)s 6906(remainder)s 7941(of)s
+8219(the)s 8574(input)s 0 9257(in)m 243(an)s 220 fnt35
+526 9254(@Open)m 240 fnt82 1332 9257(symbol.)m 2201(F)s 3(or)k
+2590(e)s 3(xample,)k 240 fnt83 480 8754(de\207nitions)m 220 fnt35
+480 8461(@Use)m 1145({)s 240 fnt83 1269 8466(x)m 220 fnt35
+1435 8461(})m 480 8173(@Use)m 1145({)s 240 fnt83 1269 8178(y)m
+220 fnt35 1431 8173(})m 240 fnt83 480 7890(r)m 8(est)k
+894(of)s 1175(input)s 240 fnt82 0 7389(is)m 210(equi)s 6(v)k 6(alent)k
+1254(to)s 240 fnt83 480 6886(de\207nitions)m 480 6598(x)m 220 fnt35
+646 6593(@Open)m 480 6305({)m 240 fnt83 960 6310(y)m 220 fnt35
+1122 6305(@Open)m 960 6017({)m 240 fnt83 1084 6022(r)m 8(est)k
+1498(of)s 1779(input)s 220 fnt35 960 5729(})m 480 5441(})m
+240 fnt82 0 4947(The)m 220 fnt35 424 4944(@Use)m 240 fnt82
+1085 4947(symbol)m 1841(allo)s 6(ws)k 2506(a)s 2668(set)s
+2989(of)s 3256(standard)s 4120(packages)s 5044(to)s 5279(be)s
+5557(opened)s 6303(without)s 7090(the)s 7434(incon)s 9(v)k 3(enience)k
+8855(of)s 0 4659(enclosing)m 974(the)s 1327(entire)s 1931(document)s
+2939(in)s 220 fnt35 3187 4656(@Open)m 240 fnt82 3998 4659(symbols.)m
+4964(Such)s 5505(enclosure)s 6482(could)s 7076(cause)s 7668(Basser)s
+8370(Lout)s 8887(to)s 0 4371(run)m 376(out)s 742(of)s
+1013(memory)s 15(.)k 240 fnt84 0 3578(3.35.)m 591(@Database and @SysDatabase)s
+240 fnt82 529 3101(The)m 220 fnt35 945 3098(@Database)m 240 fnt82
+2148 3101(symbol)m 2896(is)s 3095(used)s 3580(to)s 3808(declare)s
+4541(the)s 4877(e)s 3(xistence)k 5808(of)s 6067(a)s
+6222(\207le)s 6571(of)s 6831(symbol)s 7579(in)s 9(v)k 4(ocations)k
+8708(that)s 0 2813(Lout)m 512(may)s 978(refer)s 1487(to)s
+1726(when)s 2302(e)s 6(v)k 6(aluating)k 3339(cross)s
+3881(references.)s 5025(In)s 5281(Basser)s 5978(Lout,)s 6537(for)s
+6875(e)s 3(xample,)k 220 fnt35 480 2312(@Database @Months @W)m 6(eekDa)k 6(ys { standard })k
+240 fnt82 0 1814(means)m 690(that)s 1137(there)s 1698(is)s
+1937(a)s 2131(\207le)s 2521(called)s 220 fnt35 3177 1811(standard.ld)m
+240 fnt82 4339 1814(containing)m 5430(in)s 9(v)k 4(ocations)k
+6600(of)s 6899(the)s 7276(pre)s 6(viously)k 8363(de\207ned)s
+0 1526(symbols)m 220 fnt35 846 1523(@Months)m 240 fnt82 1838 1526(and)m
+220 fnt35 2238 1523(@W)m 6(eekDa)k 6(ys)k 240 fnt82
+3503 1526(.)m 3663(A)s 220 fnt35 3889 1523(@Database)m 240 fnt82
+5100 1526(symbol)m 5856(may)s 6318(appear)s 7011(an)s 3(ywhere)k
+7990(a)s 8152(de\207nition)s 0 1238(or)m 252(a)s 220 fnt35
+411 1235(@Use)m 240 fnt82 1069 1238(symbol)m 1822(may)s 2281(appear)s 13(.)k
+3062(Dif)s 6(ferent)k 3982(de\207nitions)s 5036(packages)s 5957(may)s
+6416(refer)s 6918(to)s 7150(a)s 7309(common)s 8196(database,)s
+0 950(pro)m 3(vided)k 935(the)s 1312(de\207nitions)s 2402(the)s 3(y)k
+2894(gi)s 6(v)k 3(e)k 3382(for)s 3749(its)s
+4054(symbols)s 4932(are)s 5308(compatible.)s 6563(An)s 6942(entry)s
+7516(is)s 7755(interpreted)s 8876(as)s 0 662(though)m 756(it)s
+981(appears)s 1795(at)s 2060(the)s 2441(point)s 3026(where)s
+3699(the)s 4080(cross)s 4655(reference)s 5631(that)s 6082(retrie)s 6(v)k 3(es)k
+6978(it)s 7203(does,)s 7782(which)s 8457(allo)s 6(ws)k
+0 374(symbols)m 866(lik)s 2(e)k 220 fnt35 1296 371(@I)m
+240 fnt82 1639 374(for)m 220 fnt35 1995 371(Slope @F)m 6(ont)k
+240 fnt82 3346 374(to)m 3602(be)s 3902(used)s 4417(in)s
+4678(databases.)s 5776(The)s 6221(database)s 7118(\207le)s 7497(may)s
+7981(not)s 8365(contain)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 61 67
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.35.)m 574(@Database and @SysDatabase)s 240 fnt84 8839 13840(61)m
+220 fnt35 0 13202(@Database)m 240 fnt82 1214 13205(or)m 220 fnt35
+1473 13202(@Include)m 240 fnt82 2455 13205(symbols,)m 3360(and)s 3764(each)s
+4259(in)s 9(v)k 4(ocation)k 5313(within)s 5981(it)s
+6173(must)s 6698(be)s 6980(enclosed)s 7875(in)s 8118(braces.)s
+480 12831(Basser)m 1198(Lout)s 1732(constructs)s 2773(an)s 240 fnt83
+3078 12833(inde)m 4(x)k 3674(\207le)s 240 fnt82 3959 12831(,)m
+4087(which)s 4751(in)s 5016(this)s 5433(e)s 3(xample)k
+6318(is)s 6550(called)s 220 fnt35 7199 12828(standard.li)m 240 fnt82
+8196 12831(,)m 8325(the)s 8695(\207rst)s 0 12543(time)m 481(it)s
+675(e)s 6(v)k 3(er)k 1139(encounters)s 2227(the)s
+2577(database,)s 3509(as)s 3761(an)s 4045(aid)s 4397(to)s
+4638(searching)s 5608(it.)s 5906(If)s 6138(the)s 6488(database)s
+7368(\207le)s 7731(is)s 7943(changed,)s 8850(its)s 0 12255(inde)m 3(x)k
+586(\207le)s 950(must)s 1477(be)s 1762(deleted)s 2512(by)s
+2809(the)s 3159(user)s 3620(so)s 3888(that)s 4309(Basser)s
+5008(Lout)s 5523(kno)s 6(ws)k 6196(to)s 6438(reconstruct)s
+7561(it.)s 7860(There)s 8475(is)s 8688(also)s 0 11967(an)m
+300(installation)s 1435(option)s 2121(which)s 2780(allo)s 6(ws)k
+3466(this)s 3879(deletion)s 4723(to)s 4979(be)s 5278(done)s
+5817(automatically)s 7188(on)s 7502(suitable)s 8318(systems)s 0 11679(\(including)m
+1036(Unix\).)s 480 11305(Basser)m 1210(Lout)s 1756(searches)s 2649(for)s
+3021(databases)s 4021(in)s 4298(the)s 4679(current)s 5449(directory)s
+6398(\207rst,)s 6910(then)s 7412(in)s 7689(a)s 7888(sequence)s
+8855(of)s 0 11017(standard)m 868(places.)s 1629(T)s 19(o)k
+1929(search)s 2596(the)s 2944(standard)s 3812(places)s 4460(only)s 15(,)k
+4978(use)s 220 fnt35 5353 11014(@SysDatabase)m 240 fnt82 6873 11017(.)m
+240 fnt84 0 10224(3.36.)m 591(@Graphic)s 240 fnt82 556 9747(Lout)m
+1084(does)s 1590(not)s 1972(pro)s 3(vide)k 2772(the)s
+3136(v)s 6(ast)k 3592(repertoire)s 4591(of)s 4878(graphical)s
+5838(objects)s 6582(\(lines,)s 7235(circles,)s 7980(box)s 3(es,)k
+8660(etc.\))s 0 9459(required)m 846(by)s 1132(diagrams.)s 2163(Instead,)s
+2952(it)s 3135(pro)s 3(vides)k 3999(an)s 4274(escape)s
+4958(route)s 5497(to)s 5727(some)s 6280(other)s 6823(language)s
+7734(that)s 8144(does)s 8625(ha)s 4(v)k 3(e)k
+0 9171(these)m 547(features,)s 1409(via)s 1761(its)s 220 fnt35
+2037 9168(@Gr)m 2(aphic)k 240 fnt82 3081 9171(symbol:)m 220 fnt35
+480 8673({ 0 0 mo)m 3(v)k 5(eto)k 480 8385( 0 ysiz)m 3(e lineto)k
+480 8097( xsiz)m 3(e ysiz)k 3(e lineto)k 480 7809( xsiz)m 3(e 0 lineto)k
+480 7521( closepath)m 480 7233( strok)m 4(e)k 480 6945(})m 480 6657(@Gr)m 2(aphic)k
+480 6369({ //0.2c)m 480 6081( ||0.2c hello)m 8(, w)k 2(or)k -3(ld ||0.2c)k
+480 5793( //0.2c)m 480 5505(})m 240 fnt82 0 5011(The)m 428(result)s
+1018(of)s 1289(the)s 1637(abo)s 3(v)k 3(e)k
+2259(in)s 9(v)k 4(ocation)k 3313(of)s 3584(the)s
+3932(symbol)s 220 fnt35 4692 5008(@Gr)m 2(aphic)k 240 fnt82
+5736 5011(is)m 1365 422 0 422 240 288 60 480 4249 LoutGr2
+0 0 moveto
+0 ysize lineto
+xsize ysize lineto
+xsize 0 lineto
+closepath
+stroke
+grestore
+113 146(hello,)m 698(w)s 2(orld)k
+grestore
+480 3533(The)m
+909(right)s 1421(parameter)s 2437(al)s 2(w)k 2(ays)k
+3149(appears)s 3931(as)s 4183(part)s 4615(of)s 4888(the)s
+5237(result,)s 5875(and)s 6281(indeed)s 6978(the)s 7327(result)s
+7919(is)s 8130(al)s 2(w)k 2(ays)k 8843(an)s
+0 3245(object)m 651(whose)s 1327(size)s 1761(is)s 1979(identical)s
+2863(to)s 3110(the)s 3465(size)s 3900(of)s 4178(the)s
+4534(right)s 5052(parameter)s 6074(with)s 220 fnt35 6563 3242(@OneCol)m
+240 fnt82 7583 3245(and)m 220 fnt35 7995 3242(@OneRo)m 3(w)k
+240 fnt82 0 2957(applied)m 762(to)s 1001(it.)s 1297(From)s
+1875(no)s 6(w)k 2336(on)s 2633(we)s 2968(refer)s
+3477(to)s 3716(this)s 4112(part)s 4543(of)s 4814(the)s
+5162(result)s 5752(as)s 6002(the)s 240 fnt83 6350 2959(base)m
+240 fnt82 6782 2957(.)m 480 2583(The)m 898(left)s 1264(parameter)s
+2267(is)s 2466(implementation-dependent:)s 5184(that)s 5591(is,)s 5847(its)s
+6112(meaning)s 6978(is)s 7177(not)s 7532(de\207ned)s 8284(by)s
+8567(Lout,)s 0 2295(and)m 421(dif)s 6(ferent)k 1313(implementations)s
+2975(could)s 3582(require)s 4332(dif)s 6(ferent)k 5224(v)s 6(alues)k
+5898(for)s 6253(it.)s 6567(The)s 7012(follo)s 6(wing)k
+8007(description)s 0 2007(applies)m 752(to)s 1016(Basser)s 1737(Lout,)s
+2321(which)s 2988(uses)s 3475(the)s 3848(PostScript)s 4914(page)s
+5447(description)s 6591(language)s 7535([1)s 7709(].)s 7977(Similar)s
+8764(b)s 4(ut)k 0 1719(more)m 559(restricted)s 1517(possibilities)s
+2722(e)s 3(xist)k 3243(with)s 3737(the)s 4098(PDF)s
+4608(back)s 5134(end)s 5550(\(see)s 6003(a)s 6182(separate)s
+7033(document)s 8050(distrib)s 4(uted)k 0 1431(with)m 482(Lout\);)s
+1125(to)s 1364(include)s 2124(both,)s 2657(use)s 3032(the)s
+220 fnt35 3380 1428(@Bac)m 4(kEnd)k 240 fnt82 4525 1431(symbol)m
+5285(lik)s 2(e)k 5697(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 62 68
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(62)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 480 13207({ @Bac)m 4(kEnd @Case {)k
+480 12919( P)m 11(ostScr)k -3(ipt @Y)k 4(ield)k 480 12631( {)m
+480 12343( ...)m 480 12055( })m 480 11767( PDF @Y)m 4(ield)k 480 11479( {)m
+480 11191( ...)m 480 10903( })m 480 10615( })m 480 10327( @Gr)m 2(aphic)k
+480 10039( {)m 480 9751( ...)m 480 9463( })m 480 9175(})m 240 fnt82
+0 8681(Returning)m 1039(to)s 1307(PostScript,)s 2425(the)s 2802(left)s
+3208(parameter)s 4251(refers)s 4874(to)s 5142(a)s 5337(coordinate)s
+6431(system)s 7184(whose)s 7881(origin)s 8538(is)s 8778(the)s
+0 8393(bottom)m 773(left-hand)s 1728(corner)s 2433(of)s 2740(the)s
+3123(base.)s 3747(It)s 3987(may)s 4489(use)s 4899(the)s
+5282(symbols)s 220 fnt35 6166 8390(xsiz)m 3(e)k 240 fnt82
+6751 8393(and)m 220 fnt35 7190 8390(ysiz)m 3(e)k 240 fnt82
+7774 8393(to)m 8048(denote)s 8778(the)s 0 8105(horizontal)m 1031(and)s
+1442(v)s 3(ertical)k 2216(size)s 2650(of)s 2928(the)s
+3283(base;)s 3827(similarly)s 15(,)k 220 fnt35 4774 8102(xmar)m -3(k)k
+240 fnt82 5442 8105(and)m 220 fnt35 5853 8102(ymar)m -3(k)k
+240 fnt82 6521 8105(denote)m 7222(the)s 7577(positions)s 8499(of)s
+8778(the)s 0 7817(base')m 13(s)k 635(column)s 1410(and)s
+1814(ro)s 6(w)k 2234(marks:)s gsave
+480 5454 translate
+180 fnt82 3570 2072 0 1994 180 288 45 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+180 fnt83 107 1955(ysize)m
+0 1388(ymark)m 180 fnt82 364 253(0)m 2551 1701 850 1134 180 288 45 676 293 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2551 1701 850 1134 180 288 45 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2551 1701 850 1134 180 288 45 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
+676 14(0)m 180 fnt83
+1526 15(xmark)m 3227(xsize)s end end restore
+grestore
+0 5003(In)m 265(addition)s 1115(to)s
+1363(these)s 1920(four)s 2387(symbols)s 3245(and)s 3658(0,)s
+3895(lengths)s 4646(may)s 5121(be)s 5412(denoted)s 6238(in)s
+6490(centimetres,)s 7706(inches,)s 8434(points,)s 0 4715(ems,)m 492(f)s -13(')k 13(s,)k
+850(v')s 13(s)k 1180(and)s 1584(s')s 13(s)k
+1887(using)s 2459(the)s 2807(notation)s 240 fnt83 480 4179(l)m
+220 fnt35 666 4174(cm)m 240 fnt82 1197 4177(instead)m 1932(of)s
+2203(Lout')s 13(s)k 240 fnt83 3045 4179(l)m 240 fnt82
+3111 4177(c)m 240 fnt83 480 3891(l)m 220 fnt35 666 3886(in)m
+240 fnt82 1197 3889(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 3891(l)m 240 fnt82 3111 3889(i)m 240 fnt83
+480 3603(l)m 220 fnt35 666 3598(pt)m 240 fnt82 1197 3601(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 3603(l)m
+240 fnt82 3111 3601(p)m 240 fnt83 480 3315(l)m 220 fnt35
+666 3310(em)m 240 fnt82 1197 3313(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 3315(l)m 240 fnt82 3111 3313(m)m 240 fnt83
+480 3027(l)m 220 fnt35 666 3022(ft)m 240 fnt82 1197 3025(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 3027(l)m
+240 fnt82 3111 3025(f)m 240 fnt83 480 2739(l)m 220 fnt35
+666 2734(vs)m 240 fnt82 1197 2737(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 2739(l)m 240 fnt82 3111 2737(v)m 240 fnt83
+480 2451(l)m 220 fnt35 666 2446(sp)m 240 fnt82 1197 2449(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 2451(l)m
+240 fnt82 3111 2449(s)m 0 1908(Note)m 521(that)s 939(there)s
+1472(must)s 1997(be)s 2279(a)s 2445(space)s 3032(between)s
+3886(the)s 4234(number)s 5025(and)s 5429(its)s 5705(unit,)s
+6184(unlik)s 2(e)k 6836(Lout)s 7348(proper)s 13(.)k
+480 1534(A)m 732(point)s 1306(within)s 1996(the)s 2366(base)s
+2869(\(and,)s 3423(with)s 3927(care,)s 4453(a)s 4642(point)s
+5216(outside)s 5985(it\))s 6267(may)s 6755(be)s 7059(denoted)s
+7897(by)s 8213(a)s 8401(pair)s 8855(of)s 0 1246(lengths.)m
+855(F)s 3(or)k 1244(e)s 3(xample,)k 220 fnt35
+480 749(xmar)m -3(k ymar)k -3(k)k 240 fnt82 0 251(is)m
+210(the)s 558(point)s 1110(where)s 1750(the)s 2098(marks)s
+2733(cross,)s 3331(and)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 63 69
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.36.)m 574(@Gr)s 3(aphic)k 240 fnt84
+8833 13840(63)m 220 fnt35 480 13214(0 2 cm)m 240 fnt82 0 12759(is)m
+195(a)s 346(point)s 883(on)s 1164(the)s 1497(left)s
+1859(edge,)s 2402(tw)s 2(o)k 2797(centimetres)s 3933(abo)s 3(v)k 3(e)k
+4539(the)s 4872(bottom)s 5595(left-hand)s 6499(corner)s 13(.)k
+7245(These)s 7857(tw)s 2(o)k 8251(numbers)s 0 12471(are)m
+347(called)s 975(the)s 240 fnt83 1323 12473(x)m 1489(coor)s 8(dinate)k
+240 fnt82 2571 12471(and)m 2975(the)s 240 fnt83 3323 12473(y)m
+3485(coor)s 8(dinate)k 240 fnt82 4567 12471(of)m 4838(the)s
+5186(point.)s 480 12097(The)m 906(\207rst)s 1335(step)s 1770(in)s
+2011(specifying)s 3057(a)s 3221(graphic)s 3988(object)s 4630(is)s
+4837(to)s 5074(de\207ne)s 5712(a)s 240 fnt83 5876 12099(path)m
+240 fnt82 6297 12097(.)m 6458(A)s 6686(path)s 7152(can)s
+7539(be)s 7818(thought)s 8608(of)s 8876(as)s 0 11809(the)m
+349(track)s 888(of)s 1161(a)s 1328(pen)s 1733(mo)s 3(ving)k
+2516(o)s 3(v)k 3(er)k 2996(the)s 3346(page.)s
+3963(The)s 4393(pen)s 4797(may)s 5265(be)s 5548(up)s
+5842(\(not)s 6289(dra)s 3(wing\))k 7199(or)s 7460(do)s 6(wn)k
+8045(\(dra)s 3(wing)k 8960(a)s 0 11521(line)m 414(or)s
+673(curv)s 3(e\))k 1329(as)s 1579(it)s 1771(mo)s 3(v)k 3(es.)k
+2554(The)s 2982(entire)s 3581(path)s 4050(is)s 4260(a)s
+4426(sequence)s 5359(of)s 5630(the)s 5978(follo)s 6(wing)k
+6955(items:)s 240 fnt83 1847 11149(x)m 2013(y)s 220 fnt35
+2175 11144(mo)m 3(v)k 5(eto)k 240 fnt82 3120 11147(Lift)m
+3537(the)s 3885(pen)s 4288(and)s 4692(mo)s 3(v)k 3(e)k
+5274(it)s 5466(to)s 5705(the)s 6053(indicated)s 6987(point.)s
+240 fnt83 2036 10790(x)m 2202(y)s 220 fnt35 2364 10785(lineto)m
+240 fnt82 3120 10788(Put)m 3557(the)s 3963(pen)s 4424(do)s 6(wn)k
+5066(and)s 5528(dra)s 3(w)k 6115(a)s 6339(straight)s
+7173(line)s 7645(to)s 7942(the)s 8348(indicat)s 8998(-)s
+3120 10500(ed)m 3404(point.)s 240 fnt83 702 10141(x)m 868(y)s
+1030(r)s 1188(angle1)s 1879(angle2)s 220 fnt35 2580 10136(arc)m
+240 fnt82 3120 10139(Put)m 3502(the)s 3853(pen)s 4259(do)s 6(wn)k
+4846(and)s 5253(dra)s 3(w)k 5785(a)s 5954(circular)s
+6745(arc)s 7092(whose)s 7763(centre)s 8405(has)s 8779(co)s
+8998(-)s 3120 9851(ordinates)m 240 fnt83 4058 9853(x)m 240 fnt82
+4235 9851(and)m 240 fnt83 4650 9853(y)m 240 fnt82 4823 9851(and)m
+5238(whose)s 5917(radius)s 6563(is)s 240 fnt83 6784 9853(r)m
+240 fnt82 6882 9851(.)m 7057(The)s 7496(arc)s 7851(be)s 3(gins)k
+8535(at)s 8778(the)s 3120 9563(angle)m 240 fnt83 3727 9565(angle1)m
+240 fnt82 4451 9563(measuring)m 5533(counterclockwise)s 7295(from)s 7852(the)s
+8233(point)s 8818(di)s 8998(-)s 3120 9275(rectly)m 3714(to)s
+3949(the)s 4294(right)s 4801(of)s 5069(the)s 5413(centre,)s
+6100(and)s 6500(proceeds)s 7397(counterclockwise)s 3120 8987(to)m 240 fnt83
+3361 8989(angle2)m 240 fnt82 4002 8987(.)m 4168(If)s 4401(the)s
+4751(arc)s 5098(is)s 5310(not)s 5679(the)s 6029(\207rst)s
+6462(thing)s 7010(on)s 7309(the)s 7660(path,)s 8181(a)s
+8350(straight)s 3120 8699(line)m 3549(will)s 3990(be)s 4287(dra)s 3(wn)k
+4954(connecting)s 6072(the)s 6435(current)s 7186(point)s 7753(to)s
+8007(the)s 8370(start)s 8855(of)s 3120 8411(the)m 3468(arc.)s
+240 fnt83 589 8102(x)m 755(y)s 917(r)s 1075(angle1)s
+1766(angle2)s 220 fnt35 2467 8097(arcn)m 240 fnt82 3120 8100(As)m
+3437(for)s 3775(arc,)s 4173(b)s 4(ut)k 4535(the)s
+4883(arc)s 5227(goes)s 5717(clockwise)s 6729(from)s 240 fnt83
+7253 8102(angle1)m 240 fnt82 7944 8100(to)m 240 fnt83 8183 8102(angle2)m
+240 fnt82 8824 8100(.)m 220 fnt35 1955 7738(closepath)m 240 fnt82
+3120 7741(Dra)m 3(w)k 3702(a)s 3868(straight)s 4644(line)s
+5058(back)s 5571(to)s 5810(the)s 6158(point)s 6710(most)s
+7235(recently)s 8058(mo)s 3(v)k 3(ed)k 8762(to.)s
+0 7367(The)m 428(\207rst)s 860(item)s 1344(should)s 2042(al)s 2(w)k 2(ays)k
+2753(be)s 3036(a)s 220 fnt35 3202 7364(mo)m 3(v)k 5(eto)k
+240 fnt82 3907 7367(,)m 220 fnt35 4015 7364(arc)m 240 fnt82
+4315 7367(,)m 4422(or)s 220 fnt35 4682 7364(arcn)m 240 fnt82
+5095 7367(.)m 5259(It)s 5465(should)s 6162(be)s 6445(clear)s
+6968(from)s 7493(this)s 7889(that)s 8308(the)s 8657(path)s
+0 7079(gi)m 6(v)k 3(en)k 580(earlier:)s 220 fnt35
+480 6585(0 0 mo)m 3(v)k 5(eto)k 480 6297(0 ysiz)m 3(e lineto)k
+480 6009(xsiz)m 3(e ysiz)k 3(e lineto)k 480 5721(xsiz)m 3(e 0 lineto)k
+480 5433(closepath)m 240 fnt82 0 4937(traces)m 607(around)s 1330(the)s
+1678(boundary)s 2637(of)s 2908(the)s 3256(base)s 3737(with)s
+4219(the)s 4567(pen)s 4970(do)s 6(wn.)k 480 4563(Once)m
+1039(a)s 1203(path)s 1670(is)s 1877(set)s 2200(up,)s
+2545(we)s 2877(are)s 3222(ready)s 3805(to)s 240 fnt83
+4041 4565(paint)m 240 fnt82 4595 4563(it)m 4785(onto)s 5262(the)s
+5607(page.)s 6221(There)s 6832(are)s 7176(tw)s 2(o)k
+7584(choices:)s 8405(we)s 8737(can)s 0 4275(either)m 240 fnt83
+618 4277(str)m 10(ok)k 2(e)k 240 fnt82 1259 4275(it,)m
+1514(which)s 2172(means)s 2850(to)s 3105(display)s 3866(it)s
+4074(as)s 4340(described;)s 5383(or)s 5658(we)s 6009(can)s
+240 fnt83 6414 4277(\207ll)m 240 fnt82 6742 4275(it,)m 6997(which)s
+7655(means)s 8333(to)s 8588(paint)s 0 3987(e)m 6(v)k 3(erything)k
+1067(inside)s 1694(it)s 1886(gre)s 3(y)k 2362(or)s
+2621(black.)s 3303(F)s 3(or)k 3692(stroking)s 4529(the)s
+4877(tw)s 2(o)k 5287(main)s 5822(options)s 6578(are)s
+240 fnt83 1581 3484(length)m 220 fnt35 2234 3479(setline)m 4(width)k
+240 fnt82 3600 3482(The)m 4028(pen)s 4431(will)s 4857(dra)s 3(w)k
+5386(lines)s 5888(of)s 6159(the)s 6507(gi)s 6(v)k 3(en)k
+7087(width.)s 220 fnt35 1553 2974([)m 240 fnt83 1668 2979(length)m
+220 fnt35 2321 2974(])m 2430(0)s 2605(setdash)s 240 fnt82
+3600 2977(The)m 4034(pen)s 4444(will)s 4876(dra)s 3(w)k
+5412(dashed)s 6142(lines)s 6650(when)s 7233(it)s 7432(is)s
+7648(do)s 6(wn,)k 8289(with)s 8778(the)s 3600 2689(dashes)m
+4289(each)s 4784(of)s 5055(the)s 5403(gi)s 6(v)k 3(en)k
+5983(length.)s 0 2186(These)m 627(options)s 1383(are)s 1730(follo)s 6(wed)k
+2632(by)s 2926(the)s 3274(w)s 2(ord)k 220 fnt35
+3822 2183(strok)m 4(e)k 240 fnt82 4408 2186(.)m 4572(So,)s
+4932(for)s 5270(e)s 3(xample,)k 220 fnt35 480 1688({ 0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto)k
+480 1400( 2 pt setline)m 4(width [ 5 pt ] 0 setdash strok)k 4(e)k 480 1112(})m 480 824(@Gr)m 2(aphic { 3i @Wide })k
+240 fnt82 0 328(has)m 370(result)s 4320 0 0 0 240 288 60 480 38 LoutGr2
+0 0 moveto xsize 0 lineto
+2 pt setlinewidth [ 5 pt ] 0 setdash stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 64 70
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(64)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 480 12940(When)m
+1106(\207lling)s 1726(in)s 1965(the)s 2310(re)s 3(gion)k
+2971(enclosed)s 3862(by)s 4153(a)s 4315(path,)s 4830(the)s
+5175(main)s 5706(option)s 6371(is)s 220 fnt35 6578 12937(setg)m 2(r)k 2(a)k 6(y)k
+240 fnt82 7286 12940(,)m 7389(which)s 8027(determines)s 0 12652(the)m
+348(shade)s 949(of)s 1220(gre)s 3(y)k 1696(to)s
+1935(use,)s 2361(on)s 2658(a)s 2824(scale)s 3357(from)s
+3881(0)s 4056(\(black\))s 4781(to)s 5020(1)s 5175(\(white\).)s
+6028(So,)s 6388(for)s 6726(e)s 3(xample,)k 220 fnt35
+480 12154({ 0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto 0 ysiz)k 3(e lineto closepath)k
+480 11866( 0.8 setg)m 2(r)k 2(a)k 6(y \207ll)k 480 11578(})m
+480 11290(@Gr)m 2(aphic)k 480 11002({ 2c @Wide 2c @High })m 240 fnt82 0 10503(has)m
+370(result)s 1134 1134 0 1134 240 288 60 480 9079 LoutGr2
+0 0 moveto xsize 0 lineto 0 ysize lineto closepath
+0.8 setgray fill
+grestore
+
+grestore
+480 8363(There)m 1107(are)s 1468(man)s 3(y)k
+2066(other)s 2631(options.)s 3515(The)s 3957(v)s 6(alue)k
+4540(of)s 4825(the)s 5188(left)s 5579(parameter)s 6608(of)s
+220 fnt35 6893 8360(@Gr)m 2(aphic)k 240 fnt82 7952 8363(may)m
+8432(be)s 8729(an)s 3(y)k 0 8075(fragment)m 922(of)s
+1193(the)s 1541(PostScript)s 2583(page)s 3091(description)s 4210(language)s
+5130([1)s 5304(].)s 5547(Here)s 6067(are)s 6414(tw)s 2(o)k
+6824(other)s 7375(e)s 3(xamples:)k 220 fnt35 480 7578(xsiz)m 3(e)k
+1030(2)s 1203(div)s 240 fnt82 0 7124(denoting)m 891(a)s
+1057(length)s 1712(equal)s 2285(to)s 2524(half)s 2967(the)s
+3315(horizontal)s 4339(size)s 4766(of)s 5037(the)s 5385(base,)s
+5917(and)s 220 fnt35 480 6625(gsa)m 4(v)k 5(e)k
+1110(\207ll)s 1363(g)s 2(restore)k 2219(strok)s 4(e)k
+240 fnt82 0 6126(which)m 648(both)s 1138(\207lls)s 1554(and)s
+1965(strok)s 2(es)k 2698(the)s 3053(path.)s 3636(Since)s
+4230(Basser)s 4933(Lout)s 5452(does)s 5949(not)s 6322(check)s
+6948(that)s 7373(the)s 7728(left)s 8112(parameter)s 0 5838(is)m
+209(v)s 6(alid)k 737(PostScript,)s 1824(it)s 2014(is)s
+2222(possible)s 3061(to)s 3298(cause)s 3883(mysterious)s 4981(errors)s
+5586(in)s 5828(the)s 6174(printing)s 6982(de)s 6(vice,)k
+7705(resulting)s 8592(in)s 8833(no)s 0 5550(output,)m 708(if)s
+914(an)s 1186(incorrect)s 2083(v)s 6(alue)k 2640(is)s
+2839(gi)s 6(v)k 3(en.)k 3515(It)s 3709(is)s
+3908(a)s 4063(good)s 4590(idea)s 5037(to)s 5265(encapsulate)s
+6425(graphics)s 7275(objects)s 7992(in)s 8224(carefully)s 0 5262(tested)m
+635(de\207nitions,)s 1772(lik)s 2(e)k 2205(those)s 2786(of)s
+3078(the)s 3446(Diag)s 3985(\207gure)s 4619(dra)s 3(wing)k
+5473(package)s 6334([4)s 6527(,)s 6654(Chapter)s 7492(9],)s
+7818(to)s 8078(be)s 8380(sure)s 8855(of)s 0 4974(a)m 4(v)k 4(oiding)k
+883(these)s 1430(errors.)s 480 4600(PostScript)m 1543(e)s 3(xperts)k
+2302(may)s 2789(\207nd)s 3241(the)s 3610(follo)s 6(wing)k
+4608(information)s 5814(helpful)s 6567(when)s 7164(designing)s 8170(adv)s 6(anced)k
+0 4312(graphics)m 861(features.)s 1780(The)s 2208(left)s 2585(parameter)s
+3599(of)s 220 fnt35 3870 4309(@Gr)m 2(aphic)k 240 fnt82
+4914 4312(may)m 5380(ha)s 4(v)k 3(e)k 5881(tw)s 2(o)k
+6291(parts,)s 6862(separated)s 7822(by)s 220 fnt35 8116 4309(//)m
+240 fnt82 8241 4312(:)m 220 fnt35 480 3804({)m 240 fnt83
+604 3809(\207r)m 2(st)k 1038(part)s 220 fnt35 1501 3804(//)m
+240 fnt83 1686 3809(second)m 2417(part)s 220 fnt35 2880 3804(} @Gr)m 2(aphic)k
+240 fnt83 4058 3809(object)m 240 fnt82 0 3308(If)m 230(there)s
+763(is)s 973(no)s 220 fnt35 1266 3305(//)m 240 fnt82
+1391 3308(,)m 1498(the)s 1846(second)s 2569(part)s 3000(is)s
+3210(tak)s 2(en)k 3783(to)s 4022(be)s 4304(empty)s 15(.)k
+5051(The)s 5479(PostScript)s 6521(output)s 7193(has)s 7563(the)s
+7911(form)s 220 fnt35 480 2851(gsa)m 4(v)k 5(e)k
+240 fnt83 480 2568(x)m 646(y)s 220 fnt35 808 2563(tr)m 2(anslate)k
+240 fnt83 480 2280(Code)m 1039(whic)s 3(h)k 1663(de\207nes)s
+220 fnt35 2383 2275(xsiz)m 3(e)k 240 fnt83 2872 2280(,)m
+220 fnt35 2965 2275(ysiz)m 3(e)k 240 fnt83 3454 2280(,)m
+220 fnt35 3547 2275(xmar)m -3(k)k 240 fnt83 4148 2280(,)m
+220 fnt35 4241 2275(ymar)m -3(k)k 240 fnt83 4842 2280(,)m
+220 fnt35 4935 2275(ft)m 240 fnt83 5053 2280(,)m 220 fnt35
+5146 2275(vs)m 240 fnt83 5359 2280(,)m 5452(and)s 220 fnt35
+5878 2275(sp)m 480 1987(gsa)m 4(v)k 5(e)k 240 fnt83
+480 1704(\207r)m 2(st)k 914(part)s 220 fnt35 480 1411(g)m 2(restore)k
+240 fnt83 480 1128(Code)m 1039(whic)s 3(h)k 1663(r)s 8(ender)k 2(s)k
+2439(the)s 2784(right)s 3313(par)s 3(ameter)k 4372(in)s
+4612(tr)s 3(anslated)k 5645(coor)s 8(dinates)k 480 840(second)m
+1211(part)s 220 fnt35 480 547(g)m 2(restore)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 65 71
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.36.)m 574(@Gr)s 3(aphic)k 240 fnt84
+8833 13840(65)m 240 fnt82 0 13205(where)m 240 fnt83 628 13207(x)m
+240 fnt78 733 13199(,)m 240 fnt83 802 13207(y)m 240 fnt82
+952 13205(is)m 1149(the)s 1485(position)s 2300(of)s 2558(the)s
+2894(lo)s 6(wer)k 3479(left)s 3843(corner)s 4501(of)s
+4759(the)s 5095(base.)s 5671(Ha)s 4(ving)k 6412(tw)s 2(o)k
+6810(parts)s 7312(permits)s 8066(brack)s 2(eting)k 0 12917(operations,)m
+1112(lik)s 2(e)k 220 fnt35 1533 12914(sa)m 4(v)k 5(e)k
+240 fnt82 2049 12917(and)m 220 fnt35 2462 12914(restore)m 240 fnt82
+3206 12917(or)m 220 fnt35 3474 12914(begin)m 240 fnt82 4065 12917(and)m
+220 fnt35 4478 12914(end)m 240 fnt82 4832 12917(,)m 4949(to)s
+5197(enclose)s 5979(an)s 6271(object.)s 7028(See)s 7438(the)s
+7795(source)s 8484(\207le)s 8855(of)s 0 12629(the)m 348(Diag)s
+866(package)s 1706(for)s 2044(e)s 3(xamples.)k 240 fnt84
+0 11836(3.37.)m 591(@PlainGraphic)s 240 fnt82 567 11359(The)m 220 fnt35
+1023 11356(@PlainGr)m 2(aphic)k 240 fnt82 2580 11359(symbol)m 3368(is)s
+3606(a)s 4(v)k 3(ery)k 4211(rudimentary)s 5461(analogue)s
+6408(for)s 6774(plain)s 7337(te)s 3(xt)k 7779(output)s
+8479(of)s 8778(the)s 220 fnt35 0 11068(@Gr)m 2(aphic)k
+240 fnt82 1037 11071(symbol)m 1789(for)s 2119(PostScript)s 3153(output.)s
+3921(Its)s 4202(result)s 4784(is)s 4986(its)s 5254(right)s
+5757(parameter)s 6763(printed)s 7490(on)s 7779(a)s 7937(background)s
+0 10783(created)m 747(by)s 1041(repeated)s 1908(printings)s 2809(of)s
+3080(its)s 3356(left)s 3733(parameter)s 9(,)k 4785(which)s
+5427(must)s 5952(be)s 6234(a)s 6400(simple)s 7093(w)s 2(ord.)k
+7747(F)s 3(or)k 8136(e)s 3(xample,)k 480 10278("." @PlainGraphic 5s @W)m 9(ide)k
+0 9775(w)m 2(ould)k 676(produce)s 1525(\207v)s 3(e)k
+1959(dots.)s 220 fnt35 2544 9772(@PlainGr)m 2(aphic)k 240 fnt82
+4096 9775(is)m 4328(used)s 4847(in)s 5112(the)s 220 fnt35
+5482 9772(tb)m 4(l)k 240 fnt82 5777 9775(table-dra)m 3(wing)k
+7176(package)s 8038(to)s 8299(produce)s 0 9487(plain-te)m 3(xt)k
+972(rules.)s 240 fnt84 0 8694(3.38.)m 591(@IncludeGraphic)s 2491(and)s
+2932(@SysIncludeGraphic)s 240 fnt82 540 8217(These)m 1167(symbols)s 2016(instruct)s
+2792(Lout)s 3304(to)s 3543(incorporate)s 4687(a)s 4853(separately)s
+5875(created)s 6622(illustration:)s 220 fnt35 480 7716(@IncludeGr)m 2(aphic "m)k 3(ypor)k -8(tr)k 2(ait.eps")k
+240 fnt82 0 7218(The)m 457(parameter)s 1500(is)s 1739(implementation-dependent;)s
+4443(in)s 4715(Basser)s 5441(Lout)s 5982(it)s 6203(is)s
+6442(an)s 6754(object)s 7427(whose)s 8124(v)s 6(alue)k
+8721(is)s 8960(a)s 0 6930(simple)m 705(w)s 2(ord)k
+1265(denoting)s 2168(the)s 2528(name)s 3114(of)s 3397(a)s
+3575(\207le.)s 4056(This)s 4544(\207le)s 4917(should)s 5626(ideally)s
+6342(be)s 6636(a)s 6814(PostScript)s 7868(EPS)s 8338(V)s 26(ersion)k
+0 6642(3.0)m 345(\207le)s 696([1)s 870(],)s 1045(since)s
+1582(then)s 2040(Lout)s 2542(will)s 2957(k)s 2(eep)k
+3450(careful)s 4156(track)s 4684(of)s 4944(what)s 5459(resources)s
+6401(are)s 6738(required)s 7581(for)s 7909(printing)s 8708(that)s
+0 6354(\207le.)m 473(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1437(an)s 3(y)k 1838(PostScript)s 2885(\207le)s 3250(containing)s
+4317(the)s 220 fnt35 4669 6351(%%BoundingBo)m 6(x:)k 240 fnt82
+6464 6354(comment)m 7418(and)s 7826(not)s 8197(requiring)s 0 6066(unusual)m
+800(resources)s 1753(is)s 1963(lik)s 2(ely)k 2559(to)s
+2798(w)s 2(ork.)k 480 5692(The)m 924(result)s 1530(of)s
+220 fnt35 1817 5689(@IncludeGr)m 2(aphic)k 240 fnt82 3584 5692(is)m
+3811(an)s 4110(ordinary)s 4990(Lout)s 5518(object)s 6179(with)s
+6677(marks)s 7328(through)s 8146(its)s 8439(centre.)s 0 5404(It)m
+202(may)s 665(be)s 944(rotated,)s 1711(scaled,)s 2412(and)s
+2813(generally)s 3753(treated)s 4456(lik)s 2(e)k 4865(an)s 3(y)k
+5259(other)s 5807(object.)s 6552(Basser)s 7246(Lout)s 7755(determines)s
+8850(its)s 0 5116(size)m 434(by)s 735(consulting)s 1792(the)s
+2147(bounding)s 3113(box)s 3536(information)s 4728(in)s 4978(the)s
+5333(\207le.)s 5809(If)s 6047(this)s 6450(cannot)s 7155(be)s
+7444(found,)s 8117(a)s 8291(w)s 2(arning)k 0 4828(message)m
+866(is)s 1076(printed)s 1811(and)s 2215(the)s 2563(result)s
+3153(object)s 3797(has)s 4167(zero)s 4631(size.)s 220 fnt35
+480 4451(@IncludeGr)m 2(aphic)k 240 fnt82 2228 4454(searches)m 3085(the)s
+3429(same)s 3973(directories)s 5027(that)s 220 fnt35 5442 4451(@Include)m
+240 fnt82 6421 4454(does)m 6907(\(Section)s 7757(3.40\).)s 220 fnt35
+8416 4451(@Sys)m 240 fnt82 8998 4454(-)m 220 fnt35 0 4163(IncludeGr)m 2(aphic)k
+240 fnt82 1562 4166(is)m 1806(the)s 2188(same)s 2769(as)s
+220 fnt35 3053 4163(@IncludeGr)m 2(aphic)k 240 fnt82 4744 4166(,)m
+4885(e)s 3(xcept)k 5600(that)s 6052(it)s 6278(searches)s
+7172(only)s 7686(the)s 8068(directories)s 0 3878(searched)m 894(by)s
+220 fnt35 1188 3875(@SysInclude)m 240 fnt82 2476 3878(.)m 480 3504(If)m
+720(the)s 1079(\207le)s 1450(name)s 2035(ends)s 2536(in)s
+2789(an)s 3(y)k 3197(of)s 220 fnt35 3478 3501(.gz)m
+240 fnt82 3765 3504(,)m 220 fnt35 3883 3501(-gz)m 240 fnt82
+4182 3504(,)m 220 fnt35 4300 3501(.z)m 240 fnt82 4465 3504(,)m
+220 fnt35 4582 3501(-z)m 240 fnt82 4759 3504(,)m 220 fnt35
+4877 3501(_z)m 240 fnt82 5103 3504(,)m 5220(or)s 220 fnt35
+5490 3501(.Z)m 240 fnt82 5680 3504(,)m 5798(the)s 6156(\207le)s
+6528(will)s 6964(\207rst)s 7406(be)s 7699(uncompressed)s 0 3216(using)m
+565(the)s 220 fnt35 906 3213(gunzip)m 240 fnt82 1597 3216(command)m
+2592(into)s 3010(a)s 3169(temporary)s 4198(\207le)s 4552(called)s
+220 fnt35 5173 3213(lout.eps)m 240 fnt82 5987 3216(in)m 6223(the)s
+6564(current)s 7293(directory)s 15(.)k 8297(This)s 8765(\207le)s
+0 2928(is)m 210(remo)s 3(v)k 3(ed)k 1099(immediately)s
+2347(after)s 2843(it)s 3035(is)s 3245(copied)s 3941(into)s
+4366(the)s 4714(output)s 5386(\207le.)s 240 fnt84 0 2135(3.39.)m
+591(@Pr)s 4(ependGraphic and @SysPr)k 4(ependGraphic)k 240 fnt82 582 1658(These)m
+1252(symbols,)s 2200(which)s 2885(may)s 3394(appear)s 4134(an)s 3(ywhere)k
+5160(that)s 5621(a)s 5830(de\207nition)s 6847(or)s 220 fnt35
+7149 1655(@Use)m 240 fnt82 7857 1658(symbol)m 8660(may)s 0 1370(appear)m 9(,)k
+738(tell)s 1101(Lout)s 1617(to)s 1860(include)s 2624(the)s
+2976(contents)s 3828(of)s 4103(a)s 4273(\207le)s 4637(in)s
+4884(the)s 5236(preamble)s 6185(of)s 6460(its)s 6740(output.)s
+7520(F)s 3(or)k 7913(Basser)s 8614(Lout)s 0 1082(this)m
+418(means)s 1102(that)s 1542(the)s 1912(\207le)s 2295(must)s
+2843(contain)s 3626(PostScript)s 4690(\(and)s 5195(ideally)s 5921(it)s
+6136(w)s 2(ould)k 6813(be)s 3(gin)k 7421(and)s
+7847(end)s 8273(with)s 8778(the)s 220 fnt35 0 791(%%BeginResource)m
+240 fnt82 1941 794(and)m 220 fnt35 2345 791(%%EndResource)m 240 fnt82
+4116 794(comments)m 5150(of)s 5421(DSC)s 5939(3.0\).)s 6482(F)s 3(or)k
+6871(e)s 3(xample,)k 220 fnt35 480 293(@SysPrependGr)m 2(aphic { diagf)k 6(.lpg })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 66 72
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(66)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(appears)m
+818(at)s 1088(the)s 1474(start)s 1981(of)s 2290(the)s
+2676(Diag)s 3231(package;)s 4165(the)s 4551(\207le)s 220 fnt35
+4949 13202(diagf)m 6(.lpg)k 240 fnt82 5857 13205(contains)m 6743(a)s
+6946(number)s 7775(of)s 8084(PostScript)s 0 12917(de\207nitions)m 1048(used)s
+1532(by)s 1812(Diag)s 2317(for)s 2642(dra)s 3(wing)k
+3462(diagrams.)s 4489(It)s 4680(sa)s 4(v)k 3(es)k
+5229(a)s 5382(lot)s 5680(of)s 5938(space)s 6511(to)s
+6737(include)s 7484(them)s 8008(just)s 8400(once)s 8894(at)s
+0 12629(the)m 334(start)s 789(lik)s 2(e)k 1186(this,)s
+1624(rather)s 2225(than)s 2679(with)s 3146(e)s 6(v)k 3(ery)k
+3708(diagram.)s 220 fnt35 4640 12626(@PrependGr)m 2(aphic)k 240 fnt82
+6498 12629(and)m 220 fnt35 6887 12626(@SysPrependGr)m 2(aphic)k 240 fnt82
+0 12341(search)m 667(for)s 1005(the)s 1353(\207le)s 1714(in)s
+1957(the)s 2305(same)s 2852(places)s 3500(as)s 220 fnt35
+3750 12338(@Include)m 240 fnt82 4732 12341(and)m 220 fnt35 5136 12338(@SysInclude)m
+240 fnt82 6484 12341(respecti)m 6(v)k 3(ely)k 15(.)k
+240 fnt84 0 11548(3.40.)m 591(@Include and @SysInclude)s 240 fnt82 562 11071(These)m
+1212(symbols)s 2083(instruct)s 2882(Lout)s 3417(to)s 3678(temporarily)s
+4869(switch)s 5572(to)s 5834(reading)s 6627(another)s 7426(\207le,)s
+7861(whose)s 8552(name)s 0 10783(appears)m 781(in)s 1024(braces)s
+1685(follo)s 6(wing)k 2662(the)s 3010(symbol.)s 3879(F)s 3(or)k
+4268(e)s 3(xample,)k 220 fnt35 480 10282(@Include { "/usr/lout/f)m 6(ontdefs" })k
+240 fnt82 0 9788(will)m 434(cause)s 1030(the)s 1386(contents)s
+2243(of)s 2522(\207le)s 2892(/usr/lout/fontdefs)s 4596(to)s 4844(be)s
+5134(read)s 5612(at)s 5852(the)s 6209(point)s 6769(it)s
+6970(occurs.)s 7766(After)s 8338(that)s 8765(\207le)s 0 9500(is)m
+214(read,)s 736(the)s 1089(current)s 1829(\207le)s 2194(is)s
+2409(resumed.)s 3387(The)s 3819(included)s 4706(\207le)s 5071(may)s
+5541(contain)s 6307(arbitrary)s 7186(Lout)s 7702(te)s 3(xt,)k
+8169(including)s 0 9212(other)m 220 fnt35 566 9209(@Include)m 240 fnt82
+1564 9212(commands.)m 2780(The)s 3224(\207le)s 3600(is)s 3826(searched)s
+4735(for)s 5089(\207rst)s 5535(in)s 5794(the)s 6157(current)s
+6909(directory)s 15(,)k 7878(then)s 8363(in)s 8621(a)s
+8803(se)s 8998(-)s 0 8924(quence)m 732(of)s 1001(standard)s
+1866(places)s 2512(which)s 3151(are)s 3496(not)s 3859(necessarily)s
+4972(the)s 5318(same)s 5862(places)s 6508(that)s 6923(databases)s
+7888(are)s 8232(searched)s 0 8636(for)m 13(.)k 220 fnt35
+429 8633(@SysInclude)m 240 fnt82 1777 8636(searches)m 2637(the)s 2985(standard)s
+3853(places)s 4501(only)s 15(.)k 240 fnt84 0 7843(3.41.)m
+591(@BackEnd)s 1814(and)s 2255(the)s 2629(PlainT)s 22(ext)k
+3663(and)s 4104(PDF)s 4623(back)s 5172(ends)s 240 fnt82
+547 7411(The)m 220 fnt35 983 7408(@Bac)m 4(kEnd)k 240 fnt82
+2136 7411(symbol,)m 2955(which)s 3605(tak)s 2(es)k 4153(no)s
+4454(parameters,)s 5615(has)s 5993(for)s 6339(its)s 6623(result)s
+7220(a)s 7394(string)s 7999(naming)s 8778(the)s 0 7123(back)m
+523(end)s 938(currently)s 1865(in)s 2119(use.)s 2613(Three)s
+3237(back)s 3761(ends)s 4262(are)s 4620(a)s 4(v)k 6(ailable,)k
+5590(PostScript,)s 6690(PDF)s 7198(and)s 7613(PlainT)s 16(e)k 3(xt.)k
+8698(The)s 0 6835(symbol)m 760(is)s 970(generally)s 1913(used)s
+2410(lik)s 2(e)k 2822(this:)s 220 fnt35 480 6334(@Bac)m 4(kEnd @Case {)k
+480 6046( PlainT)m 26(e)k 6(xt @Y)k 4(ield { ...)k 13( })k
+480 5758( P)m 11(ostScr)k -3(ipt @Y)k 4(ield { ...)k 13( })k
+480 5470( PDF @Y)m 4(ield { ...)k 13( })k 480 5182(})m 240 fnt82
+0 4688(to)m 255(obtain)s 926(dif)s 6(ferent)k 1817(objects)s
+2561(depending)s 3628(on)s 3941(the)s 4305(back)s 4834(end.)s
+5360(No)s 220 fnt35 5722 4685(else)m 240 fnt82 6192 4688(is)m
+6418(required)s 7288(since)s 7851(these)s 8414(are)s 8778(the)s
+0 4400(only)m 480(possible)s 1320(v)s 6(alues.)k 480 4026(When)m
+1101(a)s 220 fnt35 1259 4023(@Case)m 240 fnt82 2037 4026(symbol)m
+2789(has)s 220 fnt35 3151 4023(@Bac)m 4(kEnd)k 240 fnt82
+4287 4026(for)m 4617(its)s 4885(left)s 5253(parameter)s 6259(and)s
+6655(the)s 6994(left)s 7363(parameter)s 8369(of)s 8631(each)s
+220 fnt35 0 3735(@Y)m 4(ield)k 240 fnt82 768 3738(symbol)m
+1544(within)s 2228(it)s 2435(consists)s 3259(of)s 3546(a)s
+3728(sequence)s 4676(of)s 4963(one)s 5381(or)s 5656(more)s
+6218(literal)s 6844(w)s 2(ords)k 7494(\(including)s 220 fnt35
+8546 3735(else)m 240 fnt82 8940 3738(\),)m 0 3450(Lout)m 531(will)s
+976(optimize)s 1888(by)s 2201(e)s 6(v)k 6(aluating)k
+3258(the)s 220 fnt35 3625 3447(@Case)m 240 fnt82 4432 3450(symbol)m
+5211(at)s 5463(the)s 5830(time)s 6330(it)s 6541(is)s
+6771(read.)s 7365(This)s 7861(optimization)s 0 3162(ensures)m 789(that)s
+1228(there)s 1782(is)s 2013(only)s 2514(a)s 2701(small)s
+3294(once-only)s 4326(performance)s 5610(penalty)s 6389(for)s 6748(multiple)s
+7621(back)s 8155(ends,)s 8722(and)s 0 2874(it)m 206(permits)s
+987(these)s 220 fnt35 1548 2871(@Case)m 240 fnt82 2350 2874(symbols)m
+3213(\(b)s 4(ut)k 3668(no)s 3976(other)s 4541(symbols\))s
+5481(to)s 5734(appear)s 6446(within)s 7128(the)s 7490(object)s
+8149(follo)s 6(wing)k 220 fnt35 0 2583(@Include)m 240 fnt82
+982 2586(and)m 220 fnt35 1386 2583(@PrependGr)m 2(aphic)k 240 fnt82
+3259 2586(symbols.)m 480 2212(The)m 918(PlainT)s 16(e)k 3(xt)k
+1899(back)s 2423(end)s 2837(dif)s 6(fers)k 3515(from)s
+4050(the)s 4409(PostScript)s 5461(one)s 5874(in)s 6128(tw)s 2(o)k
+6548(main)s 7094(respects.)s 8038(First,)s 8593(there)s 0 1924(is)m
+226(ef)s 6(fecti)k 6(v)k 3(ely)k 1302(just)s
+1724(one)s 2143(font:)s 2711(although)s 3622(all)s 3932(the)s
+4297(font)s 4759(commands)s 5864(w)s 2(ork)k 6431(e)s 3(xactly)k
+7189(as)s 7456(usual,)s 8085(the)s 3(y)k 8565(don')s 4(t)k
+0 1636(actually)m 817(change)s 1558(an)s 3(ything.)k 2565(Each)s
+3107(character)s 4049(in)s 4299(this)s 4702(font)s 5155(is)s
+5372(tak)s 2(en)k 5953(to)s 6199(be)s 6488(one)s
+6898(tenth)s 7440(of)s 7719(one)s 8128(inch)s 8605(wide)s
+0 1348(and)m 404(20)s 699(points)s 1335(high.)s 1925(Second,)s
+2737(the)s 3085(output)s 3757(is)s 3967(an)s 4250(ordinary)s
+5114(te)s 3(xt)k 5529(\207le,)s 5941(not)s 6307(a)s
+6473(PostScript)s 7515(\207le.)s 480 974(Clearly)m 15(,)k 1306(with)s
+1820(ordinary)s 2716(te)s 3(xt)k 3162(output)s 3866(the)s
+4246(possibility)s 5327(of)s 5630(adv)s 6(anced)k 6618(graphics)s
+7510(features)s 8348(such)s 8876(as)s 0 686(rotation)m 829(and)s
+1262(scaling)s 2022(is)s 2261(curtailed.)s 3290(Ne)s 6(v)k 3(ertheless,)k
+4651(all)s 4974(symbols)s 5852(ha)s 4(v)k 3(e)k
+6383(well-de\207ned)s 7665(\(possibly)s 8626(null\))s 0 398(ef)m 6(fects)k
+706(in)s 976(the)s 1351(PlainT)s 16(e)k 3(xt)k
+2348(back)s 2888(end,)s 3368(so)s 3661(there)s 4221(is)s
+4457(no)s 4777(additional)s 5815(danger)s 6553(of)s 6851(crashing)s
+7741(the)s 8116(system)s 8867(or)s 0 110(obtaining)m 957(grossly)s
+1702(unreasonable)s 3020(output)s 3692(by)s 3986(a)s 4152(change)s
+4886(to)s 5125(PlainT)s 16(e)k 3(xt.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 67 73
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(3.41.)m 574(@Bac)s 4(kEnd)k 1720(and)s
+2146(the)s 2491(PlainT)s 22(e)k 4(xt)k 3458(and)s
+3884(PDF)s 4417(bac)s 4(k)k 4929(ends)s 240 fnt84
+8831 13840(67)m 240 fnt82 480 13249(The)m 905(PlainT)s 16(e)k 3(xt)k
+1872(back)s 2382(end)s 2783(is)s 2990(obtained)s 3869(by)s
+4160(the)s 220 fnt35 4505 13246(-p)m 240 fnt82 4749 13249(option)m
+5415(to)s 5651(Basser)s 6345(Lout.)s 6958(The)s 7383(character)s
+8314(size)s 8737(can)s 0 12961(be)m 282(changed)s 1138(by)s
+1432(adding)s 2137(tw)s 2(o)k 2547(lengths)s 3289(to)s
+3528(the)s 220 fnt35 3876 12958(-p)m 240 fnt82 4123 12961(option,)m
+4842(lik)s 2(e)k 5254(this:)s 220 fnt35 480 12464(lout -p0.1i12p ...)m
+240 fnt82 0 11968(which)m 650(in)s 9(v)k 4(ok)k 2(es)k
+1439(the)s 1795(PlainT)s 16(e)k 3(xt)k 2773(back)s
+3294(end)s 3706(with)s 4196(each)s 4699(character)s 5641(being)s
+6234(0.1)s 6577(inches)s 7247(wide)s 7776(and)s 8188(12)s
+8490(points)s 0 11680(high.)m 595(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1561(e)s 3(xperience)k 2655(suggests)s 3523(that)s 3947(the)s
+4301(best)s 4752(approach)s 5691(is)s 5907(to)s 6152(de\207ne)s
+6799(all)s 7098(horizontal)s 8128(lengths)s 8876(as)s 0 11392(multiples)m
+943(of)s 1218(the)s 220 fnt35 1569 11389(s)m 240 fnt82
+1736 11392(unit)m 2171(\(the)s 2602(width)s 3208(of)s 3482(a)s
+3652(space,)s 4293(hence)s 4911(the)s 5262(width)s 5868(of)s
+6143(all)s 6439(characters\))s 7538(and)s 7945(to)s 8188(de\207ne)s
+8833(all)s 0 11104(v)m 3(ertical)k 777(lengths)s 1530(as)s
+1791(multiples)s 2742(of)s 3023(the)s 220 fnt35 3382 11101(f)m
+240 fnt82 3511 11104(unit)m 3954(\(the)s 4391(font)s 4847(size,)s
+5336(equal)s 5920(to)s 6169(the)s 6528(height)s 7197(of)s
+7479(e)s 6(v)k 3(ery)k 8066(character\),)s 0 10816(and)m
+404(not)s 770(to)s 1009(change)s 1743(the)s 2091(character)s
+3025(size)s 3452(in)s 3695(the)s 4043(command)s 5045(line.)s
+480 10442(There)m 1098(is)s 1314(a)s 220 fnt35 1486 10439(-P)m
+240 fnt82 1762 10442(option)m 2437(which)s 3085(is)s 3301(identical)s
+4184(with)s 4671(the)s 220 fnt35 5025 10439(-p)m 240 fnt82
+5278 10442(option)m 5953(e)s 3(xcept)k 6640(that)s 7064(it)s
+7262(inserts)s 7942(a)s 8114(form-feed)s 0 10154(character)m 934(between)s
+1788(each)s 2283(tw)s 2(o)k 2693(components)s 3901(of)s
+4172(the)s 4520(output,)s 5239(b)s 4(ut)k 5601(not)s
+5967(before)s 6633(the)s 6981(\207rst)s 7412(or)s 7671(after)s
+8167(the)s 8515(last.)s 480 9780(The)m 911(PDF)s 1412(back)s
+1928(end)s 2336(is)s 2549(obtained)s 3435(by)s 3732(typing)s
+220 fnt35 4401 9777(lout -Z)m 240 fnt82 5017 9780(.)m 5185(It)s
+5393(is)s 5607(similar)s 6332(to)s 6575(PostScript)s 7620(b)s 4(ut)k
+7986(much)s 8579(more)s 0 9492(limited)m 755(in)s 1019(functionality)s 15(.)k
+2411(Consult)s 3237(a)s 3425(separate)s 4284(document)s 5309(distrib)s 4(uted)k
+6407(with)s 6910(Lout)s 7444(for)s 7803(further)s 8534(infor)s
+8998(-)s 0 9204(mation.)m 240 fnt84 0 8461(3.42.)m 591(@V)s 24(erbatim and @RawV)k 24(erbatim)k
+240 fnt82 543 8029(These)m 1173(symbols)s 2026(instruct)s 2805(Lout)s
+3321(to)s 3563(read)s 4036(the)s 4387(follo)s 6(wing)k
+5367(te)s 3(xt)k 5786(\(enclosed)s 6763(in)s 7010(braces\))s
+7751(v)s 3(erbatim,)k 8708(that)s 0 7741(is,)m 266(turning)s
+1010(of)s 6(f)k 1354(all)s 1647(special)s 2365(character)s
+3299(meanings.)s 4380(F)s 3(or)k 4769(e)s 3(xample,)k
+220 fnt35 480 7240(@V)m 17(erbatim { "hello" })k 240 fnt82 0 6746(produces)m
+480 6243("hello")m 220 fnt35 0 5787(@V)m 17(erbatim)k 240 fnt82
+1178 5790(ignores)m 1983(all)s 2325(characters)s 3393(after)s 3938(the)s
+4336(opening)s 5210(brace)s 5833(up)s 6175(to)s 6464(b)s 4(ut)k
+6875(not)s 7291(including)s 8297(the)s 8695(\207rst)s 0 5502(non-white-space)m
+1654(character)s 13(.)k 220 fnt35 2697 5499(@Ra)m 4(wV)k 17(erbatim)k
+240 fnt82 4278 5502(dif)m 6(fers)k 4964(from)s 220 fnt35
+5506 5499(@V)m 17(erbatim)k 240 fnt82 6653 5502(only)m 7151(in)s
+7413(that)s 7849(it)s 8059(ignores)s 8833(all)s 0 5214(characters)m
+1018(after)s 1514(the)s 1862(opening)s 2687(brace)s 3261(up)s
+3554(to)s 3793(b)s 4(ut)k 4155(not)s 4521(including)s
+5479(the)s 5827(\207rst)s 6258(non-white-space)s 7894(character)s 9(,)k
+8867(or)s 0 4926(up)m 302(to)s 551(and)s 965(including)s
+1931(the)s 2289(\207rst)s 2730(ne)s 6(wline)k 3547(character)s 9(,)k
+4528(whiche)s 6(v)k 3(er)k 5585(comes)s 6257(\207rst.)s
+6802(This)s 7287(v)s 6(ariant)k 8014(is)s 8234(useful)s
+8883(in)s 0 4638(cases)m 555(such)s 1051(as)s 220 fnt35
+480 4187(@Ra)m 4(wV)k 17(erbatim {)k 480 3899( v)m 5(ar x:)k 11( Real)k
+480 3611(begin)m 480 3323(})m 240 fnt82 0 2829(where)m 662(the)s
+1033(\207rst)s 1486(line)s 1923(of)s 2217(the)s 2587(v)s 3(erbatim)k
+3516(te)s 3(xt)k 3954(be)s 3(gins)k 4649(with)s
+5154(white)s 5763(space)s 6373(which)s 7038(w)s 2(ould)k
+7715(be)s 8020(ignored)s 8832(by)s 220 fnt35 0 2538(@V)m 17(erbatim)k
+240 fnt82 1069 2541(.)m 1232(Both)s 1754(symbols)s 2602(ignore)s
+3268(all)s 3560(white)s 4146(spaces)s 4820(at)s 5051(the)s
+5398(end)s 5801(of)s 6071(the)s 6418(v)s 3(erbatim)k
+7323(te)s 3(xt,)k 7784(preceding)s 8778(the)s 0 2253(closing)m
+744(brace.)s 240 fnt84 0 1460(3.43.)m 591(@Underline)s 240 fnt82
+533 1028(The)m 220 fnt35 953 1025(@Under)m -3(line)k 240 fnt82
+2160 1028(symbol)m 2912(underlines)s 3951(its)s 4219(right)s 4722(parameter)s 9(,)k
+5767(b)s 4(ut)k 6121(only)s 6593(if)s 6802(that)s
+7212(parameter)s 8218(is)s 8420(a)s 8578(w)s 2(ord)k
+0 740(or)m 259(a)s 425(paragraph:)s 220 fnt35 480 239(W)m 6(e @Under)k -3(line { really do } mean this)k 3(.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 68 74
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(68)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(produces)m
+480 12702(W)m 19(e)k 849(really)s 849 1679 12678 12 ul
+1446(do)s 1739(mean)s
+2314(this.)s 0 12199(It)m 204(is)s 412(not)s 776(possible)s
+1614(to)s 1851(underline)s 2808(an)s 3089(arbitrary)s 3962(object)s
+4604(using)s 5174(this)s 5568(symbol;)s 6383(the)s 220 fnt35
+6729 12196(@Under)m -3(line)k 240 fnt82 7942 12199(symbol)m 8700(will)s
+0 11911(be)m 282(ignored)s 1071(if)s 1288(this)s 1684(is)s
+1894(attempted.)s 480 11537(It)m 731(is)s 987(v)s 3(ery)k
+1509(easy)s 2034(to)s 240 fnt83 2319 11539(de\207ne)m 240 fnt82
+2990 11537(a)m 3202(symbol)s 4008(which)s 4696(will)s 5168(underline)s
+6173(an)s 6502(arbitrary)s 7423(object,)s 8160(using)s 8778(the)s
+220 fnt35 0 11246(@Gr)m 2(aphic)k 240 fnt82 1045 11249(symbol.)m
+1915(This)s 2393(raises)s 2988(the)s 3337(question)s 4207(of)s
+4479(wh)s 1(y)k 220 fnt35 4946 11246(@Under)m -3(line)k
+240 fnt82 6163 11249(is)m 6374(needed)s 7111(at)s 7345(all.)s
+7748(The)s 8177(answer)s 8916(is)s 0 10961(that)m 220 fnt35
+418 10958(@Under)m -3(line)k 240 fnt82 1633 10961(has)m 2003(tw)s 2(o)k
+2413(properties)s 3419(that)s 3837(distinguish)s 4944(it)s 5136(from)s
+5660(symbols)s 6509(based)s 7112(on)s 220 fnt35 7409 10958(@Gr)m 2(aphic)k
+240 fnt82 8393 10961(.)m 480 10587(First,)m 1021(when)s 220 fnt35
+1594 10584(@Under)m -3(line)k 240 fnt82 2806 10587(both)m 3286(contains)s
+4130(a)s 4293(paragraph)s 5303(and)s 5704(is)s 5911(used)s
+6404(within)s 7069(a)s 7232(paragraph,)s 8292(as)s 8539(in)s
+8778(the)s 0 10299(e)m 3(xample)k 875(abo)s 3(v)k 3(e,)k
+1561(the)s 1921(inner)s 2485(and)s 2901(outer)s 3465(paragraphs)s
+4577(are)s 4937(mer)s 4(ged)k 5720(into)s 6158(one,)s
+6623(permitting)s 7684(the)s 8045(underlined)s 0 10011(te)m 3(xt)k
+412(to)s 647(break)s 1236(o)s 3(v)k 3(er)k
+1711(se)s 6(v)k 3(eral)k 2430(lines.)s 3041(This)s
+3513(is)s 3720(ho)s 6(w)k 4177(the)s 220 fnt35
+4522 10008(@F)m 6(ont)k 240 fnt82 5230 10011(symbol)m 5986(w)s 2(orks)k
+6617(too,)s 7026(b)s 4(ut)k 7385(symbols)s 8230(based)s
+8829(on)s 220 fnt35 0 9720(@Gr)m 2(aphic)k 240 fnt82
+1044 9723(do)m 1337(not)s 1703(permit)s 2386(this)s 2782(mer)s 4(ging.)k
+480 9349(Second,)m 1292(Adobe)s 1987(font)s 2432(\207les)s 2881(specify)s
+3625(the)s 3973(correct)s 4694(position)s 5522(and)s 5926(thickness)s
+6867(of)s 7138(underlining)s 8294(for)s 8631(each)s 0 9061(font,)m
+501(and)s 914(the)s 220 fnt35 1272 9058(@Under)m -3(line)k
+240 fnt82 2496 9061(symbol)m 3266(follo)s 6(ws)k 4037(these)s
+4593(speci\207cations.)s 6068(The)s 6505(font)s 6960(used)s 7466(is)s
+7685(the)s 8043(font)s 8497(of)s 8778(the)s 0 8773(\207rst)m
+431(object)s 1075(underlined,)s 2205(if)s 2422(it)s 2614(is)s
+2824(a)s 2990(simple)s 3683(w)s 2(ord,)k 4280(or)s
+4539(else)s 4966(the)s 5314(font)s 5759(of)s 6030(the)s
+6378(enclosing)s 7348(paragraph.)s 240 fnt84 0 7980(3.44.)m 591(@P)s 2(ageLabel)k
+240 fnt82 533 7503(The)m 220 fnt35 953 7500(@P)m 8(ageLabel)k
+240 fnt82 2255 7503(symbol)m 3007(associates)s 4005(a)s 4164(page)s
+4664(label)s 5176(in)s 5411(the)s 5751(PostScript)s 6786(output)s
+7450(\207le)s 7804(with)s 8278(the)s 8618(page)s 0 7215(within)m
+688(which)s 1350(\(or)s 1708(just)s 2133(before)s 2819(which\))s
+3552(the)s 3920(symbol)s 4700(occurs,)s 5451(so)s 5737(that)s
+6175(PostScript)s 7237(vie)s 6(wers)k 8045(are)s 8412(able)s
+8887(to)s 0 6927(inde)m 3(x)k 587(the)s 939(page)s
+1450(by)s 1748(this)s 2148(label.)s 2779(\(The)s 3290(label)s
+3813(is)s 4026(printed)s 4765(in)s 5011(the)s 220 fnt35
+5363 6924(%%P)m 8(age)k 240 fnt82 6313 6927(comment)m 7266(preceding)s
+8266(the)s 8618(page)s 0 6639(in)m 243(the)s 591(PostScript)s
+1633(output)s 2305(\207le.\))s 2858(F)s 3(or)k 3247(e)s 3(xample,)k
+220 fnt35 480 6138(@P)m 8(ageLabel iv)k 240 fnt82 0 5639(associates)m
+1018(the)s 1379(label)s 220 fnt35 1910 5636(iv)m 240 fnt82
+2140 5639(with)m 2634(the)s 2995(page.)s 3623(The)s 4064(label)s
+4595(may)s 5074(be)s 5368(an)s 5664(arbitrary)s 6551(object;)s
+7260(if)s 7489(its)s 7778(v)s 6(alue)k 8358(is)s
+8581(not)s 8960(a)s 0 5351(simple)m 693(w)s 2(ord,)k
+1290(it)s 1482(will)s 1908(be)s 2190(replaced)s 3057(by)s
+220 fnt35 3351 5348(?)m 240 fnt82 3459 5351(.)m 220 fnt35
+480 4974(@P)m 8(ageLabel)k 240 fnt82 1799 4977(is)m 2019(unrelated)s
+2977(to)s 3226(Lout')s 13(s)k 3899(cross)s 4451(referencing)s
+5602(mechanism;)s 6813(it)s 7016(is)s 7236(for)s 7585(communicating)s
+0 4689(a)m 176(label)s 706(to)s 956(the)s 1315(PostScript)s
+2368(output)s 3051(\207le,)s 3474(not)s 3851(to)s 4101(other)s
+4662(parts)s 5188(of)s 5470(Lout.)s 6097(The)s 6536(result)s
+7137(of)s 220 fnt35 7419 4686(@P)m 8(ageLabel)k 240 fnt82
+8739 4689(is)m 8960(a)s 0 4401(null)m 427(object.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 69 75
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save 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
+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
+480 fnt84 0 12955(Chapter)m 1819(4.)s 2400(Examples)s 240 fnt82
+0 12004(This)m 503(chapter)s 1294(presents)s 2156(some)s 2744(e)s 3(xamples)k
+3723(tak)s 2(en)k 4324(from)s 4875(the)s 5251(v)s 6(arious)k
+6028(packages)s 6983(a)s 4(v)k 6(ailable)k 7919(with)s
+8429(Basser)s 0 11716(Lout.)m 661(The)s 1134(reader)s 1835(who)s
+2346(masters)s 3171(these)s 3763(e)s 3(xamples)k 4759(will)s
+5230(be)s 5557(well)s 6068(prepared)s 7007(to)s 7291(read)s
+7805(the)s 8198(packages)s 0 11428(themselv)m 3(es.)k 1223(The)s
+1650(e)s 3(xamples)k 2600(ha)s 4(v)k 3(e)k
+3100(not)s 3465(been)s 3973(simpli\207ed)s 4986(in)s 5229(an)s 3(y)k
+5625(w)s 2(ay)k 15(,)k 6113(since)s 6659(an)s
+6941(important)s 7929(part)s 8359(of)s 8629(their)s 0 11140(purpose)m
+814(is)s 1024(to)s 1263(sho)s 6(w)k 1817(Lout)s
+2329(in)s 2572(actual)s 3197(practice.)s 240 fnt84 0 10347(4.1.)m
+471(An)s 833(equation)s 1779(f)s 6(ormatting)k 2930(package)s
+240 fnt82 480 9870(In)m 751(this)s 1162(section)s 1911(we)s
+2261(describe)s 3128(the)s 3491(design)s 4189(and)s 4608(implementation)s
+6180(of)s 6466(the)s 6829(Eq)s 7168(equation)s 8065(formatting)s
+0 9582(package.)m 976(Equation)s 1925(formatting)s 3014(mak)s 2(es)k
+3702(a)s 3896(natural)s 4642(\207rst)s 5101(e)s 3(xample,)k
+6043(partly)s 6682(because)s 7523(its)s 7828(requirements)s 0 9294(ha)m 4(v)k 3(e)k
+514(strongly)s 1366(in\210uenced)s 2435(the)s 2797(design)s 3493(of)s
+3778(Lout,)s 4351(and)s 4769(partly)s 5394(because)s 6221(no)s
+6528(cross)s 7084(references)s 8129(or)s 8402(g)s 1(alle)k 3(ys)k
+0 9006(are)m 347(required.)s 480 8632(T)m 19(o)k 777(the)s
+1122(author')s 13(s)k 1939(kno)s 6(wledge,)k 3088(Eq)s
+3409(is)s 3615(the)s 3960(\207rst)s 4388(equation)s 5265(formatter)s
+6209(to)s 6445(be)s 6723(implemented)s 8026(as)s 8273(a)s
+8435(collec)s 8998(-)s 0 8344(tion)m 430(of)s 702(high-)s
+1196(le)s 6(v)k 3(el)k 1707(de\207nitions.)s 2883(This)s
+3360(approach)s 4295(has)s 4666(signi\207cant)s 5724(adv)s 6(antages:)k
+6948(the)s 7297(basics)s 7933(of)s 8206(language)s 0 8056(and)m
+426(layout)s 1106(are)s 1475(tri)s 6(vial,)k 2167(so)s
+2456(the)s 2826(implementor)s 4129(can)s 4540(concentrate)s 5720(on)s
+6039(\207ne-)s 6466(tuning;)s 7212(and)s 7638(the)s 8009(de\207nitions,)s
+0 7768(being)m 585(readily)s 1302(a)s 4(v)k 6(ailable,)k
+2261(can)s 2650(be)s 2932(impro)s 3(v)k 3(ed,)k
+3950(e)s 3(xtended,)k 4918(or)s 5177(e)s 6(v)k 3(en)k
+5677(replaced.)s 480 7394(As)m 808(described)s 1793(in)s 2048(the)s
+2407(User')s 13(s)k 3079(Guide)s 3732([4)s 3925(],)s
+4122(an)s 4416(equation)s 5309(is)s 5530(entered)s 6302(in)s
+6557(a)s 6734(format)s 7441(based)s 8056(on)s 8364(the)s
+8724(one)s 0 7106(introduced)m 1081(by)s 1375(the)s 1723(eqn)s
+2126(language)s 3046(of)s 3317(K)s 6(ernighan)k 4378(and)s
+4782(Cherry)s 5500([2)s 5693(]:)s 220 fnt35 480 6605(@Eq { { x sup 2 + y sup 2 } o)m 3(v)k 5(er 2 })k
+240 fnt82 0 6107(The)m 428(result)s 1018(is)s 168 fnt78
+586 5702(2)m 240 fnt83 480 5642(x)m 240 fnt78 738 5634(+)m
+168 fnt78 1041 5702(2)m 240 fnt83 939 5642(y)m 641 0 0 0 240 288 12 480 5544 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+240 fnt78
+743 5316(2)m 240 fnt82 0 4805(In)m 256(outline,)s 1027(the)s
+1375(de\207nition)s 2349(of)s 2620(the)s 220 fnt35 2968 4802(@Eq)m
+240 fnt82 3506 4805(symbol)m 4266(is)s 220 fnt35 480 4308(e)m 6(xpor)k -8(t sup o)k 3(v)k 5(er "+" "2" "<=")k
+480 4020(def @Eq)m 480 3732( body @Body)m 480 3444({)m 480 3156( def sup precedence 60 left x r)m -3(ight y { ...)k 13( })k
+480 2868( def o)m 3(v)k 5(er precedence 54 left x r)k -3(ight y { ...)k 13( })k
+480 2580( def "2" { Base @F)m 6(ont "2" })k 480 2292( def "+" { {Symbol Base} @F)m 6(ont "+" })k 480 2004( def "<=" { {Symbol Base} @F)m 6(ont "\\243" })k
+480 1716( ...)m 480 1140( Slope @F)m 6(ont 1.2f @Break 0c @Space @Body)k 480 852(})m 192 fnt84
+4439 2(69)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 70 76
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(70)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(A)m 259(body)s 822(parameter)s
+1865(is)s 2104(used)s 2630(to)s 2898(restrict)s 3649(the)s
+4026(visibility)s 4958(of)s 5258(the)s 5635(equation)s 6545(formatting)s
+7635(symbols)s 8514(\(there)s 0 12917(are)m 366(hundreds)s 1315(of)s
+1606(them\).)s 2347(The)s 2794(equation)s 3695(as)s 3965(a)s
+4151(whole)s 4811(is)s 5041(set)s 5386(in)s 5649(Slope)s
+6269(\(i.e.)s 6704(Italic\))s 7341(font,)s 7853(and)s 8277(symbols)s
+0 12629(such)m 515(as)s 220 fnt35 784 12626("2")m 240 fnt82
+1127 12629(and)m 220 fnt35 1550 12626("+")m 240 fnt82 1899 12629(are)m
+2265(de\207ned)s 3048(when)s 3643(other)s 4213(fonts)s 4762(are)s
+5128(needed.)s 5990(Precedences)s 7241(are)s 7608(used)s 8124(to)s
+8383(resolv)s 3(e)k 0 12341(ambiguities)m 1170(such)s 1670(as)s
+220 fnt35 1925 12338(a sup b o)m 3(v)k 5(er c)k 240 fnt82
+3291 12341(.)m 3459(Eq)s 3788(tak)s 2(es)k 4332(all)s
+4630(spacing)s 5418(decisions)s 6363(on)s 6665(itself,)s 7252(so)s
+7523(to)s 7766(pre)s 6(v)k 3(ent)k 8539(white)s
+0 12053(space)m 574(typed)s 1151(by)s 1432(the)s 1767(user)s
+2212(from)s 2723(interfering,)s 3824(the)s 4158(equation)s 5026(is)s
+5223(enclosed)s 6105(in)s 220 fnt35 6335 12050(0c @Space)m 240 fnt82
+7465 12053(.)m 7616(W)s 19(e)k 7972(will)s 8384(discuss)s
+0 11765(the)m 220 fnt35 348 11762(1.2f @Break)m 240 fnt82 1631 11765(later)m 13(.)k
+480 11391(Thus)m 1015(ha)s 4(v)k 3(e)k 1521(we)s
+1861(disposed)s 2762(of)s 3038(the)s 3391(language)s 4316(design)s
+5003(part)s 5439(of)s 5715(the)s 6068(equation)s 6954(formatting)s
+8020(problem;)s 8934(it)s 0 11103(remains)m 807(no)s 6(w)k
+1268(to)s 1507(de\207ne)s 2148(the)s 2496(twenty)s 3201(or)s
+3460(so)s 3726(symbols)s 4575(with)s 5057(parameters,)s 6211(and)s
+6615(get)s 6967(the)s 7315(layout)s 7973(right.)s 480 10729(Ev)m 3(ery)k
+1115(equation)s 2010(has)s 2393(an)s 240 fnt83 2690 10731(axis)m
+240 fnt82 3070 10729(:)m 3250(an)s 3546(imaginary)s 4583(horizontal)s
+5620(line)s 6048(through)s 6864(the)s 7225(centre)s 7878(of)s
+8163(v)s 6(ariables,)k 0 10441(through)m 795(the)s 1136(bar)s
+1494(of)s 1757(b)s 4(uilt-up)k 2556(fractions,)s 3491(and)s
+3888(so)s 4146(on.)s 4543(W)s 19(e)k 4905(can)s
+5287(satisfy)s 5956(this)s 6345(requirement)s 7552(by)s 7839(ensuring)s
+8708(that)s 0 10153(the)m 362(result)s 966(of)s 1251(each)s
+1761(symbol)s 2535(has)s 2919(a)s 3100(single)s 3741(ro)s 6(w)k
+4175(mark,)s 4788(on)s 5099(the)s 5461(axis.)s 6025(F)s 3(or)k
+6428(e)s 3(xample,)k 7356(the)s 7719(superscripting)s 0 9865(symbol)m
+760(is)s 970(de\207ned)s 1733(as)s 1983(follo)s 6(ws:)k
+220 fnt35 480 9366(def sup)m 480 9078( precedence 60)m 480 8790( associativity left)m 480 8502( left x)m
+480 8214( named gap { @SupGap })m 480 7926( r)m -3(ight y)k 480 7638({)m 480 7350( @HContr)m 2(act @VContr)k 2(act {)k
+480 7062( | @Smaller y)m 480 6774( ^/gap x)m 480 6486( })m 480 6198(})m 240 fnt82
+0 5704(The)m 220 fnt35 430 5701(@VContr)m 2(act)k 240 fnt82
+1684 5704(and)m 220 fnt35 2091 5701(^/)m 240 fnt82 2320 5704(symbols)m
+3171(together)s 4017(ensure)s 4699(that)s 5119(the)s 5470(axis)s
+5908(of)s 6181(the)s 6532(result)s 7124(is)s 7336(the)s
+7687(axis)s 8125(of)s 8398(the)s 8749(left)s 0 5416(parameter)m 13(.)k
+1119(A)s 220 fnt35 1363 5413(gap)m 240 fnt82 1795 5416(parameter)m
+2823(has)s 3207(been)s 3730(pro)s 3(vided)k 4650(for)s
+5002(v)s 6(arying)k 5794(the)s 6156(height)s 6828(of)s
+7113(the)s 7475(superscript,)s 8644(with)s 0 5128(def)m 2(ault)k
+709(v)s 6(alue)k 220 fnt35 1265 5125(@SupGap)m 240 fnt82
+2393 5128(de\207ned)m 3144(else)s 6(where)k 4137(as)s 220 fnt35
+4375 5125(0.40fk)m 240 fnt82 4973 5128(.)m 5124(It)s 5317(is)s
+5515(important)s 6492(that)s 6898(such)s 7382(g)s 1(aps)k
+7859(be)s 8128(e)s 3(xpressed)k 0 4840(in)m 232(units)s
+736(that)s 1142(v)s 6(ary)k 1603(with)s 2073(the)s
+2410(font)s 2843(size,)s 3309(so)s 3563(that)s 3969(the)s 3(y)k
+4420(remain)s 5129(correct)s 5839(when)s 6403(the)s 6739(size)s
+7154(changes.)s 8077(Collecting)s 0 4552(the)m 351(def)s 2(ault)k
+1076(v)s 6(alues)k 1735(into)s 2164(symbols)s 3016(lik)s 2(e)k
+220 fnt35 3432 4549(@SupGap)m 240 fnt82 4515 4552(ensures)m 5287(consistenc)s 3(y)k
+6457(and)s 6865(assists)s 7529(when)s 8109(tuning)s 8778(the)s
+0 4264(v)m 6(alues.)k 769(Here)s 1289(is)s 1499(another)s
+2276(characteristic)s 3600(de\207nition:)s 220 fnt35 480 3814(def o)m 3(v)k 5(er)k
+480 3526( precedence 54)m 480 3238( associativity left)m 480 2950( left x)m 480 2662( named gap { 0.2f })m 480 2374( r)m -3(ight y)k
+480 2086({)m 480 1798( @HContr)m 2(act @VContr)k 2(act {)k 480 1510( |0.5r)m -8(t @OneCol x)k
+480 1222( ^//gap @HLine)m 480 934( //gap |0.5r)m -8(t @OneCol y)k 480 646( })m 480 358(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 71 77
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.1.)m 454(An)s 774(equation)s 1666(formatting)s
+2730(pac)s 4(ka)k 2(g)k 2(e)k 240 fnt84
+8839 13840(71)m 240 fnt82 0 13205(Both)m 518(parameters)s 1611(are)s
+1953(centred,)s 2758(since)s 3299(we)s 3629(do)s 3917(not)s
+4278(kno)s 6(w)k 4853(which)s 5490(will)s 5911(be)s
+6188(the)s 6530(wider;)s 7181(we)s 7511(use)s 220 fnt35
+7881 13202(@OneCol)m 240 fnt82 8887 13205(to)m 0 12917(mak)m 2(e)k
+570(sure)s 1021(that)s 1437(the)s 1782(entire)s 2379(parameter)s
+3390(is)s 3598(centred,)s 4405(not)s 4769(just)s 5171(its)s
+5445(\207rst)s 5873(column,)s 6696(and)s 220 fnt35 7097 12914(@HContr)m 2(act)k
+240 fnt82 8358 12917(ensures)m 0 12629(that)m 428(the)s 787(fraction)s
+1597(will)s 2034(ne)s 6(v)k 3(er)k 2627(e)s 3(xpand)k
+3385(to)s 3635(\207ll)s 3966(all)s 4269(the)s 4628(a)s 4(v)k 6(ailable)k
+5547(space,)s 6196(as)s 6457(Lout)s 6980(objects)s 7719(ha)s 4(v)k 3(e)k
+8231(a)s 8408(natural)s 0 12341(tendenc)m 3(y)k 915(to)s
+1154(do)s 1447(\(Section)s 2300(2.6\).)s 220 fnt35 2843 12338(@HLine)m
+240 fnt82 3690 12341(is)m 3900(a)s 4066(horizontal)s 5090(line)s
+5504(of)s 5775(the)s 6123(width)s 6725(of)s 6996(the)s
+7344(column:)s 220 fnt35 480 11840(def @HLine)m 480 11552( named line { "0.05 ft setline)m 4(width" })k
+480 11264({ )m 480 10976( { "0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto" line "strok)k 4(e" } @Gr)k 2(aphic {})k
+480 10688(})m 240 fnt82 0 10194(Here)m 520(we)s 855(are)s
+1202(relying)s 1932(on)s 2229(the)s 2577(e)s 3(xpanding)k
+3625(tendenc)s 3(y)k 4540(just)s 4945(mentioned.)s 480 9820(The)m
+906(remaining)s 1925(symbols)s 2772(are)s 3116(quite)s 3647(similar)s
+4367(to)s 4603(these)s 5148(ones.)s 5748(W)s 19(e)k
+6114(conclude)s 7032(with)s 7511(a)s 7675(fe)s 6(w)k
+8078(\207ne)s 8490(points)s 0 9532(of)m 271(mathematical)s 1612(typesetting)s
+2714(mentioned)s 3782(by)s 4076(a)s 4242(leading)s 4999(authority)s 15(,)k
+5954(D.)s 6231(E.)s 6481(Knuth)s 7137([5)s 7322(].)s
+480 9158(Some)m 1090(symbols,)s 2004(such)s 2509(as)s 240 fnt78
+2768 9152(\243)m 240 fnt82 2963 9158(and)m 240 fnt78 3376 9152(\271)m
+240 fnt82 3505 9158(,)m 3621(should)s 4327(ha)s 4(v)k 3(e)k
+4837(a)s 5012(thick)s 5560(space)s 6156(on)s 6462(each)s
+6966(side;)s 7472(others,)s 8172(such)s 8677(as)s 240 fnt78
+8937 9152(+)m 240 fnt82 0 8870(and)m 240 fnt78 397 8864(-)m
+240 fnt82 525 8870(,)m 625(ha)s 4(v)k 3(e)k
+1119(a)s 1278(medium)s 2115(space;)s 2751(others)s 3379(ha)s 4(v)k 3(e)k
+3873(a)s 4032(thin)s 4454(space)s 5034(on)s 5324(the)s
+5665(right)s 6169(only)s 15(.)k 6737(This)s 7206(w)s 2(ould)k
+7854(be)s 8129(easy)s 8601(to)s 8833(do)s 0 8582(e)m 3(xcept)k
+681(that)s 1099(these)s 1646(spaces)s 2321(are)s 2668(not)s
+3034(w)s 2(anted)k 3781(in)s 4024(superscripts)s 5216(and)s
+5620(subscripts:)s 168 fnt83 578 8135(n)m 168 fnt78 680 8129(+)m
+793(1)s 240 fnt83 480 8037(r)m 240 fnt78 931 8029(-)m
+1131(1)s 240 fnt82 0 7578(In)m 271(ef)s 6(fect,)k
+929(the)s 1292(de\207nition)s 2281(of)s 2568(such)s 3079(symbols)s
+3943(changes)s 4780(depending)s 5846(on)s 6159(the)s 6522(conte)s 3(xt;)k
+7350(b)s 4(ut)k 7727(Lout)s 8254(does)s 8760(not)s
+0 7290(permit)m 682(such)s 1176(a)s 1340(change.)s 2180(Luckily)s 15(,)k
+3015(the)s 3361(so-called)s 4279(`style')s 4919(information)s 6102(set)s
+6426(by)s 6718(the)s 220 fnt35 7064 7287(@F)m 6(ont)k
+240 fnt82 7716 7290(,)m 220 fnt35 7821 7287(@Break)m 240 fnt82
+8617 7290(,)m 8722(and)s 220 fnt35 0 6999(@Space)m 240 fnt82
+891 7002(symbols)m 1734(can)s 2116(change)s 2844(in)s 3080(this)s
+3470(w)s 2(ay)k 15(.)k 4009(Accordingly)s 15(,)k
+5291(Eq)s 5608(uses)s 6065(the)s 220 fnt35 6406 6999(y)m
+240 fnt82 6568 7002(unit,)m 7040(which)s 7676(is)s 7879(part)s
+8304(of)s 8568(style,)s 0 6714(for)m 338(these)s 885(spaces:)s
+220 fnt35 480 6213(def @MedGap { 0.20y })m 480 5637(def "+" { &@MedGap plus &@MedGap })m 480 5061(def @HSqueez)m 3(e r)k -3(ight x { 0.2f @YUnit x })k
+240 fnt82 0 4562(In)m 261(the)s 615(equation)s 1502(as)s
+1758(a)s 1929(whole,)s 2627(the)s 2981(y)s 3161(unit)s
+3599(is)s 3814(initially)s 4616(set)s 4947(to)s 220 fnt35
+5192 4559(1f)m 240 fnt82 5372 4562(,)m 5484(and)s 5894(so)s
+220 fnt35 6166 4559(@MedGap)m 240 fnt82 7289 4562(ordinarily)m 8291(supplies)s
+0 4274(20%)m 495(of)s 777(this)s 1184(amount.)s 2077(But)s
+2494(superscripts)s 3697(and)s 4112(subscripts)s 5130(are)s 5488(enclosed)s
+6394(in)s 6648(the)s 220 fnt35 7007 4271(@HSqueez)m 3(e)k
+240 fnt82 8314 4274(symbol,)m 0 3986(which,)m 744(by)s 1091(changing)s
+2075(the)s 2476(y)s 2703(unit,)s 3235(ensures)s 4056(that)s
+4527(an)s 3(y)k 220 fnt35 4977 3983(@MedGap)m 240 fnt82
+6147 3986(within)m 6868(them)s 7459(is)s 7722(much)s 8364(smaller)s
+0 3698(than)m 469(usual.)s 240 fnt84 0 2955(4.2.)m 471(P)s 2(aragraphs,)k
+1780(displays,)s 2718(and)s 3159(lists)s 240 fnt82 480 2478(The)m
+914(remaining)s 1942(sections)s 2770(of)s 3047(this)s 3449(chapter)s
+4219(are)s 4572(all)s 4871(based)s 5481(on)s 5784(V)s 26(ersion)k
+6578(2)s 6759(of)s 7036(the)s 7391(DocumentLayout)s 0 2190(package.)m
+941(V)s 26(ersion)k 1722(3,)s 1942(which)s 2577(is)s
+2779(similar)s 3494(b)s 4(ut)k 3849(more)s 4389(elaborate,)s
+5364(is)s 5566(described)s 6533(from)s 7050(the)s 7391(user')s 13(s)k
+7991(perspecti)s 6(v)k 3(e)k 0 1902(in)m 249(the)s
+604(User')s 13(s)k 1272(Guide)s 1920([4)s 2113(].)s
+2363(In)s 2625(26)s 2925(pages)s 3528(of)s 3806(Lout,)s
+4372(the)s 4726(DocumentLaytout)s 6534(package)s 7381(de\207nes)s 8117(man)s 3(y)k
+8707(fea)s 8998(-)s 0 1614(tures)m 506(required)s 1350(in)s
+1583(the)s 1921(formatting)s 2972(of)s 3233(simple)s 3916(documents,)s
+5050(technical)s 5957(reports,)s 6717(and)s 7111(books,)s 7781(including)s
+8728(dis)s 8998(-)s 0 1326(plays,)m 603(lists,)s 1085(page)s
+1584(layout,)s 2280(cross)s 2813(references,)s 3891(tables)s 4490(of)s
+4752(contents,)s 5647(footnotes,)s 6635(\207gures,)s 7384(tables,)s 8039(references,)s
+0 1038(chapters,)m 903(sections,)s 1780(and)s 2184(sorted)s 2826(inde)s 3(x)k 3(es.)k
+480 664(The)m 939(symbols)s 1819(used)s 2347(for)s 2716(separating)s
+3782(paragraphs)s 4913(and)s 5348(producing)s 6403(displays)s 7269(and)s
+7704(lists)s 8170(may)s 8667(lack)s 0 376(the)m 351(e)s 3(xcitement)k
+1459(of)s 1733(more)s 2284(e)s 3(xotic)k 2921(features,)s
+3786(b)s 4(ut)k 4152(the)s 3(y)k 4618(can)s
+5010(teach)s 5574(some)s 6139(important)s 7131(lessons)s 7876(about)s
+8472(rob)s 4(ust)k 0 88(design.)m 786(The)s 1211(follo)s 6(wing)k
+2185(macro)s 2832(for)s 3167(separating)s 4199(paragraphs)s 5296(produces)s
+6207(a)s 6370(0.3)s 6711(cm)s 7060(v)s 3(ertical)k
+7824(space)s 8408(and)s 8809(a)s 8971(1)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 72 78
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(72)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(cm)m 352(indent)s 1010(on)s
+1307(the)s 1655(follo)s 6(wing)k 2632(line,)s 3097(and)s
+3501(is)s 3711(clearly)s 4414(on)s 4711(the)s 5059(right)s
+5570(track:)s 220 fnt35 480 12704(macro @PP { //0.3c &1c })m 240 fnt82 0 12210(Ne)m 6(v)k 3(ertheless)k
+1276(it)s 1468(has)s 1838(se)s 6(v)k 3(eral)k
+2560(major)s 3177(problems.)s 480 11836(The)m 220 fnt35 926 11833(&)m
+240 fnt82 1147 11836(symbol)m 1926(is)s 2154(subject)s 2910(to)s
+3168(widening)s 4130(during)s 4827(line)s 5260(adjustment,)s 6434(so)s
+6719(it)s 6930(should)s 7645(be)s 7946(replaced)s 8832(by)s
+220 fnt35 0 11545(1c @Wide {})m 240 fnt82 1213 11548(.)m 1387(But)s
+1804(then)s 2284(white)s 2882(space)s 3480(follo)s 6(wing)k
+4468(the)s 4827(symbol)s 5597(will)s 6034(af)s 6(fect)k
+6641(the)s 7000(result,)s 7648(so)s 7925(an)s 8219(e)s 3(xtra)k
+220 fnt35 8764 11545(&0i)m 240 fnt82 0 11260(must)m 528(be)s
+814(added.)s 1553(If)s 1787(the)s 2138(document)s 3146(is)s
+3359(printed)s 4098(double)s 4810(spaced,)s 5571(this)s 5971(paragraph)s
+6987(g)s 1(ap)k 7389(will)s 7818(f)s 2(ail)k
+8192(to)s 8435(widen:)s 0 10972(it)m 204(should)s 914(be)s
+1208(e)s 3(xpressed)k 2219(in)s 2475(terms)s 3068(of)s
+3352(the)s 220 fnt35 3712 10969(v)m 240 fnt82 3894 10972(unit,)m
+4386(with)s 4880(mark-to-mark)s 6280(spacing)s 7076(mode.)s 7785(Similarly)s 15(,)k
+8778(the)s 0 10684(paragraph)m 1013(indent)s 1671(should)s 2368(probably)s
+3273(be)s 3555(made)s 4129(proportional)s 5366(to)s 5605(the)s
+5953(font)s 6398(size.)s 480 10310(`Magic)m 1211(numbers')s 2135(lik)s 2(e)k
+220 fnt35 2535 10307(0.3c)m 240 fnt82 2993 10310(should)m 3678(not)s
+4032(be)s 4302(b)s 4(uried)k 4955(in)s 5186(de\207nitions)s
+6235(where)s 6863(the)s 3(y)k 7314(cannot)s 8000(be)s
+8270(changed)s 0 10022(easily)m 15(,)k 649(or)s 908(k)s 2(ept)k
+1378(consistent)s 2394(with)s 2876(similar)s 3598(de\207nitions)s 4659(during)s
+5337(tuning.)s 6113(The)s 3(y)k 6656(are)s 7003(much)s
+7592(better)s 8195(placed)s 8876(as)s 0 9734(symbols,)m 905(possibly)s
+1757(parameters)s 2855(of)s 3126(the)s 3474(enclosing)s 4444(package:)s
+220 fnt35 480 9233(def @DocumentLa)m 6(y)k 4(out)k 480 8945( named @P)m 8(ar)k 2(aGap { 1.3vx })k
+480 8657( named @P)m 8(ar)k 2(aIndent { 2f })k 480 8369( ...)m 480 8081(@Begin)m
+480 7505( macro @PP { //@P)m 8(ar)k 2(aGap @P)k 8(ar)k 2(aIndent @Wide &0i })k
+480 7217( macro @LP { //@P)m 8(ar)k 2(aGap })k 480 6929( ...)m 480 6641(@End @DocumentLa)m 6(y)k 4(out)k
+240 fnt82 0 6143(and)m 404(we)s 739(ha)s 4(v)k 3(e)k
+1240(arri)s 6(v)k 3(ed)k 1965(at)s 2197(the)s
+2545(de\207nition)s 3519(of)s 220 fnt35 3790 6140(@PP)m 240 fnt82
+4356 6143(as)m 4606(it)s 4798(appears)s 5579(in)s 5822(the)s
+6170(DocumentLayout)s 7905(package.)s 480 5769(A)m 710(display)s 1455(is)s
+1665(a)s 1831(table)s 2351(in)s 2594(which)s 3236(the)s
+3584(\207rst)s 4015(column)s 4790(is)s 5000(blank:)s 240 fnt83
+480 5266(pr)m 8(eceding)k 1483(te)s 4(xt)k 220 fnt35
+480 4973(//@DispGap |@DispIndent)m 240 fnt83 3183 4978(display)m 220 fnt35 480 4685(//@DispGap)m
+240 fnt83 480 4402(following)m 1438(te)s 4(xt)k 240 fnt82
+0 3901(Edge-to-edge)m 1345(is)s 1557(the)s 1906(appropriate)s 3052(spacing)s
+3838(mode)s 4427(before)s 5095(and)s 5500(after)s 5998(displays,)s
+6891(since)s 7439(the)s 7789(display)s 8536(could)s 0 3613(be)m
+273(a)s 430(table)s 941(or)s 1191(\207gure)s 1796(whose)s
+2455(mark)s 2998(does)s 3479(not)s 3836(correspond)s 4948(to)s
+5178(a)s 5335(baseline.)s 6273(Thus,)s 220 fnt35 6850 3610(1v)m
+240 fnt82 7132 3613(is)m 7333(a)s 7490(reasonable)s 8558(v)s 6(alue)k
+0 3325(for)m 220 fnt35 338 3322(@DispGap)m 240 fnt82 1406 3325(.)m
+480 2951(The)m 957(ordinary)s 1871(user)s 2379(cannot)s 3126(be)s
+3458(e)s 3(xpected)k 4413(to)s 4702(type)s 5219(the)s
+5617(Lout)s 6179(source)s 6908(sho)s 6(wn)k 7635(abo)s 3(v)k 3(e;)k
+8363(a)s 8579(more)s 0 2663(appropriate)m 1144(syntax)s 1824(is)s
+240 fnt83 480 2160(pr)m 8(eceding)k 1483(te)s 4(xt)k
+220 fnt35 480 1867(@IndentedDispla)m 6(y {)k 240 fnt83 2514 1872(display)m
+220 fnt35 3321 1867(})m 240 fnt83 480 1584(following)m 1438(te)s 4(xt)k
+240 fnt82 0 1083(This)m 491(presents)s 1340(a)s 1521(problem:)s
+2499(if)s 220 fnt35 2731 1080(@IndentedDispla)m 6(y)k 240 fnt82
+4593 1083(is)m 4819(made)s 5408(a)s 5589(de\207nition)s 6578(with)s
+7075(a)s 7256(right)s 7782(parameter)s 9(,)k 8850(its)s
+0 795(result)m 598(will)s 1032(be)s 1322(an)s 1613(object)s
+2265(separated)s 3233(from)s 3765(the)s 4121(surrounding)s 5339(te)s 3(xt)k
+5762(only)s 6250(by)s 6552(white)s 7147(space,)s 7793(hence)s
+8415(part)s 8855(of)s 0 507(the)m 343(paragraph;)s 1405(while)s
+1986(if)s 2197(it)s 2383(is)s 2587(a)s 2747(macro,)s
+3445(the)s 3787(\207nal)s 220 fnt35 4261 504(//@DispGap)m 240 fnt82
+5505 507(cannot)m 6197(be)s 6473(included)s 7349(in)s 7586(it.)s
+7876(The)s 8298(solution)s 0 219(adopted)m 816(in)s 1059(the)s
+1407(DocumentLayout)s 3142(package)s 3982(uses)s 4445(a)s 4611(g)s 1(alle)k 3(y)k
+5245(and)s 5649(a)s 5815(macro:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 73 79
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.2.)m 454(P)s 19(ar)k 3(a)k 2(gr)k 3(aphs,)k
+1665(displays,)s 2542(and)s 2968(lists)s 240 fnt84 8833 13840(73)m
+220 fnt35 480 13207( def @DispPlace { @Galle)m 4(y })k 480 12919( def @Disp into { @DispPlace&&preceding })m 480 12631( r)m -3(ight x)k
+480 12343( {)m 480 12055( @OneRo)m 3(w x)k 480 11767( })m 480 11191( macro @IndentedDispla)m 6(y)k
+480 10903( {)m 480 10615( //@DispGap |@DispIndent @DispPlace |)m 480 10327( //@DispGap // @Disp)m 480 10039( })m 0 9542(@DispPlace)m
+240 fnt82 1257 9545(and)m 220 fnt35 1657 9542(@Disp)m 240 fnt82
+2366 9545(are)m 2709(not)s 3070(e)s 3(xported,)k 4007(so)s
+4269(there)s 4798(is)s 5003(no)s 5292(danger)s 5999(of)s
+6266(a)s 6427(name)s 6997(clash)s 7541(with)s 8019(some)s
+8575(other)s 0 9257(symbol.)m 869(The)s 1297(ordinary)s 2161(user')s 13(s)k
+2769(syntax)s 3449(e)s 3(xpands)k 4282(to)s 240 fnt83
+480 8754(pr)m 8(eceding)k 1483(te)s 4(xt)k 220 fnt35
+480 8461(//@DispGap |@DispIndent @DispPlace |)m 480 8173(//@DispGap // @Disp {)m 240 fnt83 2890 8178(display)m 220 fnt35
+3637 8173(})m 240 fnt83 480 7890(following)m 1438(te)s 4(xt)k
+240 fnt82 0 7389(and)m 397(the)s 220 fnt35 737 7386(@Disp)m
+240 fnt82 1442 7389(g)m 1(alle)k 3(y)k 2068(appears)s
+2842(at)s 3066(the)s 3406(preceding)s 220 fnt35 4394 7386(@DispPlace)m
+240 fnt82 5595 7389(,)m 5694(being)s 6272(itself)s 6812(replaced)s
+7671(by)s 220 fnt35 7957 7386(@Null)m 240 fnt82 8542 7389(.)m
+8698(The)s 220 fnt35 0 7098(//)m 240 fnt82 184 7101(symbol)m
+942(protects)s 1748(the)s 2094(preceding)s 220 fnt35 3088 7098(//@DispGap)m
+240 fnt82 4337 7101(from)m 4859(being)s 5443(deleted)s 6189(by)s
+6481(this)s 220 fnt35 6876 7098(@Null)m 240 fnt82 7519 7101(when)m
+8094(there)s 8625(is)s 8833(no)s 0 6813(follo)m 6(wing)k
+977(te)s 3(xt.)k 480 6439(An)m 858(automatically)s 2240(numbered)s
+3283(list)s 3662(could)s 4280(ha)s 4(v)k 3(e)k
+4809(an)s 5121(arbitrarily)s 6156(lar)s 4(ge)k 6713(number)s
+7532(of)s 7831(items,)s 8483(so,)s 8832(by)s 0 6151(analogy)m
+812(with)s 1294(sequences)s 2315(of)s 2586(pages,)s 3238(we)s
+3573(see)s 3934(immmediately)s 5368(that)s 5786(recursion)s 6732(must)s
+7257(be)s 7539(in)s 9(v)k 4(olv)k 3(ed:)k
+220 fnt35 480 5650(def @List r)m -3(ight n)k 2(um)k 480 5362({)m
+480 5074( @DispIndent @Wide n)m 2(um.)k 13( | @ItemPlace)k 480 4786( //@DispGap @List @Ne)m 6(xt n)k 2(um)k
+480 4498(})m 240 fnt82 0 4004(Notice)m 689(ho)s 6(w)k
+1146(the)s 220 fnt35 1490 4001(@Ne)m 6(xt)k 240 fnt82
+2210 4004(symbol)m 2965(w)s 2(orks)k 3595(in)s 3834(conjunction)s
+5017(with)s 5495(the)s 5838(recursion)s 6780(to)s 7015(produce)s
+7838(an)s 8116(ascending)s 0 3716(sequence)m 933(of)s 1204(numbers;)s
+2140(the)s 2488(result)s 3078(of)s 220 fnt35 3349 3713(@List 1)m
+240 fnt82 4113 3716(will)m 4539(be)s 220 fnt35 480 3215(1.)m 13( @ItemPlace)k
+480 2927(2.)m 13( @ItemPlace)k 480 2639(3.)m 13( @ItemPlace)k 480 2351(...)m
+240 fnt82 0 1900(W)m 19(e)k 362(can)s 744(follo)s 6(w)k
+1408(this)s 1797(with)s 2271(items)s 2832(which)s 3466(are)s
+3806(g)s 1(alle)k 3(ys)k 4522(tar)s 4(geted)k
+5338(to)s 220 fnt35 5569 1897(@ItemPlace&&preceding)m 240 fnt82 8010 1900(,)m
+8110(and)s 220 fnt35 8506 1897(@List)m 240 fnt82 0 1612(will)m
+426(e)s 3(xpand)k 1173(just)s 1578(enough)s 2341(to)s
+2580(accommodate)s 3964(them.)s 480 1238(The)m 908(usual)s 1468(problem)s
+2325(with)s 2807(recursi)s 6(v)k 3(e-)k 3741(recepti)s 6(v)k 3(e)k
+4663(symbols)s 5513(no)s 6(w)k 5974(arises:)s 6683(there)s
+7216(is)s 7426(al)s 2(w)k 2(ays)k 8137(one)s
+8540(une)s 3(x)k 8998(-)s 0 950(panded)m 220 fnt35
+753 947(@List)m 240 fnt82 1313 950(,)m 1424(and)s 1832(until)s
+2329(it)s 2525(can)s 2917(be)s 3203(remo)s 3(v)k 3(ed)k
+4096(the)s 4448(g)s 1(alle)k 3(y)k 5086(containing)s
+6152(it)s 6348(will)s 6778(appear)s 7479(to)s 7722(be)s
+8008(incomplete)s 0 662(and)m 394(will)s 810(be)s 1081(pre)s 6(v)k 3(ented)k
+2063(at)s 2285(that)s 2692(point)s 3234(from)s 3747(\210ushing)s
+4562(into)s 4977(its)s 5242(parent)s 5889(\(see)s 6318(page)s
+6816(29\).)s 7289(W)s 19(e)k 7647(adopt)s 8229(the)s
+8566(usual)s 0 374(solution:)m 937(a)s 1104(forcing)s 1847(g)s 1(alle)k 3(y)k
+2482(into)s 2908(a)s 3074(later)s 3558(tar)s 4(get)k
+4158(will)s 4584(replace)s 5330(the)s 5679(last)s 220 fnt35
+6070 371(@List)m 240 fnt82 6691 374(by)m 220 fnt35 6986 371(@Null)m
+240 fnt82 7571 374(.)m 7735(This)s 8212(brings)s 8862(us)s
+0 86(to)m 239(the)s 587(de\207nitions)s 1648(as)s 1898(the)s 3(y)k
+2361(appear)s 3058(in)s 3301(DocumentLayout:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 74 80
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(74)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207(def @ItemPlace { @Galle)m 4(y })k 480 12919(def @ListItem into { @ItemPlace&&preceding })m
+480 12631( r)m -3(ight x)k 480 12343({ x })m 480 11851(def @EndListPlace { @Galle)m 4(y })k
+480 11563(def @EndList f)m 6(orce into { @EndListPlace&&preceding })k 480 11275({})m 480 10783(def @Ra)m 4(wIndentedList)k
+480 10495( named style r)m -3(ight tag {})k 480 10207( named indent { @DispIndent })m 480 9919( named gap { @DispGap })m 480 9631( named star)m -8(t { 1 })k
+480 9343({)m 480 9055( def @IList r)m -3(ight n)k 2(um)k 480 8767( {)m
+480 8479( indent @Wide {style n)m 2(um} | @ItemPlace)k 480 8191( //gap @IList @Ne)m 6(xt n)k 2(um)k
+480 7903( })m 480 7327( @IList star)m -8(t // @EndListPlace)k 480 7039(})m 240 fnt82
+0 6545(No)m 6(w)k 514(gi)s 6(v)k 3(en)k
+1094(the)s 1442(input)s 220 fnt35 480 6044(@Ra)m 4(wIndentedList)k
+480 5756(@ListItem { \207rst item })m 480 5468(@ListItem { second item })m 480 5180(...)m 480 4892(@ListItem { last item })m 480 4604(@EndList)m
+0 4146(@Ra)m 4(wIndentedList)k 240 fnt82 1908 4149(will)m 2334(e)s 3(xpand)k
+3081(to)s 3320(recei)s 6(v)k 3(e)k 4056(the)s
+4404(items,)s 5028(and)s 5432(will)s 5858(be)s 6140(closed)s
+6809(of)s 6(f)k 7153(by)s 220 fnt35 7447 4146(@EndList)m
+240 fnt82 8397 4149(.)m 480 3775(The)m 220 fnt35 913 3772(indent)m
+240 fnt82 1506 3775(,)m 220 fnt35 1619 3772(gap)m 240 fnt82
+1977 3775(,)m 2089(and)s 220 fnt35 2499 3772(star)m -8(t)k
+240 fnt82 2996 3775(parameters)m 4099(are)s 4452(straightforw)s 2(ard)k
+5986(\(note)s 6538(that)s 6962(the)s 7316(b)s 4(urden)k
+8039(of)s 8316(typing)s 220 fnt35 8987 3772(1)m 240 fnt82
+0 3487(has)m 378(been)s 895(lifted)s 1464(from)s 1996(the)s
+2352(ordinary)s 3224(user\),)s 3816(b)s 4(ut)k 4186(the)s
+220 fnt35 4543 3484(style)m 240 fnt82 5054 3487(parameter)m 6076(has)s
+6454(a)s 6628(parameter)s 7650(of)s 7929(its)s 8213(o)s 6(wn)k
+8686(\(see)s 0 3199(page)m 508(16\).)s 991(It)s 1196(is)s
+1406(used)s 1903(lik)s 2(e)k 2315(this:)s 220 fnt35
+480 2698(def @Ra)m 4(wNumberedList { @Ra)k 4(wIndentedList style { tag.)k 13( } })k 480 2410(def @Ra)m 4(wP)k 8(arenNumberedList { @Ra)k 4(wIndentedList style { \(tag\) } })k
+240 fnt82 0 1911(In)m 220 fnt35 276 1908(@Ra)m 4(wNumberedList)k
+240 fnt82 2294 1911(,)m 220 fnt35 2422 1908(style)m 240 fnt82
+2946 1911(is)m 3176(gi)s 6(v)k 3(en)k 3777(the)s
+4146(v)s 6(alue)k 220 fnt35 4734 1908(tag.)m 240 fnt82
+5081 1911(,)m 5209(where)s 220 fnt35 5870 1908(tag)m 240 fnt82
+6243 1911(is)m 6474(its)s 6771(o)s 6(wn)k 7255(right)s
+7787(parameter)s 9(,)k 8860(so)s 0 1623(the)m 348(v)s 6(alue)k
+916(of)s 220 fnt35 1187 1620({style n)m 2(um})k 240 fnt82
+2321 1623(within)m 220 fnt35 2989 1620(@IList)m 240 fnt82 3670 1623(is)m
+220 fnt35 3880 1620(n)m 2(um.)k 240 fnt82 4347 1623(;)m
+4459(while)s 5046(in)s 220 fnt35 5289 1620(@Ra)m 4(wP)k 8(arenNumberedList)k
+240 fnt82 7884 1623(,)m 220 fnt35 7992 1620({style n)m 2(um})k
+240 fnt82 0 1335(is)m 220 fnt35 219 1332(\(n)m 2(um\))k
+240 fnt82 776 1335(.)m 949(In)s 1215(this)s 1620(w)s 2(ay)k
+2080(we)s 2425(achie)s 6(v)k 3(e)k 3211(an)s
+3503(unlimited)s 4487(v)s 6(ariety)k 5207(of)s 5487(numbering)s
+6587(formats)s 7376(without)s 8176(ha)s 4(ving)k 8887(to)s
+0 1047(re)m 6(write)k 220 fnt35 725 1044(@Ra)m 4(wIndentedList)k
+240 fnt82 2633 1047(o)m 3(v)k 3(er)k 3112(and)s
+3516(o)s 3(v)k 3(er)k 13(.)k 480 673(These)m
+1113(list)s 1470(symbols)s 2325(are)s 2678(objects)s 3412(without)s
+4209(surrounding)s 5425(space,)s 6069(so)s 6341(macros)s 7088(similar)s
+7816(to)s 8061(those)s 8629(used)s 0 385(for)m 338(displays)s
+1173(are)s 1520(needed:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 75 81
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.2.)m 454(P)s 19(ar)k 3(a)k 2(gr)k 3(aphs,)k
+1665(displays,)s 2542(and)s 2968(lists)s 240 fnt84 8833 13840(75)m
+220 fnt35 480 13207(macro @NumberedList { //@DispGap @Ra)m 4(wNumberedList //@DispGap })k 480 12919(macro @P)m 8(arenNumberedList { //@DispGap @Ra)k 4(wP)k 8(arenNumberedList //@DispGap })k
+240 fnt82 0 12423(and)m 404(so)s 670(on.)s 480 12049(Lists)m
+994(numbered)s 2007(by)s 2300(Roman)s 3047(numerals)s 3973(present)s
+4721(a)s 4886(problem,)s 5788(because)s 220 fnt35 6600 12046(@Ne)m 6(xt)k
+240 fnt82 7322 12049(will)m 7747(not)s 8111(increment)s 0 11761(Roman)m
+749(numerals.)s 1789(Instead,)s 2586(the)s 3(y)k 3049(must)s
+3574(be)s 3856(stored)s 4498(in)s 4741(a)s 4907(database:)s
+220 fnt35 480 11260(def @Roman)m 480 10972( left @T)m 26(ag)k 480 10684( r)m -3(ight @V)k 15(al)k
+480 10396({ @V)m 15(al })k 480 9820(@SysDatabase @Roman { standard })m 0 9319(@SysDatabase)m 240 fnt82
+1602 9322(is)m 1835(preferred)s 2790(o)s 3(v)k 3(er)k
+220 fnt35 3292 9319(@Database)m 240 fnt82 4529 9322(here)m 5019(because)s
+5855(this)s 6274(database)s 7176(should)s 7896(be)s 8201(k)s 2(ept)k
+8694(in)s 8960(a)s 0 9034(standard)m 880(place)s 1452(and)s
+1868(shared)s 2562(by)s 2868(e)s 6(v)k 3(eryone.)k
+3912(The)s 4352(database)s 5243(itself,)s 5838(a)s 6016(\207le)s
+6389(called)s 220 fnt35 7029 9031(standard.ld)m 240 fnt82 8174 9034(in)m
+8429(Basser)s 0 8746(Lout,)m 559(contains)s 1407(in)s 9(v)k 4(ocations)k
+2548(of)s 220 fnt35 2819 8743(@Roman)m 240 fnt82 3735 8746(,)m
+3842(each)s 4337(enclosed)s 5232(in)s 5475(braces:)s 220 fnt35
+480 8264({ 1 @Roman i })m 480 7976({ 2 @Roman ii })m 480 7688(...)m 480 7400({ 100 @Roman c })m 240 fnt82
+0 6906(Then)m 220 fnt35 549 6903(@Roman&&12)m 240 fnt82 2065 6906(for)m
+2403(e)s 3(xample)k 3266(has)s 3636(v)s 6(alue)k
+4204(xii,)s 4563(and)s 220 fnt35 480 6405(def @Ra)m 4(wRomanList { @Ra)k 4(wIndentedList style { {@Roman&&tag}.)k 13( } })k
+240 fnt82 0 5906(produces)m 922(a)s 1096(list)s 1454(numbered)s
+2477(by)s 2779(Roman)s 3535(numerals.)s 4583(The)s 5019(counting)s
+5917(still)s 6337(proceeds)s 7246(in)s 7496(Arabic,)s 8261(b)s 4(ut)k
+8631(each)s 0 5618(Arabic)m 719(numeral)s 1573(is)s 1799(con)s 9(v)k 3(erted)k
+2804(to)s 3059(Roman)s 3824(by)s 4134(the)s 4498(cross)s
+5056(reference.)s 6123(Since)s 6726(arbitrary)s 7617(objects)s 8361(may)s
+8844(be)s 0 5330(stored)m 642(in)s 885(databases,)s 1908(arbitrary)s
+2783(\207nite)s 3330(sequences)s 4351(of)s 4622(objects)s 5350(may)s
+5816(be)s 6098(`counted')s 7047(in)s 7290(this)s 7686(w)s 2(ay)k 15(.)k
+240 fnt84 0 4538(4.3.)m 471(P)s 2(age)k 1017(lay)s 6(out)k
+240 fnt82 480 4061(The)m 921(page)s 1443(layout)s 2115(de\207nitions)s
+3190(gi)s 6(v)k 3(en)k 3783(in)s 4040(Section)s
+4828(1.2,)s 5249(although)s 6158(correct,)s 6940(are)s 7301(v)s 3(ery)k
+7791(basic.)s 8460(In)s 8730(this)s 0 3773(section)m 726(we)s
+1053(present)s 1795(the)s 2135(de\207nitions)s 3187(used)s 3676(by)s
+3962(the)s 4302(DocumentLayout)s 6029(package)s 6860(for)s 7190(laying)s
+7833(out)s 8191(the)s 8530(pages)s 0 3485(of)m 271(books,)s
+950(including)s 1906(running)s 2704(page)s 3211(headers)s 3991(and)s
+4394(footers,)s 5164(dif)s 6(ferent)k 6038(formats)s 6817(for)s
+7155(odd)s 7572(and)s 7975(e)s 6(v)k 3(en)k
+8474(pages,)s 0 3197(and)m 404(so)s 670(on.)s 1074(The)s
+1502(present)s 2252(document)s 3256(is)s 3466(produced)s 4415(with)s
+4897(these)s 5444(de\207nitions.)s 480 2823(W)m 19(e)k 846(be)s 3(gin)k
+1429(with)s 1908(a)s 2071(fe)s 6(w)k 2474(de\207nitions)s
+3531(which)s 4170(permit)s 4850(the)s 5195(user)s 5650(to)s
+5885(create)s 6507(cross)s 7046(references)s 8074(of)s 8342(the)s
+8686(`see)s 0 2535(page)m 509(27')s 863(v)s 6(ariety)k
+1576(which)s 2220(will)s 2647(be)s 2931(k)s 2(ept)k
+3403(up)s 3698(to)s 3938(date)s 4394(automatically)s 15(.)k
+5845(The)s 6275(user)s 6734(marks)s 7371(the)s 7721(tar)s 4(get)k
+8322(page)s 8832(by)s 0 2247(placing)m 220 fnt35 756 2244(@P)m 8(ageMar)k -3(k intro)k
+240 fnt82 2454 2247(,)m 2560(for)s 2897(e)s 3(xample,)k
+3810(at)s 4041(the)s 4388(point)s 4939(of)s 5209(interest,)s
+6017(and)s 6420(refers)s 7012(to)s 7250(the)s 7597(mark)s 2(ed)k
+8369(page)s 8876(as)s 220 fnt35 0 1956(@P)m 8(ageOf intro)k
+240 fnt82 1499 1959(else)m 6(where:)k 220 fnt35 480 1459(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 1171(def @P)m 8(ageMar)k -3(k)k 4(er r)k -3(ight @T)k 26(ag { @Null })k
+480 674(def @P)m 8(ageMar)k -3(k r)k -3(ight x)k 480 386({)m
+480 98( @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged x)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 76 82
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(76)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13210(})m 480 12718(def @P)m 8(ageOf r)k -3(ight x)k
+480 12430({)m 480 12142( @P)m 8(ageMar)k -3(k)k 4(er&&x @Open { @T)k 26(ag })k
+480 11854(})m 240 fnt82 0 11360(W)m 19(e)k 385(will)s
+828(see)s 1206(belo)s 6(w)k 1856(that)s 2291(an)s
+2591(in)s 9(v)k 4(ocation)k 3662(of)s 220 fnt35
+3949 11357(@P)m 8(ageMar)k -3(k)k 4(er)k 240 fnt82
+5435 11360(appears)m 6233(before)s 6916(each)s 7428(page,)s 8004(with)s
+220 fnt35 8503 11357(@T)m 26(ag)k 240 fnt82 0 11072(parameter)m
+1014(equal)s 1587(to)s 1826(the)s 2174(page)s 2682(number)s 13(.)k
+3564(Suppose)s 4432(that)s 220 fnt35 4850 11069(@P)m 8(ageMar)k -3(k intro)k
+240 fnt82 6548 11072(,)m 6655(which)s 7297(e)s 3(xpands)k
+8130(to)s 220 fnt35 480 10571(@P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged intro)k
+240 fnt82 0 10072(happens)m 855(to)s 1113(f)s 2(all)k
+1502(on)s 1819(page)s 2346(27)s 2653(of)s 2944(the)s
+3311(\207nal)s 3810(printed)s 4564(document)s 5588(\(of)s 5957(course,)s
+6707(its)s 7003(v)s 6(alue)k 7590(is)s 220 fnt35
+7819 10069(@Null)m 240 fnt82 8484 10072(which)m 0 9784(mak)m 2(es)k
+686(it)s 905(in)s 9(visible\).)k 1988(Then)s 2564(the)s
+2939(ef)s 6(fect)k 3561(of)s 220 fnt35 3859 9781(@T)m 26(agged)k
+240 fnt82 4874 9784(is)m 5111(to)s 5377(attach)s 220 fnt35
+6030 9781(intro)m 240 fnt82 6536 9784(as)m 6812(an)s 7122(e)s 3(xtra)k
+7683(tag)s 8054(to)s 8320(the)s 8695(\207rst)s 0 9496(in)m 9(v)k 4(ocation)k
+1092(of)s 220 fnt35 1401 9493(@P)m 8(ageMar)k -3(k)k 4(er)k
+240 fnt82 2908 9496(preceding)m 3943(that)s 4399(\207nal)s 4917(point,)s
+5554(and)s 5997(this)s 6431(must)s 6994(be)s 220 fnt35
+7315 9493(@P)m 8(ageMar)k -3(k)k 4(er 27)k 240 fnt82
+9022 9496(.)m 0 9208(Therefore)m 997(the)s 1345(e)s 3(xpression)k
+220 fnt35 480 8707(@P)m 8(ageMar)k -3(k)k 4(er&&intro @Open { @T)k 26(ag })k
+240 fnt82 0 8208(will)m 422(open)s 941(the)s 1285(in)s 9(v)k 4(ocation)k
+220 fnt35 2334 8205(@P)m 8(ageMar)k -3(k)k 4(er 27)k
+240 fnt82 4097 8208(and)m 4497(yield)s 5028(the)s 5372(v)s 6(alue)k
+5936(of)s 6203(its)s 220 fnt35 6474 8205(@T)m 26(ag)k
+240 fnt82 7093 8208(parameter)m 9(,)k 8141(27.)s 8540(Thus,)s
+220 fnt35 0 7917(@P)m 8(ageOf intro)k 240 fnt82 1499 7920(appearing)m
+2495(an)s 3(ywhere)k 3478(in)s 3721(the)s 4069(document)s
+5073(yields)s 5695(27.)s 480 7546(Ne)m 3(xt)k 1009(we)s
+1351(ha)s 4(v)k 3(e)k 1859(some)s 2427(little)s
+2926(de\207nitions)s 3994(for)s 4339(v)s 6(arious)k 5095(parts)s
+5617(of)s 5895(the)s 6250(page.)s 220 fnt35 6873 7543(@FullPlace)m
+240 fnt82 8055 7546(will)m 8488(be)s 8778(the)s 0 7258(tar)m 4(get)k
+599(of)s 870(full-width)s 1882(body)s 2416(te)s 3(xt:)k
+220 fnt35 480 6757(def @FullPlace { @Galle)m 4(y })k 0 6256(@ColPlace)m 240 fnt82
+1151 6259(will)m 1577(be)s 1859(the)s 2207(tar)s 4(get)k
+2806(of)s 3077(body)s 3611(te)s 3(xt)k 4026(within)s
+4694(one)s 5096(column:)s 220 fnt35 480 5758(def @ColPlace { @Galle)m 4(y })k
+0 5257(@T)m 26(opList)k 240 fnt82 972 5260(will)m 1398(be)s
+1680(the)s 2028(tar)s 4(get)k 2627(of)s 2898(\207gures)s
+3600(and)s 4004(tables:)s 220 fnt35 480 4759(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 4471(def @T)m 26(opList r)k -3(ight @T)k 26(ag)k 480 4183({)m
+480 3895( @Galle)m 4(y)k 480 3607( //@T)m 26(opGap @T)k 26(opList @Ne)k 6(xt @T)k 26(ag)k
+480 3319(})m 240 fnt82 0 2825(W)m 19(e)k 392(ha)s 4(v)k 3(e)k
+916(tak)s 2(en)k 1512(a)s 1702(shortcut)s 2555(here,)s
+3096(a)s 4(v)k 4(oiding)k 4002(an)s 4309(unnecessary)s
+220 fnt35 5555 2822(@T)m 26(opPlace)k 240 fnt82 6753 2825(symbol.)m
+220 fnt35 7645 2822(@F)m 6(ootList)k 240 fnt82 8722 2825(and)m
+220 fnt35 0 2534(@F)m 6(ootSect)k 240 fnt82 1142 2537(de\207ne)m
+1774(a)s 1931(sequence)s 2854(of)s 3116(full-width)s 4119(tar)s 4(gets)k
+4793(at)s 5015(the)s 5354(foot)s 5790(of)s 6052(the)s
+6390(page)s 6889(for)s 7218(footnotes,)s 8205(preceded)s 0 2249(by)m
+294(a)s 460(short)s 998(horizontal)s 2022(line:)s 220 fnt35
+480 1748(e)m 6(xpor)k -8(t @T)k 26(ag)k 480 1460(def @F)m 6(ootList r)k -3(ight @T)k 26(ag)k
+480 1172({)m 480 884( @Galle)m 4(y)k 480 596( //@F)m 6(ootGap @F)k 6(ootList @Ne)k 6(xt @T)k 26(ag)k
+480 308(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 77 83
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.3.)m 454(P)s 19(a)k 2(g)k 2(e)k
+976(layout)s 240 fnt84 8831 13840(77)m 220 fnt35 480 13207(def @F)m 6(ootSect)k
+480 12919({)m 480 12631( @F)m 6(ootLen @Wide @HLine)k 480 12343( //@F)m 6(ootGap @F)k 6(ootList 1 ||@F)k 6(ootLen)k
+480 12055(})m 240 fnt82 0 11561(Similarly)m 15(,)k 220 fnt35
+988 11558(@ColF)m 6(ootList)k 240 fnt82 2378 11561(and)m 220 fnt35
+2791 11558(@ColF)m 6(ootSect)k 240 fnt82 4279 11561(pro)m 3(vide)k
+5072(a)s 5247(sequence)s 6189(of)s 6469(tar)s 4(gets)k
+7161(for)s 7508(footnotes)s 8458(within)s 0 11273(one)m 402(column:)s
+220 fnt35 480 10822(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 10534(def @ColF)m 6(ootList r)k -3(ight @T)k 26(ag)k 480 10246({)m
+480 9958( @Galle)m 4(y)k 480 9670( //@F)m 6(ootGap @ColF)k 6(ootList @Ne)k 6(xt @T)k 26(ag)k
+480 9382(})m 480 8806(def @ColF)m 6(ootSect)k 480 8518({)m 480 8230( @ColF)m 6(ootLen @Wide @HLine)k
+480 7942( //@F)m 6(ootGap @ColF)k 6(ootList 1 ||@ColF)k 6(ootLen)k 480 7654(})m
+240 fnt82 0 7160(The)m 428(ne)s 3(xt)k 897(de\207nition)s
+1871(pro)s 3(vides)k 2743(a)s 2909(horizontal)s 3933(sequence)s
+4866(of)s 5137(one)s 5539(or)s 5798(more)s 6345(columns:)s
+220 fnt35 480 6659(def @ColList r)m -3(ight col)k 480 6371({)m 480 6083( def @Column)m
+480 5795( { @VExpand { @ColPlace //1r)m -8(t @OneRo)k 3(w { //@MidGap @ColF)k 6(ootSect } } })k 480 5219( col @Case {)m
+480 4931( Single @Y)m 4(ield @Column)k 480 4643( Doub)m 4(le @Y)k 4(ield { @Doub)k 4(leColWidth @Wide @Column ||@ColGap @ColList col })k
+480 4355( Multi @Y)m 4(ield { @MultiColWidth @Wide @Column ||@ColGap @ColList col })k 480 4067( })m 480 3779(})m 240 fnt82
+0 3285(Each)m 537(column)s 1315(consists)s 2125(of)s 2399(a)s
+220 fnt35 2568 3282(@ColPlace)m 240 fnt82 3721 3285(at)m 3956(the)s
+4307(top)s 4668(and)s 5075(a)s 220 fnt35 5243 3282(@F)m 6(ootSect)k
+240 fnt82 6397 3285(at)m 6632(the)s 6982(foot.)s 7534(The)s
+220 fnt35 7965 3282(@VExpand)m 240 fnt82 0 2997(symbol)m 772(ensures)s
+1553(that)s 1983(whene)s 6(v)k 3(er)k 2977(a)s
+3156(column)s 3943(comes)s 4618(into)s 5056(e)s 3(xistence,)k
+6061(it)s 6266(will)s 6705(e)s 3(xpand)k 7464(v)s 3(ertically)k
+8429(so)s 8708(that)s 0 2709(the)m 360(bottom-justi\207cation)s 220 fnt35
+2315 2706(//1r)m -8(t)k 240 fnt82 2769 2709(has)m 3152(as)s
+3414(much)s 4016(space)s 4615(as)s 4878(possible)s 5730(to)s
+5982(w)s 2(ork)k 6545(within.)s 7333(The)s 220 fnt35
+7773 2706(col)m 240 fnt82 8112 2709(parameter)m 0 2421(determines)m 1099(whether)s
+1929(the)s 2277(result)s 2867(has)s 3237(a)s 3403(single)s
+4030(column,)s 4855(double)s 5563(columns,)s 6481(or)s 6740(multiple)s
+7592(columns.)s 480 2047(The)m 220 fnt35 908 2044(@P)m 8(age)k
+240 fnt82 1687 2047(symbol)m 2447(places)s 3095(its)s 3371(parameter)s
+4385(in)s 4628(a)s 4794(page)s 5302(of)s 5573(\207x)s 3(ed)k
+6107(width,)s 6759(height,)s 7464(and)s 7868(mar)s 4(gins:)k
+220 fnt35 480 1546(def @P)m 8(age r)k -3(ight x)k 480 1258({)m
+480 970( @P)m 8(ageWidth @Wide @P)k 8(ageHeight @High {)k 480 682( //@P)m 8(ageMargin ||@P)k 8(ageMargin)k
+480 394( @HExpand @VExpand x)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 78 84
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(78)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( ||@P)m 8(ageMargin //@P)k 8(ageMargin)k
+480 12919( })m 480 12631(})m 0 12134(@HExpand)m 240 fnt82 1169 12137(and)m
+220 fnt35 1568 12134(@VExpand)m 240 fnt82 2725 12137(ensure)m 3400(that)s
+3814(the)s 4157(right)s 4664(parameter)s 5673(occupies)s 6557(all)s
+6845(the)s 7189(a)s 4(v)k 6(ailable)k 8092(space;)s
+8730(this)s 0 11849(is)m 218(important)s 1215(when)s 1800(the)s
+2156(right)s 2676(parameter)s 3698(is)s 3916(unusually)s 4910(small.)s
+5599(The)s 220 fnt35 6036 11846(@High)m 240 fnt82 6763 11849(symbol)m
+7531(gi)s 6(v)k 3(es)k 8087(the)s 8443(page)s
+8960(a)s 0 11561(single)m 627(ro)s 6(w)k 1047(mark,)s
+1645(ensuring)s 2522(that)s 2940(it)s 3132(will)s 3558(be)s
+3840(printed)s 4575(on)s 4872(a)s 5038(single)s 5665(sheet)s
+6216(of)s 6487(paper)s 7078(\(page)s 7665(29\).)s 480 11187(Ne)m 3(xt)k
+1002(we)s 1337(ha)s 4(v)k 3(e)k 220 fnt35
+1838 11184(@OneP)m 8(age)k 240 fnt82 2972 11187(,)m 3079(de\207ning)s
+3917(a)s 4083(typical)s 4788(page)s 5296(of)s 5567(a)s
+5733(book)s 6274(or)s 6533(other)s 7084(document:)s 220 fnt35
+480 10686(def @OneP)m 8(age)k 480 10398( named @Columns {})m 480 10110( named @P)m 8(ageT)k 26(op {})k
+480 9822( named @P)m 8(ageF)k 6(oot {})k 480 9534({)m 480 9246( @P)m 8(age {)k
+480 8958( @P)m 8(ageT)k 26(op)k 480 8670( //@MidGap @T)m 26(opList)k
+480 8382( //@MidGap @FullPlace)m 480 8094( //@MidGap @ColList @Columns)m 480 7806( // //1r)m -8(t @OneRo)k 3(w { //@MidGap @F)k 6(ootSect //@MidGap @P)k 8(ageF)k 6(oot })k
+480 7518( })m 480 7230(})m 240 fnt82 0 6736(The)m 431(page)s
+943(top)s 1305(and)s 1713(page)s 2224(foot,)s 2720(and)s
+3128(the)s 3479(number)s 4274(of)s 4548(columns,)s 5470(are)s
+5821(parameters)s 6922(that)s 7344(will)s 7773(be)s 8059(gi)s 6(v)k 3(en)k
+8643(later)s 0 6448(when)m 220 fnt35 565 6445(@OneP)m 8(age)k
+240 fnt82 1747 6448(is)m 1946(in)s 9(v)k 4(ok)k 2(ed.)k
+2855(The)s 3272(body)s 3794(of)s 4054(the)s 4390(page)s
+4887(is)s 5085(a)s 5240(straightforw)s 2(ard)k 6756(combination)s
+7998(of)s 8257(pre)s 6(vious)k 0 6160(de\207nitions.)m 1171(The)s
+220 fnt35 1595 6157(//)m 240 fnt82 1777 6160(symbol)m 2533(protects)s
+3337(the)s 3681(follo)s 6(wing)k 220 fnt35 4655 6157(//1r)m -8(t)k
+240 fnt82 5093 6160(from)m 5614(deletion)s 6437(in)s 6677(the)s
+7021(unlik)s 2(ely)k 7854(e)s 6(v)k 3(ent)k
+8419(that)s 8833(all)s 0 5872(the)m 342(preceding)s 1331(symbols)s
+2174(are)s 2514(replaced)s 3375(by)s 220 fnt35 3662 5869(@Null)m
+240 fnt82 4247 5872(.)m 4405(The)s 4826(follo)s 6(wing)k
+5797(object)s 6434(is)s 6638(enclosed)s 7526(in)s 220 fnt35
+7763 5869(@OneRo)m 3(w)k 240 fnt82 8887 5872(to)m 0 5584(ensure)m
+680(that)s 1098(all)s 1391(of)s 1662(it)s 1854(is)s
+2064(bottom-justi\207ed,)s 3698(not)s 4064(just)s 4469(its)s 4745(\207rst)s
+5176(component.)s 480 5210(Before)m 1199(presenting)s 2262(the)s 2624(de\207nition)s
+3612(of)s 3896(a)s 4076(sequence)s 5023(of)s 5308(pages,)s
+5974(we)s 6322(must)s 6861(detour)s 7546(to)s 7799(describe)s
+8665(ho)s 6(w)k 0 4922(running)m 803(page)s 1317(headers)s
+2104(and)s 2513(footers)s 3233(\(lik)s 2(e)k 3730(those)s
+4297(in)s 4545(the)s 4899(present)s 5655(document\))s 6732(are)s
+7085(produced.)s 8146(These)s 8779(are)s 0 4634(based)m 603(on)s
+900(the)s 220 fnt35 1248 4631(@Runner)m 240 fnt82 2250 4634(symbol:)m
+220 fnt35 480 4133(e)m 6(xpor)k -8(t @T)k 26(opOdd @T)k 26(opEv)k 5(en @F)k 6(ootOdd @F)k 6(ootEv)k 5(en)k
+480 3845(def @Runner)m 480 3557( named @T)m 26(opOdd r)k -3(ight @P)k 8(ageNum { @Null })k
+480 3269( named @T)m 26(opEv)k 5(en r)k -3(ight @P)k 8(ageNum { @Null })k
+480 2981( named @F)m 6(ootOdd r)k -3(ight @P)k 8(ageNum { @Null })k 480 2693( named @F)m 6(ootEv)k 5(en r)k -3(ight @P)k 8(ageNum { @Null })k
+480 2405( named @T)m 26(ag {})k 480 2117({ @Null })m 240 fnt82 0 1623(The)m
+440(four)s 910(parameters)s 2020(control)s 2764(the)s 3125(format)s
+3833(of)s 4116(running)s 4926(headers)s 5719(and)s 6136(footers)s
+6862(on)s 7171(odd)s 7601(and)s 8017(e)s 6(v)k 3(en)k
+8530(pages)s 0 1335(respecti)m 6(v)k 3(ely)k 15(.)k
+1294(In)s 9(v)k 4(ocations)k 2448(of)s 220 fnt35
+2719 1332(@Runner)m 240 fnt82 3661 1335(,)m 3768(for)s 4106(e)s 3(xample)k
+220 fnt35 480 834(@Runner)m 480 546( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum |1r)k -8(t @I { Chapter 4 } })k
+480 258( @T)m 26(opOdd { @I { Examples } |1r)k -8(t @B @P)k 8(ageNum })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 79 85
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.3.)m 454(P)s 19(a)k 2(g)k 2(e)k
+976(layout)s 240 fnt84 8832 13840(79)m 240 fnt82 0 13205(will)m
+416(be)s 687(embedded)s 1719(in)s 1951(the)s 2289(body)s
+2812(te)s 3(xt)k 3217(of)s 3477(the)s 3815(document,)s
+4855(and,)s 5298(as)s 5537(we)s 5862(will)s 6277(see)s
+6628(in)s 6860(a)s 7016(moment,)s 7896(are)s 8232(accessed)s
+0 12917(by)m 220 fnt35 296 12914(@Runner&&f)m 6(ollo)k 3(wing)k
+240 fnt82 2423 12917(cross)m 2967(references)s 4001(on)s 4301(the)s
+4651(pages.)s 5363(Notice)s 6059(ho)s 6(w)k 6522(the)s
+220 fnt35 6873 12914(@P)m 8(ageNum)k 240 fnt82 8112 12917(parameter)m
+0 12629(of)m 265(each)s 753(parameter)s 1761(allo)s 6(ws)k
+2423(the)s 2764(format)s 3454(of)s 3718(the)s 4059(running)s
+4851(header)s 5541(to)s 5774(be)s 6049(speci\207ed)s 6950(while)s
+7531(lea)s 4(ving)k 8277(the)s 8618(page)s 0 12341(number)m
+791(to)s 1030(be)s 1312(substituted)s 2406(later)s 13(.)k
+480 11967(W)m 19(e)k 843(may)s 1303(no)s 6(w)k
+1758(de\207ne)s 220 fnt35 2393 11964(@OddP)m 8(ageList)k 240 fnt82
+3872 11967(,)m 3973(whose)s 4635(result)s 5219(is)s 5423(a)s
+5583(sequence)s 6510(of)s 6775(pages)s 7365(be)s 3(ginning)k
+8367(with)s 8843(an)s 0 11679(odd-numbered)m 1454(page:)s 220 fnt35
+480 11178(def @OddP)m 8(ageList)k 480 10890( named @Columns {})m 480 10602( r)m -3(ight @P)k 8(ageNum)k
+480 10314({)m 480 10026( def @Ev)m 5(enP)k 8(ageList ...)k 480 9450( @P)m 8(ageMar)k -3(k)k 4(er @P)k 8(ageNum)k
+480 9162( // @Runner&&f)m 6(ollo)k 3(wing @Open {)k 480 8874( @OneP)m 8(age)k
+480 8586( @Columns { @Columns })m 480 8298( @P)m 8(ageT)k 26(op { @T)k 26(opOdd @P)k 8(ageNum })k
+480 8010( @P)m 8(ageF)k 6(oot { @F)k 6(ootOdd @P)k 8(ageNum })k
+480 7722( })m 480 7434( // @Ev)m 5(enP)k 8(ageList)k 480 7146( @Columns { @Columns })m
+480 6858( @Ne)m 6(xt @P)k 8(ageNum)k 480 6570(})m 240 fnt82
+0 6076(Ignoring)m 220 fnt35 887 6073(@Ev)m 5(enP)k 8(ageList)k
+240 fnt82 2516 6076(for)m 2865(the)s 3223(moment,)s 4125(notice)s
+4775(\207rst)s 5217(that)s 5645(the)s 6004(in)s 9(v)k 4(ocation)k
+7068(of)s 220 fnt35 7350 6073(@OneP)m 8(age)k 240 fnt82
+8554 6076(is)m 8775(en)s 8998(-)s 0 5788(closed)m 679(in)s
+220 fnt35 932 5785(@Runner&&f)m 6(ollo)k 3(wing @Open)k 240 fnt82
+3815 5788(.)m 3989(Since)s 220 fnt35 4586 5785(@Runner&&f)m 6(ollo)k 3(wing)k
+240 fnt82 6721 5788(refers)m 7324(to)s 7573(the)s 7931(\207rst)s
+8373(in)s 9(v)k 4(oca)k 8998(-)s 0 5500(tion)m
+421(of)s 220 fnt35 684 5497(@Runner)m 240 fnt82 1678 5500(appearing)m
+2666(after)s 3154(itself)s 3694(in)s 3929(the)s 4269(\207nal)s
+4741(printed)s 5468(document,)s 6511(the)s 6851(symbols)s 220 fnt35
+7692 5497(@T)m 26(opOdd)k 240 fnt82 8722 5500(and)m 220 fnt35
+0 5209(@F)m 6(ootOdd)k 240 fnt82 1127 5212(will)m 1562(tak)s 2(e)k
+2023(their)s 2528(v)s 6(alue)k 3105(from)s 3638(the)s
+3995(\207rst)s 4434(in)s 9(v)k 4(ocation)k 5497(of)s
+220 fnt35 5777 5209(@Runner)m 240 fnt82 6788 5212(follo)m 6(wing)k
+7773(the)s 8130(top)s 8498(of)s 8778(the)s 0 4924(page,)m
+554(e)s 6(v)k 3(en)k 1049(though)s 220 fnt35
+1767 4921(@F)m 6(ootOdd)k 240 fnt82 2880 4924(appears)m 3656(at)s
+3883(the)s 4225(foot)s 4665(of)s 4931(the)s 5274(page.)s
+5884(Their)s 220 fnt35 6456 4921(@P)m 8(ageNum)k 240 fnt82
+7687 4924(parameters)m 8779(are)s 0 4636(replaced)m 867(by)s 220 fnt35
+1161 4633(@P)m 8(ageNum)k 240 fnt82 2337 4636(,)m 2444(the)s
+2792(actual)s 3417(page)s 3925(number)s 4716(parameter)s 5730(of)s
+220 fnt35 6001 4633(@OddP)m 8(ageList)k 240 fnt82 7480 4636(.)m
+480 4262(After)m 1043(producing)s 2067(the)s 2415(odd-numbered)s 3869(page,)s
+220 fnt35 4428 4259(@OddP)m 8(ageList)k 240 fnt82 5967 4262(in)m 9(v)k 4(ok)k 2(es)k
+220 fnt35 6748 4259(@Ev)m 5(enP)k 8(ageList)k 240 fnt82
+8307 4262(:)m 220 fnt35 480 3761(def @Ev)m 5(enP)k 8(ageList)k
+480 3473( named @Columns {})m 480 3185( r)m -3(ight @P)k 8(ageNum)k 480 2897({)m
+480 2609( @P)m 8(ageMar)k -3(k)k 4(er @P)k 8(ageNum)k
+480 2321( // @Runner&&f)m 6(ollo)k 3(wing @Open {)k 480 2033( @OneP)m 8(age)k
+480 1745( @Columns { @Columns })m 480 1457( @P)m 8(ageT)k 26(op { @T)k 26(opEv)k 5(en @P)k 8(ageNum })k
+480 1169( @P)m 8(ageF)k 6(oot { @F)k 6(ootEv)k 5(en @P)k 8(ageNum })k
+480 881( })m 480 593( // @OddP)m 8(ageList)k 480 305( @Columns { @Columns })m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 80 86
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(80)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( @Ne)m 6(xt @P)k 8(ageNum)k
+480 12919(})m 240 fnt82 0 12425(This)m 465(produces)s 1369(an)s
+1641(e)s 6(v)k 3(en-numbered)k 3167(page,)s 3714(then)s
+4172(passes)s 4823(the)s 5160(ball)s 5562(back)s 6063(to)s
+220 fnt35 6291 12422(@OddP)m 8(ageList)k 240 fnt82 7819 12425(\211)m
+7988(a)s 8142(delightful)s 0 12137(e)m 3(xample)k 877(of)s
+1162(what)s 1701(computer)s 2678(scientists)s 3619(call)s 4032(mutual)s
+4765(recursion.)s 5832(The)s 6274(tw)s 2(o)k 6699(page)s
+7221(types)s 7791(dif)s 6(fer)k 8388(only)s 8883(in)s
+0 11849(their)m 497(running)s 1295(headers)s 2076(and)s 2480(footers,)s
+3250(b)s 4(ut)k 3612(other)s 4163(changes)s 4985(could)s
+5575(easily)s 6186(be)s 6468(made.)s 480 11475(It)m 682(w)s 2(as)k
+1099(foreshado)s 6(wed)k 2489(earlier)s 3153(that)s 3568(an)s
+3847(in)s 9(v)k 4(ocation)k 4897(of)s 220 fnt35
+5164 11472(@P)m 8(ageMar)k -3(k)k 4(er)k 240 fnt82
+6630 11475(w)m 2(ould)k 7281(precede)s 8076(each)s 8567(page,)s
+0 11187(and)m 412(this)s 817(has)s 1195(been)s 1713(done.)s
+2351(Although)s 3322(this)s 220 fnt35 3726 11184(@P)m 8(ageMar)k -3(k)k 4(er)k
+240 fnt82 5204 11187(is)m 5422(a)s 5597(component)s 6729(of)s
+7009(the)s 7365(root)s 7819(g)s 1(alle)k 3(y)k 15(,)k
+8499(it)s 8700(will)s 0 10899(not)m 366(cause)s 953(a)s
+1119(page)s 1627(to)s 1866(be)s 2148(printed,)s 2932(because)s
+3745(Basser)s 4442(Lout)s 4954(skips)s 5497(components)s 6705(of)s
+6976(height)s 7634(zero.)s 240 fnt84 0 10106(4.4.)m 471(Chapters)s
+1468(and)s 1909(sections)s 240 fnt82 480 9629(The)m 905(de\207nitions)s
+1962(of)s 2229(chapters)s 3073(and)s 3473(sections)s 4290(from)s
+4811(the)s 5155(DocumentSetup)s 6746(package)s 7583(of)s 7850(V)s 26(ersion)k
+8634(2)s 8804(\(in)s 0 9341(V)m 26(ersion)k 793(3,)s
+1026(the)s 1379(BookSetup)s 2503(e)s 3(xtension)k 3480(of)s
+3756(DocumentSetup\))s 5432(form)s 5961(the)s 6315(subject)s 7058(of)s
+7334(this)s 7736(section.)s 8583(The)s 3(y)k 0 9053(allo)m 6(w)k
+579(a)s 745(chapter)s 1508(to)s 1747(be)s 2029(entered)s
+2790(lik)s 2(e)k 3202(this:)s 220 fnt35 480 8552(@Chapter)m
+480 8264( @Title { ...)m 13( })k 480 7976( @T)m 26(ag { ...)k 13( })k
+480 7688(@Begin)m 480 7400( ...)m 480 7112(@End @Chapter)m 240 fnt82 0 6616(W)m 9(ithin)k
+712(the)s 1060(chapter)s 1823(a)s 1989(sequence)s 2922(of)s
+3193(sections)s 4014(may)s 4480(be)s 4762(included)s 5644(by)s
+5938(writing)s 220 fnt35 480 6115(@BeginSections)m 480 5827(@Section { ...)m 13( })k
+480 5539(...)m 480 5251(@Section { ...)m 13( })k 480 4963(@EndSections)m 240 fnt82
+0 4508(These)m 627(are)s 974(numbered)s 1989(automatically)s 15(,)k
+3381(and)s 3785(an)s 4068(entry)s 4613(is)s 4823(made)s
+5397(for)s 5735(each)s 6230(in)s 6473(a)s 6639(table)s
+7159(of)s 7430(contents.)s 480 4134(The)m 901(user)s 1352(of)s
+1615(the)s 1956(DocumentSetup)s 3544(package)s 4376(can)s 4758(\207nd)s
+5182(the)s 5522(number)s 6306(of)s 6570(the)s 6910(chapter)s
+7666(or)s 7918(section)s 8644(with)s 0 3846(a)m 176(gi)s 6(v)k 3(en)k
+766(tag)s 1121(by)s 1426(writing)s 220 fnt35 2179 3843(@NumberOf tag)m
+240 fnt82 3838 3846(at)m 4081(an)s 3(y)k 4488(point)s
+5050(in)s 5304(the)s 5662(document.)s 6780(This)s 7267(feature)s
+7995(is)s 8215(based)s 8829(on)s 0 3558(the)m 348(follo)s 6(wing)k
+1325(de\207nitions:)s 220 fnt35 480 3057(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 2769(def @NumberMar)m -3(k)k 4(er r)k -3(ight @T)k 26(ag { @Null })k
+480 2193(def @NumberOf r)m -3(ight x)k 480 1905({ @NumberMar)m -3(k)k 4(er&&x @Open { @T)k 26(ag } })k
+240 fnt82 0 1406(Each)m 522(chapter)s 1272(and)s 1663(section)s
+2384(will)s 2797(contain)s 3545(one)s 3934(in)s 9(v)k 4(ocation)k
+4975(of)s 220 fnt35 5233 1403(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 6918 1406(;)m 7017(a)s 7170(full)s 7543(e)s 3(xplanation)k
+8700(will)s 0 1118(be)m 282(gi)s 6(v)k 3(en)k
+862(later)s 13(.)k 480 744(A)m 710(sequence)s 1643(of)s
+1914(places)s 2562(for)s 2900(recei)s 6(ving)k 3836(chapters)s
+4683(is)s 4893(easily)s 5504(de\207ned:)s 220 fnt35 480 243(e)m 6(xpor)k -8(t @T)k 26(ag)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 81 87
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.4.)m 454(Chapter)s 2(s)k 1385(and)s
+1811(sections)s 240 fnt84 8839 13840(81)m 220 fnt35 480 13207(def @ChapterList r)m -3(ight @T)k 26(ag)k
+480 12919({)m 480 12631( @Galle)m 4(y)k 480 12343( //@ChapterGap @ChapterList @Ne)m 6(xt @T)k 26(ag)k
+480 12055(})m 0 11558(@ChapterGap)m 240 fnt82 1505 11561(will)m 1967(usually)s
+2747(be)s 220 fnt35 3065 11558(1.1b)m 240 fnt82 3484 11561(,)m
+3626(ensuring)s 4539(that)s 4992(each)s 5523(chapter)s 6321(be)s 3(gins)k
+7030(on)s 7362(a)s 7564(ne)s 6(w)k 8046(page.)s
+8698(The)s 220 fnt35 0 11270(@Chapter)m 240 fnt82 1063 11273(g)m 1(alle)k 3(y)k
+1697(itself)s 2245(is)s 2455(de\207ned)s 3218(as)s 3468(follo)s 6(ws:)k
+220 fnt35 480 10772(e)m 6(xpor)k -8(t @F)k 6(ootNote @BeginSections @EndSections @Section)k
+480 10484(def @Chapter f)m 6(orce into { @ChapterList&&preceding })k 480 10196( named @T)m 26(ag {})k 480 9908( named @Title {})m
+480 9620( named @RunningTitle { dft })m 480 9332( body @Body)m 480 9044({)m 480 8756( def @F)m 6(ootNote r)k -3(ight x { @ColF)k 6(ootNote x })k
+480 8180( def @BeginSections ...)m 480 7892( def @EndSections ...)m 480 7604( def @Section ...)m 480 7151( def @ChapterTitle)m 480 6863( {)m
+480 6575( @ChapterNumbers @Case {)m 480 6287( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
+480 5999( else @Y)m 4(ield @Title)k 480 5711( })m 480 5423( })m 480 4847( def @ChapterNum)m
+480 4559( {)m 480 4271( @ChapterNumbers @Case {)m 480 3983( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag} })k
+480 3695( else @Y)m 4(ield @Null)k 480 3407( })m 480 3119( })m 480 2627( r)m 2(agged @Break @BookTitleF)k 6(or)k -5(mat @ChapterTitle)k
+480 2339( // @NumberMar)m -3(k)k 4(er {)k 480 2051( @ChapterList&&@T)m 26(ag @Open { @T)k 26(ag })k
+480 1763( })m 480 1475( // @ChapterList&&preceding @T)m 26(agged @T)k 26(ag)k 480 1187( // @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 899( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 611( // { @ChapterTitle } @MajorContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 323( // @Runner)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 82 88
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(82)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( @F)m 6(ootEv)k 5(en { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 12919( @F)m 6(ootOdd { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 12631( // @Body)m 480 12343( //@SectionGap @ChapRefSection)m 480 12055( // @Runner)m 480 11767( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum |1r)k -8(t @I @ChapterNum })k
+480 11479( @T)m 26(opOdd { @I {@RunningTitle @OrElse @Title} |1r)k -8(t @B @P)k 8(ageNum })k 480 11191(})m
+240 fnt82 0 10697(W)m 19(e)k 371(will)s 800(see)s
+1164(the)s 1515(symbols)s 2366(for)s 2707(sections)s 3531(shortly)s 15(.)k
+4347(Notice)s 5042(ho)s 6(w)k 5506(their)s 6006(use)s
+6384(has)s 6756(been)s 7268(restricted)s 8216(to)s 8458(within)s
+0 10409(the)m 348(right)s 859(parameter)s 1873(of)s 220 fnt35
+2144 10406(@Chapter)m 240 fnt82 3147 10409(,)m 3254(by)s 3548(nesting)s
+4292(them)s 4830(and)s 5234(using)s 5806(a)s 5972(body)s
+6506(parameter)s 13(.)k 480 10035(The)m 956(meaning)s 1882(of)s
+220 fnt35 2202 10032(@F)m 6(ootNote)k 240 fnt82 3422 10035(within)m
+220 fnt35 4139 10032(@Chapter)m 240 fnt82 5250 10035(has)m 5669(been)s
+6227(set)s 6601(to)s 220 fnt35 6889 10032(@ColF)m 6(ootNote)k
+240 fnt82 8328 10035(,)m 8484(which)s 0 9747(produces)m 907(a)s
+1064(footnote)s 1908(tar)s 4(geted)k 2722(to)s 220 fnt35
+2953 9744(@ColF)m 6(ootList)k 240 fnt82 4325 9747(\(see)m 4756(Section)s
+5521(4.3\).)s 6056(In)s 6303(other)s 6845(w)s 2(ords,)k
+7526(footnotes)s 8458(within)s 0 9459(chapters)m 851(go)s 1149(at)s
+1386(the)s 1739(foot)s 2189(of)s 2465(the)s 2818(column,)s
+3648(not)s 4019(at)s 4256(the)s 4609(foot)s 5059(of)s
+5335(the)s 5688(page.)s 6309(\(Of)s 6717(course,)s 7453(in)s
+7701(single-column)s 0 9171(books)m 623(this)s 1018(distinction)s 2083(is)s
+2292(insigni\207cant.\))s 220 fnt35 3721 9168(@ChapterTitle)m 240 fnt82 5188 9171(and)m
+220 fnt35 5591 9168(@ChapterNum)m 240 fnt82 7102 9171(are)m 7448(tri)s 6(vial)k
+8065(de\207nitions)s 0 8883(which)m 642(v)s 6(ary)k 1115(depending)s
+2166(on)s 2463(whether)s 3293(the)s 3641(user)s 4099(has)s
+4469(requested)s 5443(numbered)s 6458(chapters)s 7305(or)s 7564(not.)s
+480 8509(Each)m 1014(in)s 9(v)k 4(ocation)k 2066(of)s
+220 fnt35 2336 8506(@Chapter)m 240 fnt82 3397 8509(has)m 3766(its)s
+4040(o)s 6(wn)k 4503(unique)s 220 fnt35 5209 8506(@T)m 26(ag)k
+240 fnt82 5772 8509(,)m 5878(either)s 6479(supplied)s 7347(by)s
+7639(the)s 7986(user)s 8442(or)s 8699(else)s 0 8221(inserted)m
+835(automatically)s 2210(by)s 2525(Lout.)s 3162(W)s 19(e)k
+3553(no)s 6(w)k 4035(trace)s 4575(the)s 4944(cross)s
+5507(referencing)s 6669(of)s 6961(chapter)s 7745(numbers)s 8641(on)s
+8960(a)s 0 7933(h)m 1(ypothetical)k 1236(third)s 1745(chapter)s
+2508(whose)s 3176(tag)s 3521(is)s 220 fnt35 3731 7930(euclid)m
+240 fnt82 4291 7933(.)m 220 fnt35 480 7556(@ChapterList&&preceding @T)m 26(agged euclid)k
+240 fnt82 4758 7559(attaches)m 220 fnt35 5574 7556(euclid)m 240 fnt82
+6190 7559(as)m 6436(an)s 6715(e)s 3(xtra)k 7245(tag)s
+7586(to)s 7821(the)s 8165(\207rst)s 8592(in)s 9(v)k 4(o)k
+8998(-)s 0 7271(cation)m 653(of)s 220 fnt35 937 7268(@ChapterList)m
+240 fnt82 2350 7271(preceding)m 3359(itself)s 3920(in)s 4176(the)s
+4536(\207nal)s 5029(printed)s 5777(document.)s 6898(But)s 7317(this)s
+220 fnt35 7726 7268(@ChapterList)m 240 fnt82 0 6983(must)m 525(be)s
+807(the)s 1155(tar)s 4(get)k 1754(of)s 2025(the)s
+2373(chapter)s 9(,)k 3174(and)s 3578(so)s 220 fnt35
+480 6482(@ChapterList&&euclid @Open { @T)m 26(ag })k 240 fnt82 0 5983(is)m 200(3,)s
+416(the)s 754(number)s 1534(of)s 1795(the)s 2132(chapter)s
+2885(\()s 220 fnt35 2958 5980(@T)m 26(ag)k 240 fnt82
+3570 5983(refers)m 4153(to)s 4381(the)s 4719(parameter)s 5722(of)s
+220 fnt35 5983 5980(@ChapterList)m 240 fnt82 7323 5983(,)m 7419(not)s
+7775(the)s 8112(parameter)s 0 5695(of)m 220 fnt35 272 5692(@Chapter)m
+240 fnt82 1275 5695(\).)m 1520(Consequently)s 2892(the)s 3242(in)s 9(v)k 4(ocation)k
+4297(of)s 220 fnt35 4570 5692(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 6317 5695(within)m 6986(the)s 7336(chapter)s 8100(is)s
+8312(equal)s 8887(to)s 220 fnt35 0 5404(@NumberMar)m -3(k)k 4(er 3)k
+240 fnt82 1861 5407(.)m 220 fnt35 480 5030(@NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged euclid)k
+240 fnt82 5137 5033(attaches)m 220 fnt35 5992 5030(euclid)m 240 fnt82
+6646 5033(to)m 220 fnt35 6920 5030(@NumberMar)m -3(k)k 4(er 3)k
+240 fnt82 8876 5033(as)m 0 4745(an)m 283(e)s 3(xtra)k
+817(tag,)s 1216(and)s 1620(so)s 220 fnt35 1886 4742(@NumberOf euclid)m
+240 fnt82 3742 4745(,)m 3849(which)s 4491(e)s 3(xpands)k
+5324(to)s 220 fnt35 480 4244(@NumberMar)m -3(k)k 4(er&&euclid @Open { @T)k 26(ag })k
+240 fnt82 0 3745(must)m 538(be)s 833(equal)s 1419(to)s
+1671(3,)s 1911(as)s 2175(required.)s 3148(This)s 3637(scheme)s
+4423(could)s 5026(be)s 5322(simpli\207ed)s 6349(by)s 6656(placing)s
+7426(the)s 7787(in)s 9(v)k 4(ocation)k 8855(of)s
+220 fnt35 0 3454(@NumberMar)m -3(k)k 4(er)k 240 fnt82
+1758 3457(within)m 220 fnt35 2440 3454(@ChapterList)m 240 fnt82 3854 3457(rather)m
+4484(than)s 4966(within)s 220 fnt35 5648 3454(@Chapter)m 240 fnt82
+6651 3457(,)m 6772(b)s 4(ut)k 7148(it)s 7353(turns)s
+7896(out)s 8276(that)s 8708(that)s 0 3169(scheme)m 773(does)s
+1263(not)s 1629(generalize)s 2666(well)s 3132(to)s 3371(sections)s
+4192(and)s 4596(subsections.)s 480 2795(There)m 1124(is)s 1365(a)s
+1562(trap)s 2017(for)s 2386(the)s 2765(unw)s 2(ary)k
+3566(in)s 3840(the)s 4219(use)s 4625(of)s 220 fnt35
+4927 2792(preceding)m 240 fnt82 5969 2795(and)m 220 fnt35 6404 2792(f)m 6(ollo)k 3(wing)k
+240 fnt82 7234 2795(.)m 7429(Suppose)s 8328(that)s 8778(the)s
+0 2507(in)m 9(v)k 4(ocation)k 1054(of)s 220 fnt35
+1325 2504(@NumberMar)m -3(k)k 4(er)k 240 fnt82 3070 2507(within)m
+220 fnt35 3738 2504(@Chapter)m 240 fnt82 4801 2507(is)m 5011(replaced)s
+5878(by)s 6172(the)s 6520(seemingly)s 7557(equi)s 6(v)k 6(alent)k
+220 fnt35 480 2006(@NumberMar)m -3(k)k 4(er { @ChapterList&&preceding @Open { @T)k 26(ag } })k
+240 fnt82 0 1507(No)m 6(w)k 514(suppose)s 1342(that)s
+220 fnt35 1760 1504(@NumberOf euclid)m 240 fnt82 3676 1507(appears)m 4457(some)s 6(where)k
+5596(within)s 6264(Chapter)s 7081(7.)s 7365(It)s 7570(will)s
+7996(e)s 3(xpand)k 8743(to)s 220 fnt35 480 1006(@NumberMar)m -3(k)k 4(er&&euclid @Open { @T)k 26(ag })k
+240 fnt82 0 507(which)m 642(w)s 2(ould)k 1297(no)s 6(w)k
+1758(be)s 2040(equal)s 2613(to)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 83 89
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.4.)m 454(Chapter)s 2(s)k 1385(and)s
+1811(sections)s 240 fnt84 8833 13840(83)m 220 fnt35 480 13207(@ChapterList&&preceding @Open { @T)m 26(ag })k
+240 fnt82 0 12708(whose)m 663(v)s 6(alue,)k 1276(e)s 6(v)k 6(aluated)k
+2233(as)s 2477(it)s 2663(is)s 2868(within)s 3530(Chapter)s
+4342(7,)s 4563(is)s 4767(7,)s 4989(not)s 5349(3.)s
+5628(Use)s 6050(of)s 220 fnt35 6315 12705(preceding)m 240 fnt82
+7321 12708(or)m 220 fnt35 7574 12705(f)m 6(ollo)k 3(wing)k
+240 fnt82 8458 12708(within)m 0 12420(the)m 348(parameter)s 1362(of)s
+1633(a)s 1799(symbol,)s 2611(rather)s 3227(than)s 3696(within)s
+4364(the)s 4712(body)s 15(,)k 5284(is)s 5494(lik)s 2(ely)k
+6090(to)s 6329(be)s 6611(erroneous.)s 480 12046(Much)m 1112(of)s
+1400(the)s 1765(remainder)s 2810(of)s 3098(the)s 3463(de\207nition)s
+4454(of)s 220 fnt35 4742 12043(@Chapter)m 240 fnt82 5822 12046(is)m
+6049(f)s 2(airly)k 6634(self-e)s 3(xplanatory:)k 8366(there)s
+8916(is)s 0 11758(a)m 180(heading,)s 1060(a)s 1241(tag)s
+1601(sent)s 2060(to)s 2314(mark)s 2881(the)s 3244(page)s
+3766(on)s 4078(which)s 4735(the)s 5098(chapter)s 5875(be)s 3(gins,)k
+6619(a)s 220 fnt35 6800 11755(@ContentsEntr)m -6(y)k 240 fnt82
+8492 11758(g)m 1(alle)k 3(y)k 0 11470(sent)m 484(to)s
+762(the)s 1149(table)s 1708(of)s 2018(contents,)s 2961(g)s 1(alle)k 3(ys)k
+3724(for)s 4101(the)s 4489(\207gures)s 5230(and)s 5673(tables)s
+6320(of)s 6630(the)s 7017(chapter)s 7819(to)s 8097(collect)s
+8833(in,)s 220 fnt35 0 11179(@Body)m 240 fnt82 781 11182(where)m
+1421(the)s 1769(body)s 2303(of)s 2574(the)s 2922(chapter)s
+3685(goes,)s 4230(and)s 220 fnt35 4634 11179(@ChapRefSection)m 240 fnt82
+6499 11182(to)m 6738(hold)s 7222(a)s 7388(concluding)s 8505(list)s
+8855(of)s 0 10894(references.)m 1144(This)s 1620(lea)s 4(v)k 3(es)k
+2261(only)s 2741(the)s 3089(tw)s 2(o)k 3499(in)s 9(v)k 4(ocations)k
+4640(of)s 220 fnt35 4911 10891(@Runner)m 240 fnt82 5913 10894(to)m
+6152(e)s 3(xplain.)k 480 10520(The)m 977(\207rst)s 220 fnt35
+1478 10517(@Runner)m 240 fnt82 2550 10520(is)m 2830(just)s 3305(belo)s 6(w)k
+4008(the)s 4426(heading.)s 5418(It)s 5693(will)s 6189(be)s
+6541(the)s 6959(tar)s 4(get)k 7628(of)s 7969(the)s
+220 fnt35 8387 10517(@Run)m 240 fnt82 8998 10520(-)m 220 fnt35
+0 10229(ner&&f)m 6(ollo)k 3(wing)k 240 fnt82 1494 10232(cross)m
+2030(reference)s 2967(at)s 3194(the)s 3536(be)s 3(ginning)k
+4538(of)s 4803(the)s 5146(\207rst)s 5571(page)s 6073(of)s
+6338(the)s 6681(chapter)s 7438(\(see)s 7872(Section)s 8640(4.3\),)s
+0 9944(which)m 642(consequently)s 1959(will)s 2385(ha)s 4(v)k 3(e)k
+2886(null)s 3313(running)s 4111(headers)s 4892(and)s 5296(the)s
+5644(gi)s 6(v)k 3(en)k 6224(footers.)s 480 9570(The)m
+954(second)s 220 fnt35 1724 9567(@Runner)m 240 fnt82 2772 9570(appears)m
+3600(at)s 3878(the)s 4273(v)s 3(ery)k 4795(end)s
+5246(of)s 5563(the)s 5958(chapter)s 9(,)k 6805(hence)s
+7466(on)s 7809(its)s 8132(last)s 8570(page.)s 0 9282(Since)m
+595(no)s 896(in)s 9(v)k 4(ocations)k 2046(of)s
+220 fnt35 2325 9279(@Runner)m 240 fnt82 3335 9282(lie)m 3638(between)s
+4500(it)s 4700(and)s 5113(the)s 5469(\207rst)s 220 fnt35
+5908 9279(@Runner)m 240 fnt82 6850 9282(,)m 6966(it)s 7166(will)s
+7600(be)s 7891(the)s 8247(tar)s 4(get)k 8855(of)s
+220 fnt35 0 8991(@Runner&&f)m 6(ollo)k 3(wing)k 240 fnt82
+2134 8994(on)m 2442(e)s 6(v)k 3(ery)k 3029(page)s
+3547(from)s 4082(the)s 4441(second)s 5175(page)s 5693(of)s
+5975(the)s 6334(chapter)s 7107(to)s 7357(the)s 7716(last,)s
+8165(inclusi)s 6(v)k 3(e,)k 0 8706(and)m 404(will)s
+830(supply)s 1523(the)s 1871(format)s 2567(of)s 2838(their)s
+3335(headers)s 4116(and)s 4520(footers.)s 480 8332(The)m 908(interested)s
+1893(reader)s 2549(might)s 3166(care)s 3618(to)s 3857(predict)s
+4579(the)s 4927(outcome)s 5806(in)s 6048(unusual)s 6848(cases,)s
+7458(such)s 7954(as)s 8203(when)s 8778(the)s 0 8044(heading)m
+811(occupies)s 1699(tw)s 2(o)k 2109(pages,)s 2761(or)s
+3020(when)s 3596(a)s 3762(chapter)s 4524(occupies)s 5412(only)s
+5892(one,)s 6345(or)s 6604(\(assuming)s 7640(a)s 7806(change)s
+8540(to)s 8778(the)s 0 7756(g)m 1(ap)k 386(between)s
+1227(chapters\))s 2138(when)s 2702(a)s 2855(chapter)s 3605(starts)s
+4146(halfw)s 2(ay)k 4956(do)s 6(wn)k 5527(a)s
+5680(page.)s 6283(Such)s 6807(predictions)s 7907(can)s 8283(be)s
+8552(made)s 0 7468(with)m 482(great)s 1019(con\207dence.)s 480 7094(The)m
+903(e)s 3(xpression)k 220 fnt35 1975 7091(@RunningTitle @OrElse @Title)m 240 fnt82
+5125 7094(appearing)m 6116(in)s 6354(the)s 6697(second)s 220 fnt35
+7415 7091(@Runner)m 240 fnt82 8412 7094(returns)m 0 6806(the)m 354(v)s 6(alue)k
+928(of)s 1205(the)s 220 fnt35 1560 6803(@RunningTitle)m 240 fnt82
+3070 6806(parameter)m 4090(of)s 220 fnt35 4368 6803(@Chapter)m 240 fnt82
+5437 6806(if)m 5660(this)s 6063(is)s 6279(not)s 6651(equal)s
+7231(to)s 7476(the)s 7830(def)s 2(ault)k 8558(v)s 6(alue)k
+220 fnt35 0 6515(dft)m 240 fnt82 240 6518(,)m 347(or)s
+220 fnt35 606 6515(@Title)m 240 fnt82 1294 6518(otherwise:)m 220 fnt35
+480 6036(def @OrElse)m 480 5748( left x)m 480 5460( r)m -3(ight y)k 480 5172({)m
+480 4884( x @Case {)m 480 4596( dft @Y)m 4(ield y)k 480 4308( else @Y)m 4(ield x)k
+480 4020( })m 480 3732(})m 240 fnt82 0 3238(This)m 476(produces)s
+1391(the)s 1739(ef)s 6(fect)k 2335(of)s 220 fnt35
+480 2737(named @RunningTitle { @Title })m 240 fnt82 0 2238(which)m 676(unfortunately)s 2052(is)s
+2296(not)s 2696(permissible)s 3887(as)s 4171(it)s 4397(stands,)s
+5136(because)s 220 fnt35 5983 2235(@Title)m 240 fnt82 6705 2238(is)m
+6949(not)s 7349(visible)s 8076(within)s 8778(the)s 0 1950(def)m 2(ault)k
+721(v)s 6(alue)k 1289(of)s 220 fnt35 1560 1947(@RunningTitle)m
+240 fnt82 3004 1950(.)m 480 1576(Finally)m 15(,)k 1249(the)s
+1597(de\207nitions)s 2658(for)s 2996(sections)s 3817(omitted)s 4605(earlier)s
+5273(are)s 5620(as)s 5870(follo)s 6(ws:)k 220 fnt35
+480 1075(def @EndSectionsPlace { @Galle)m 4(y })k 480 787(def @EndSections f)m 6(orce into { @EndSectionsPlace&&preceding } {})k 480 499(macro @BeginSections { //@SectionGap @SectionList 1 // @EndSectionsPlace // })m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 84 90
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(84)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207(def @Section f)m 6(orce into { @SectionList&&preceding })k 480 12919( named @T)m 26(ag {})k
+480 12631( named @Title {})m 480 12343( named @RunningTitle { dft })m 480 12055( body @Body)m 480 11767({)m 480 11479( def @SectionTitle)m
+480 11191( {)m 480 10903( @SectionNumbers @Case {)m 480 10615( {Y)m 30(es y)k 4(es} @Y)k 4(ield { {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
+480 10327( else @Y)m 4(ield @Title)k 480 10039( })m 480 9751( })m 480 9175( @Heading @Protect @SectionTitle)m
+480 8887( // @NumberMar)m -3(k)k 4(er {)k 480 8599( {@ChapterList&&@T)m 26(ag @Open { @T)k 26(ag }}.{)k
+480 8311( @SectionList&&@T)m 26(ag @Open { @T)k 26(ag }})k 480 8023( })m 480 7735( // @ChapterList&&preceding @T)m 26(agged @T)k 26(ag)k
+480 7447( // @SectionList&&preceding @T)m 26(agged @T)k 26(ag)k 480 7159( // @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 6871( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 6583( // { &3f @SectionTitle } @ContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 6295( //0io @Body)m
+480 6007(})m 240 fnt82 0 5513(The)m 220 fnt35 409 5510(@BeginSections)m
+240 fnt82 2066 5513(macro)m 2696(in)s 9(v)k 4(ok)k 2(es)k
+220 fnt35 3457 5510(@SectionList)m 240 fnt82 4748 5513(,)m 4835(preceded)s
+5736(by)s 6010(the)s 6338(appropriate)s 7462(g)s 1(ap)k
+7840(and)s 8224(follo)s 6(wed)k 0 5225(by)m 284(an)s
+220 fnt35 556 5222(@EndSectsPlace)m 240 fnt82 2307 5225(for)m 2635(closing)s
+3368(the)s 3705(list)s 4045(of)s 4306(sections)s 5116(when)s
+5681(the)s 220 fnt35 6019 5222(@EndSections)m 240 fnt82 7515 5225(symbol)m
+8264(is)s 8463(found.)s 220 fnt35 0 4934(@Section)m 240 fnt82
+997 4937(itself)m 1542(is)s 1749(just)s 2151(a)s 2314(cop)s 2(y)k
+2829(of)s 220 fnt35 3097 4934(@Chapter)m 240 fnt82 4156 4937(with)m
+4635(slight)s 5223(changes)s 6042(to)s 6278(the)s 6623(format.)s
+7420(The)s 7845(parameter)s 8855(of)s 220 fnt35 0 4646(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 1752 4649(is)m 1970(a)s 2143(simple)s 2844(generalization)s
+4262(of)s 4540(the)s 4896(one)s 5305(within)s 220 fnt35
+5981 4646(@Chapter)m 240 fnt82 6984 4649(.)m 7156(Notice)s 7856(that)s
+8282(we)s 8625(ha)s 4(v)k 3(e)k 0 4361(tak)m 2(en)k
+573(care)s 1026(that)s 1444(the)s 1792(v)s 6(alue)k
+2360(of)s 2631(this)s 3027(parameter)s 4041(be)s 4323(a)s
+4489(juxtaposition)s 5795(of)s 6066(simple)s 6759(w)s 2(ords:)k
+7508(although)s 220 fnt35 480 3860({@ChapterList&&@T)m 26(ag @Open { @T)k 26(ag }}.)k 13( &)k
+480 3572({@SectionList&&@T)m 26(ag @Open { @T)k 26(ag }})k 240 fnt82 0 3073(is)m
+210(formally)s 1086(equi)s 6(v)k 6(alent,)k 220 fnt35
+2177 3070(&)m 240 fnt82 2379 3073(w)m 2(as)k 2800(not)s
+3166(permitted)s 4139(within)s 4807(a)s 220 fnt35 4973 3070(@T)m 26(ag)k
+240 fnt82 5596 3073(parameter)m 6610(until)s 7103(recently)s 15(.)k
+480 2699(The)m 930(DocumentSetup)s 2548(package)s 3411(also)s 3872(contains)s
+4743(de\207nitions)s 5826(for)s 6187(subsections)s 7364(in)s 7630(the)s
+8001(same)s 8571(style.)s 0 2411(The)m 3(y)k 564(raise)s
+1091(the)s 1461(question)s 2350(of)s 2643(whether)s 3494(Lout)s
+4028(is)s 4259(capable)s 5066(of)s 5359(producing)s 6404(subsections)s
+7580(should)s 8298(the)s 8668(user)s 0 2123(place)m 220 fnt35
+542 2120(@BeginSections)m 240 fnt82 2159 2123(,)m 220 fnt35 2248 2120(@Section)m
+240 fnt82 3188 2123(,)m 3276(and)s 220 fnt35 3662 2120(@EndSections)m
+240 fnt82 5151 2123(within)m 5800(a)s 240 fnt83 5948 2125(section)m
+240 fnt82 6619 2123(,)m 6708(and)s 7093(whether)s 7905(such)s
+8382(nesting)s 0 1835(could)m 592(proceed)s 1409(to)s 1650(arbitrary)s
+2527(depth.)s 3225(Arbitrary)s 4169(nesting)s 4915(of)s 5188(sections)s
+6011(within)s 6681(sections)s 7504(is)s 7716(a)s 4(v)k 6(ailable)k
+8627(no)s 6(w)k 15(,)k 0 1547(although)m 883(the)s
+1218(numbering)s 2295(w)s 2(ould)k 2937(of)s 3195(course)s
+3862(be)s 4131(wrong.)s 4894(The)s 5309(author)s 5967(has)s
+6324(w)s 2(ork)k 2(ed)k 7083(out)s 7436(de\207nitions)s
+8484(which)s 0 1259(pro)m 3(vide)k 773(correct)s 1484(numbering)s
+2563(to)s 2790(arbitrary)s 3654(depth,)s 4282(with)s 4752(an)s
+5024(arbitrary)s 5888(format)s 6573(for)s 6899(each)s 7383(le)s 6(v)k 3(el.)k
+7991(These)s 8606(were)s 0 971(not)m 376(incorporated)s 1652(into)s
+2087(DocumentSetup)s 3693(because)s 4516(the)s 4874(author)s 5555(considers)s
+6520(sub-)s 6921(subsections)s 8085(to)s 8334(be)s 8627(poor)s
+0 683(style,)m 558(and)s 962(he)s 1244(prefers)s 1957(separate)s
+2795(names)s 3457(for)s 3795(the)s 4143(symbols)s 4992(at)s
+5224(each)s 5719(le)s 6(v)k 3(el.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 85 91
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8833 13840(85)m 0 13203(4.5.)m 471(Bibliographies)s 240 fnt82
+533 12726(The)m 953(\207rst)s 1376(step)s 1806(in)s 2041(the)s
+2382(production)s 3468(of)s 3731(a)s 3889(bibliograph)s 1(y)k
+5157(is)s 5359(to)s 5591(create)s 6208(a)s 6366(database)s
+7237(of)s 7500(references)s 8523(based)s 0 12438(on)m 297(the)s
+645(de\207nition)s 220 fnt35 480 11987(e)m 6(xpor)k -8(t @T)k 26(ype @A)k 6(uthor @Title @Institution @Number @Pub)k 4(lisher)k
+480 11699( @Y)m 30(ear @Proceedings @Jour)k -5(nal @V)k 17(olume @P)k 8(ages @Comment)k
+480 11123(def @Ref)m 6(erence)k 480 10835( named @T)m 26(ag)k 3270({ )s 11(T)k 26(A)k 6(G? })k
+480 10547( named @T)m 26(ype)k 3270({ )s 11(TYPE? })k 480 10259( named @A)m 6(uthor)k
+3270({ A)s 11(UTHOR? })k 480 9971( named @Title)m 3270({ )s 11(TITLE? })k
+480 9683( named @Institution)m 3270({ INSTITUTION? })s 480 9395( named @Number)m 3270({ NUMBER? })s 480 9107( named @Pub)m 4(lisher)k
+3270({ PUBLISHER? })s 480 8819( named @Y)m 30(ear)k 3270({ )s 19(YEAR? })k
+480 8531( named @Proceedings)m 3270({ PR)s 4(OCEEDINGS? })k 480 8243( named @Jour)m -5(nal)k
+3270({ JOURNAL? })s 480 7955( named @V)m 17(olume)k 3270({ )s 11(V)k 8(OLUME? })k
+480 7667( named @P)m 8(ages)k 3270({ P)s 26(A)k 6(GES? })k
+480 7379( named @Comment)m 3270({ @Null })s 480 7091({ @Null })m 240 fnt82 0 6597(F)m 3(or)k
+389(e)s 3(xample,)k 1303(the)s 1651(database)s 2530(might)s
+3148(contain)s 220 fnt35 480 6096({ @Ref)m 6(erence)k 480 5808( @T)m 26(ag { str)k -3(unk1979style })k
+480 5520( @T)m 26(ype { Book })k 480 5232( @A)m 6(uthor { Str)k -3(unk, )k 8(William and )k 8(White)k 3(, E.)k 13( B)k 4(.)k 13( })k
+480 4944( @Title { )m 11(The Elements of Style })k 480 4656( @Pub)m 4(lisher { MacMillan, third edition })k 480 4368( @Y)m 30(ear { 1979 })k
+480 4080(})m 480 3588({ @Ref)m 6(erence)k 480 3300( @T)m 26(ag { kingston92 })k
+480 3012( @T)m 26(ype { )k 11(T)k 26(echRepor)k -8(t })k
+480 2724( @A)m 6(uthor { Kingston, Jeffre)k 4(y H.)k 13( })k 480 2436( @Title { Document F)m 6(or)k -5(matting with Lout \(Second Edition\) })k
+480 2148( @Number { 449 })m 480 1860( @Institution { Basser Depar)m -8(tment of Computer)k 480 1572(Science F09, Univ)m 5(ersity of Sydne)k 4(y 2006, A)k 6(ustr)k 2(alia })k
+480 1284( @Y)m 30(ear { 1992 })k 480 996(})m 240 fnt82 0 502(Since)m
+596(named)s 1301(parameters)s 2408(are)s 2764(optional,)s 3664(we)s
+4008(ha)s 4(v)k 3(e)k 4519(one)s 4930(for)s
+5277(e)s 6(v)k 3(ery)k 5862(concei)s 6(v)k 6(able)k
+7057(type)s 7534(of)s 7814(attrib)s 4(ute,)k 8722(and)s
+0 214(simply)m 702(lea)s 4(v)k 3(e)k 1252(out)s
+1614(those)s 2172(that)s 2586(do)s 2876(not)s 3238(apply)s
+3821(in)s 4060(an)s 3(y)k 4454(particular)s 5424(reference.)s
+6472(W)s 19(e)k 6837(can)s 7223(print)s 7730(a)s
+7893(reference)s 8832(by)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 86 92
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(86)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(using)m 572(the)s 220 fnt35
+920 13202(@Open)m 240 fnt82 1726 13205(symbol)m 2486(to)s 2725(get)s
+3077(at)s 3309(its)s 3585(attrib)s 4(utes:)k 220 fnt35
+480 12704(@Ref)m 6(erence&&str)k -3(unk1979style @Open)k 480 12416({ @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( @Pub)k 4(lisher)k 11(, @Y)k 30(ear)k 11(.)k 13( })k
+240 fnt82 0 11920(The)m 428(right)s 939(parameter)s 1953(of)s
+220 fnt35 2224 11917(@Open)m 240 fnt82 3030 11920(may)m 3496(use)s
+3871(the)s 4219(e)s 3(xported)k 5111(parameters)s 6209(of)s
+6480(the)s 6828(left,)s 7252(and)s 7656(so)s 7922(the)s
+8270(result)s 8860(is)s 480 11415(W)m 9(illiam)k 1313(Strunk)s
+2012(and)s 2416(E.)s 2666(B.)s 2930(White,)s 240 fnt83
+3681 11417(The)m 4093(Elements)s 5024(of)s 5305(Style)s 240 fnt82
+5762 11415(.)m 5926(Macmillan,)s 7068(1979.)s 0 10916(Incidentally)m 15(,)k
+1235(we)s 1573(are)s 1923(not)s 2292(limited)s 3029(to)s
+3271(just)s 3679(one)s 4084(database)s 4966(of)s 5240(references;)s
+6335(se)s 6(v)k 3(eral)k 220 fnt35 7060 10913(@Database)m
+240 fnt82 8277 10916(symbols)m 0 10628(can)m 380(nominate)s 1317(the)s
+1656(same)s 2193(symbol,)s 2996(and)s 3391(in)s 9(v)k 4(ocations)k
+4523(of)s 4784(that)s 5193(symbol)s 5944(can)s 6324(appear)s
+7011(in)s 7245(the)s 7584(document)s 8578(itself)s 0 10340(as)m
+250(well)s 716(if)s 933(we)s 1268(wish.)s 480 9966(The)m
+930(second)s 1675(step)s 2135(is)s 2368(to)s 2629(create)s
+3276(a)s 3464(database)s 4366(of)s 4659(print)s 5192(styles)s
+5809(for)s 6170(the)s 6540(v)s 6(arious)k 7311(types)s
+7889(of)s 8183(reference)s 0 9678(\(Book,)m 706(T)s 16(echReport,)k
+1926(etc.\),)s 2450(based)s 3053(on)s 3350(the)s 3698(follo)s 6(wing)k
+4675(de\207nition:)s 220 fnt35 480 9177(e)m 6(xpor)k -8(t @Style)k
+480 8889(def @RefStyle)m 480 8601( left @T)m 26(ag)k 480 8313( named @Style r)m -3(ight reftag {})k
+480 8025({})m 240 fnt82 0 7531(Notice)m 682(that)s 1089(the)s
+1426(named)s 2111(parameter)s 220 fnt35 3114 7528(@Style)m 240 fnt82
+3865 7531(has)m 4224(a)s 4379(right)s 4879(parameter)s 220 fnt35
+5882 7528(reftag)m 240 fnt82 6431 7531(.)m 6584(The)s 7001(style)s
+7497(database)s 8365(has)s 8724(one)s 0 7243(entry)m 545(for)s
+883(each)s 1378(type)s 1846(of)s 2117(reference:)s 220 fnt35
+480 6742({ Book @RefStyle @Style)m 480 6454( { @Ref)m 6(erence&&reftag @Open)k 480 6166( { @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( @Pub)k 4(lisher)k 11(, @Y)k 30(ear)k 11(.)k 13( @Comment })k
+480 5878( })m 480 5590(})m 480 5014({ )m 11(T)k 26(echRepor)k -8(t @RefStyle @Style)k
+480 4726( { @Ref)m 6(erence&&reftag @Open)k 480 4438( { @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( )k 11(T)k 26(ech.)k 13( Rep)k 7(.)k 13( @Number \(@Y)k 30(ear\),)k
+480 4150(@Institution.)m 13( @Comment })k 480 3862( })m 480 3574(})m 240 fnt82
+0 3080(and)m 404(so)s 670(on.)s 1074(The)s 1502(follo)s 6(wing)k
+2479(prints)s 3074(the)s 3422(reference)s 4365(whose)s 5033(tag)s
+5378(is)s 220 fnt35 5588 3077(str)m -3(unk1979style)k 240 fnt82
+7180 3080(in)m 7423(the)s 7771(Book)s 8352(style:)s 220 fnt35
+480 2579(@RefStyle&&Book @Open { @Style str)m -3(unk1979style })k 240 fnt82 0 2081(It)m 205(has)s
+575(result)s 480 1626(W)m 9(illiam)k 1313(Strunk)s 2012(and)s
+2416(E.)s 2666(B.)s 2930(White.)s 240 fnt83 3678 1628(The)m
+4090(Elements)s 5021(of)s 5302(Style)s 240 fnt82 5759 1626(.)m
+5923(Macmillan)s 6955(.)s 7119(Third)s 7708(Edition)s 8409(,)s
+8516(1979)s 8987(.)s 0 1127(Notice)m 696(ho)s 6(w)k
+1160(the)s 220 fnt35 1512 1124(@Style)m 240 fnt82 2277 1127(parameter)m
+3295(of)s 220 fnt35 3569 1124(@RefStyle)m 240 fnt82 4675 1127(is)m
+4889(gi)s 6(v)k 3(en)k 5472(the)s 5824(parameter)s
+220 fnt35 6841 1124(str)m -3(unk1979style)k 240 fnt82 8373 1127(,)m
+8484(which)s 0 839(it)m 192(uses)s 655(to)s 894(open)s
+1417(the)s 1765(appropriate)s 2909(reference.)s 480 465(W)m 19(e)k
+858(can)s 1256(consult)s 2017(the)s 220 fnt35 2374 462(@T)m 26(ype)k
+240 fnt82 3121 465(attrib)m 4(ute)k 3977(of)s 4258(a)s
+4433(reference)s 5386(to)s 5634(\207nd)s 6075(out)s 6450(its)s
+6736(style,)s 7303(which)s 7955(brings)s 8613(us)s 8887(to)s
+0 177(the)m 348(follo)s 6(wing)k 1325(de\207nition)s 2299(for)s
+2637(printing)s 3447(out)s 3813(a)s 3979(reference)s 4922(in)s
+5165(the)s 5513(style)s 6020(appropriate)s 7164(to)s 7403(it:)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 87 93
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8831 13840(87)m 220 fnt35 480 13207(def @RefPr)m -3(int)k
+480 12919( r)m -3(ight reftag)k 480 12631({ @RefStyle&&{ @Ref)m 6(erence&&reftag @Open { @T)k 26(ype } })k
+480 12343( @Open { @Style reftag })m 480 12055(})m 240 fnt82 0 11561(F)m 3(or)k
+389(e)s 3(xample,)k 1303(to)s 1542(e)s 6(v)k 6(aluate)k
+220 fnt35 2382 11558(@RefPr)m -3(int str)k -3(unk1979style)k 240 fnt82
+4992 11561(,)m 5099(Lout)s 5611(\207rst)s 6042(e)s 6(v)k 6(aluates)k
+220 fnt35 480 11060(@Ref)m 6(erence&&str)k -3(unk1979style @Open { @T)k 26(ype })k
+240 fnt82 0 10562(whose)m 668(result)s 1258(is)s 220 fnt35
+1468 10559(Book)m 240 fnt82 1968 10562(,)m 2075(and)s 2479(then)s
+2948(e)s 6(v)k 6(aluates)k 220 fnt35 480 10080(@RefStyle&&Book @Open { @Style str)m -3(unk1979style })k
+240 fnt82 0 9582(as)m 266(before.)s 1056(Complicated)s 2353(as)s
+2619(this)s 3032(is,)s 3314(with)s 3813(its)s 4105(tw)s 2(o)k
+4531(databases)s 5515(and)s 5935(cle)s 6(v)k 3(er)k
+6586(passing)s 7373(about)s 7982(of)s 8269(tags,)s 8778(the)s
+0 9294(adv)m 6(antages)k 1098(of)s 1359(separating)s 2384(references)s
+3405(from)s 3919(printing)s 4718(styles)s 5303(are)s 5640(considerable:)s
+7004(printing)s 7804(styles)s 8389(may)s 8844(be)s 0 9006(changed)m
+856(easily)s 15(,)k 1505(and)s 1909(non-e)s 3(xpert)k
+3002(users)s 3544(need)s 4054(ne)s 6(v)k 3(er)k
+4636(see)s 4997(them.)s 480 8632(Finally)m 15(,)k 1243(we)s
+1571(come)s 2138(to)s 2370(the)s 2711(problem)s 3561(of)s
+3825(printing)s 4628(out)s 4987(a)s 5146(numbered)s 6154(list)s
+6498(of)s 6762(references,)s 7842(and)s 8239(referring)s 0 8344(to)m
+251(them)s 802(by)s 1108(number)s 1912(in)s 2167(the)s
+2528(body)s 3074(of)s 3358(the)s 3718(document.)s 4839(The)s
+5279(\207rst)s 5723(step)s 6173(is)s 6396(to)s 6647(create)s
+7285(a)s 7463(numbered)s 8491(list)s 8855(of)s 0 8056(places)m
+648(that)s 1066(g)s 1(alle)k 3(ys)k 1790(containing)s
+2853(references)s 3884(may)s 4350(attach)s 4977(to:)s 220 fnt35
+480 7555(def @Ref)m 6(erenceSection)k 480 7267( named @T)m 26(ag {})k 480 6979( named @Title { Ref)m 6(erences })k
+480 6691( named @RunningTitle { dft })m 480 6403( named style r)m -3(ight tag { tag.)k 13( })k 480 6115( named headstyle r)m -3(ight @Title { @Heading @Title })k
+480 5827( named indent { @DispIndent })m 480 5539( named gap { @DispGap })m 480 5251( named star)m -8(t { 1 })k 480 4963({)m
+480 4675( def @RefList r)m -3(ight n)k 2(um)k 480 4387( {)m 480 4099( @NumberMar)m -3(k)k 4(er n)k 2(um & indent @Wide {style n)k 2(um} | @RefPlace)k
+480 3811( //gap @RefList @Ne)m 6(xt n)k 2(um)k 480 3523( })m 480 2947( @Protect headstyle @Title)m
+480 2659( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 2371( // @Title @MajorContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 2083( // @Runner)m
+480 1795( @F)m 6(ootEv)k 5(en { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 1507( @F)m 6(ootOdd { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 1219( //@DispGap @RefList star)m -8(t)k 480 931( // @Runner)m 480 643( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum })k
+480 355( @T)m 26(opOdd { @I {@RunningTitle @OrElse @Title} |1r)k -8(t @B @P)k 8(ageNum })k 480 67(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 88 94
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(88)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(W)m 19(e)k 378(place)s
+948(the)s 1305(e)s 3(xpression)k 220 fnt35 2392 13202(@Ref)m 6(erenceSection)k
+240 fnt82 4408 13205(at)m 4649(the)s 5007(point)s 5569(where)s
+6218(we)s 6563(w)s 2(ant)k 7096(the)s 7453(list)s
+7814(of)s 8095(references)s 0 12917(to)m 239(appear;)s 988(its)s
+1264(v)s 6(alue)k 1832(is)s 2042(something)s 3092(lik)s 2(e)k
+220 fnt35 480 12416(1.)m 13( @RefPlace)k 480 12128(2.)m 13( @RefPlace)k
+480 11840(3.)m 13( @RefPlace)k 480 11552(...)m 240 fnt82 0 11101(where)m
+220 fnt35 648 11098(@RefPlace)m 240 fnt82 1820 11101(is)m 220 fnt35
+2038 11098(@Galle)m 4(y)k 240 fnt82 2945 11101(as)m 3203(usual.)s
+3880(W)s 19(e)k 4258(can)s 4655(scatter)s 5345(multiple)s
+6205(lists)s 6649(of)s 6928(references)s 7967(through)s 8778(the)s
+0 10813(document)m 1004(if)s 1221(we)s 1555(wish)s 2064(\(at)s
+2375(the)s 2722(end)s 3126(of)s 3397(each)s 3891(chapter)s 9(,)k
+4692(for)s 5030(e)s 3(xample\),)k 6022(simply)s 6727(by)s
+7021(placing)s 220 fnt35 7777 10810(@Ref)m 6(erence)k 240 fnt82
+8998 10813(-)m 220 fnt35 0 10522(Section)m 240 fnt82 777 10525(at)m
+1009(each)s 1504(point.)s 480 10151(Our)m 912(task)s 1358(is)s
+1568(completed)s 2622(by)s 2916(the)s 3264(follo)s 6(wing)k
+4241(de\207nition:)s 220 fnt35 480 9650(def @Ref r)m -3(ight x)k 480 9362({)m
+480 9074( def sendref into { @RefPlace&&f)m 6(ollo)k 3(wing })k 480 8786( r)m -3(ight @K)k 8(e)k 4(y)k
+480 8498( {)m 480 8210( @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged x &)k
+480 7922( @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged x &)k
+480 7634( @RefPr)m -3(int x)k 480 7346( })m 480 6770( @NumberMar)m -3(k)k 4(er&&x @Open { @T)k 26(ag } sendref x)k
+480 6482(})m 240 fnt82 0 5988(Gi)m 6(v)k 3(en)k
+633(this)s 1029(de\207nition,)s 2053(the)s 2401(in)s 9(v)k 4(ocation)k
+220 fnt35 3455 5985(@Ref str)m -3(unk1979style)k 240 fnt82 5672 5988(has)m
+6042(result)s 220 fnt35 480 5489(@NumberMar)m -3(k)k 4(er&&str)k -3(unk1979style @Open { @T)k 26(ag })k
+240 fnt82 0 4990(plus)m 450(the)s 798(g)s 1(alle)k 3(y)k
+220 fnt35 1432 4987(sendref str)m -3(unk1979style)k 240 fnt82 3757 4990(.)m
+3921(W)s 19(e)k 4290(\207rst)s 4721(follo)s 6(w)k
+5393(what)s 5918(happens)s 6754(to)s 6993(the)s 7341(g)s 1(alle)k 3(y)k 15(.)k
+480 4616(According)m 1555(to)s 1806(its)s 220 fnt35 2094 4613(into)m
+240 fnt82 2512 4616(clause,)m 3229(the)s 3589(g)s 1(alle)k 3(y)k
+4235(will)s 4673(replace)s 5430(a)s 220 fnt35 5609 4613(@RefPlace)m
+240 fnt82 6785 4616(in)m 7040(the)s 7400(nearest)s 8149(follo)s 6(wing)k
+220 fnt35 0 4325(@Ref)m 6(erenceSection)k 240 fnt82 1946 4328(.)m
+2114(If)s 2348(e)s 6(v)k 3(ery)k 2928(such)s
+3428(g)s 1(alle)k 3(y)k 4066(is)s 4280(a)s
+4450(sorted)s 5096(g)s 1(alle)k 3(y)k 5734(whose)s
+6406(k)s 2(e)k 3(y)k 6805(is)s 7019(the)s
+7371(reference')s 13(s)k 8472(tag,)s 8876(as)s 0 4040(this)m
+396(one)s 798(is,)s 1064(the)s 3(y)k 1527(will)s
+1953(appear)s 2650(sorted)s 3292(by)s 3586(tag.)s 4042(The)s
+4470(g)s 1(alle)k 3(y')k 13(s)k 5260(object)s
+5904(is)s 220 fnt35 480 3539(@NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged str)k -3(unk1979style &)k
+480 3251(@P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged str)k -3(unk1979style &)k
+480 2963(@RefPr)m -3(int str)k -3(unk1979style)k 240 fnt82 0 2465(The)m
+428(result)s 1017(of)s 1287(the)s 220 fnt35 1634 2462(@T)m 26(agged)k
+240 fnt82 2622 2465(symbol)m 3381(is)s 3590(al)s 2(w)k 2(ays)k
+220 fnt35 4300 2462(@Null)m 240 fnt82 4885 2465(,)m 4991(so)s
+5256(this)s 5651(prints)s 6245(the)s 220 fnt35 6592 2462(str)m -3(unk1979style)k
+240 fnt82 8183 2465(reference)m 0 2177(in)m 243(the)s 591(appropriate)s
+1735(style)s 2242(at)s 2474(the)s 220 fnt35 2822 2174(@RefPlace)m
+240 fnt82 3926 2177(,)m 4033(as)s 4283(desired.)s 480 1803(No)m 6(w)k
+220 fnt35 1043 1800(@NumberMar)m -3(k)k 4(er&&preceding)k 240 fnt82
+4081 1803(is)m 4341(the)s 4739(nearest)s 5524(preceding)s 6570(in)s 9(v)k 4(ocation)k
+7674(of)s 220 fnt35 7995 1800(@Number)m 240 fnt82 8998 1803(-)m
+220 fnt35 0 1512(Mar)m -3(k)k 4(er)k 240 fnt82
+775 1515(in)m 1051(the)s 1432(\207nal)s 1946(document.)s 3087(This)s
+3596(must)s 4155(be)s 4470(the)s 4851(in)s 9(v)k 4(ocation)k
+5939(of)s 220 fnt35 6243 1512(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 8021 1515(just)m 8460(before)s 0 1227(the)m 220 fnt35
+378 1224(@RefPlace)m 240 fnt82 1572 1227(that)m 2020(recei)s 6(v)k 3(ed)k
+2908(the)s 3286(g)s 1(alle)k 3(y)k 15(,)k
+3988(and)s 4423(so)s 4719(this)s 5145(in)s 9(v)k 4(ocation)k
+6229(of)s 220 fnt35 6530 1224(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 8305 1227(is)m 8546(gi)s 6(v)k 3(en)k
+220 fnt35 0 936(str)m -3(unk1979style)k 240 fnt82 1585 939(as)m
+1827(an)s 2102(additional)s 3105(tag)s 3442(by)s 3728(the)s
+220 fnt35 4068 936(@T)m 26(agged)k 240 fnt82 5050 939(symbol.)m
+5911(Its)s 6192(original)s 6982(tag)s 7319(w)s 2(as)k
+7732(the)s 8072(number)s 8855(of)s 0 651(the)m 348(reference)s
+1291(place,)s 1902(which)s 2544(means)s 3206(that)s 220 fnt35
+480 150(@NumberMar)m -3(k)k 4(er&&str)k -3(unk1979style @Open { @T)k 26(ag })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 89 95
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8832 13840(89)m 240 fnt82 0 13205(has)m 370(for)s
+708(its)s 984(result)s 1574(the)s 1922(number)s 2713(of)s
+2984(the)s 3332(reference)s 4275(place)s 4835(that)s 5253(recei)s 6(v)k 3(ed)k
+6111(the)s 220 fnt35 6459 13202(str)m -3(unk1979style)k 240 fnt82
+8051 13205(g)m 1(alle)k 3(y)k 15(,)k 8722(and)s
+0 12917(this)m 396(is)s 606(the)s 954(desired)s 1702(result)s
+2292(of)s 220 fnt35 2563 12914(@Ref str)m -3(unk1979style)k 240 fnt82
+4720 12917(.)m 480 12543(It)m 674(might)s 1281(seem)s 1821(that)s
+2228(if)s 2434(we)s 2758(refer)s 3256(to)s 3483(the)s
+220 fnt35 3820 12540(str)m -3(unk1979style)k 240 fnt82 5401 12543(reference)m
+6333(twice,)s 6946(tw)s 2(o)k 7345(copies)s 7996(will)s
+8411(be)s 8681(sent)s 0 12255(to)m 247(the)s 603(reference)s
+1554(list)s 1914(and)s 2326(it)s 2526(will)s 2961(appear)s
+3666(twice.)s 4355(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5324(when)s 5908(more)s 6463(than)s 6941(one)s 7351(sorted)s
+8001(g)s 1(alle)k 3(y)k 8644(with)s 0 11967(the)m
+341(same)s 881(k)s 2(e)k 3(y)k 1269(is)s
+1472(sent)s 1910(to)s 2142(the)s 2483(same)s 3023(place,)s
+3627(only)s 4100(one)s 4495(of)s 4759(them)s 5290(is)s
+5493(printed)s 6221(\(Section)s 7067(1.4\);)s 7551(so)s 7810(pro)s 3(vided)k
+8708(that)s 0 11679(sorted)m 642(g)s 1(alle)k 3(ys)k
+1366(are)s 1713(used)s 2210(there)s 2743(is)s 2953(no)s
+3246(problem.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 90 96
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save 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
+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
+480 fnt84 0 12955(Refer)m 8(ences)k 240 fnt82 0 12358([1])m
+480(Adobe)s 1182(Systems,)s 2094(Inc..)s 240 fnt83 2631 12360(P)m 19(ostScript)k
+3680(Langua)s 2(g)k 2(e)k 4696(Refer)s 8(ence)k
+5704(Manual,)s 6550(Second)s 7316(Edition)s 240 fnt82 8014 12358(.)m
+8186(Addison-)s 480 12070(W)m 19(esle)k 3(y)k 1169(,)s
+1276(1990)s 1751(.)s 0 11567([2])m 480(Brian)s 1132(W)s 22(.)k
+1504(K)s 6(ernighan)k 2630(and)s 3098(Lorinda)s 3980(L.)s
+4294(Cherry)s 15(.)k 5172(A)s 5466(system)s 6255(for)s
+6657(typesetting)s 7824(mathematics)s 9022(.)s 240 fnt83 480 11281(Communications)m
+2158(of)s 2439(the)s 2784(A)s 7(CM)k 240 fnt84
+3351 11278(18)m 240 fnt82 3585 11279(,)m 3692(182\211193)s 4576(\(1975\))s
+5203(.)s 0 10778([3])m 480(Jef)s 6(fre)k 3(y)k
+1177(H.)s 1443(Kingston.)s 240 fnt83 2475 10780(The)m 2876(Basser)s
+3581(Lout)s 4074(Document)s 5111(F)s 25(ormatting)k 6219(System)s
+6929(\(V)s 26(er)k 2(sion)k 7767(3\))s 240 fnt82
+7956 10778(.)m 8109(Computer)s 480 10490(program)m 1290(,)s 1408(1995)s
+1874(.)s 2050(Publicly)s 2913(a)s 4(v)k 6(ailable)k
+3833(in)s 4088(the)s 240 fnt83 4448 10492(jef)m 4(f)k
+240 fnt82 4855 10490(subdirectory)m 6116(of)s 6399(the)s 6759(home)s
+7359(directory)s 8287(of)s 240 fnt83 8570 10492(ftp)m 240 fnt82
+8887 10490(to)m 480 10202(host)m 240 fnt83 950 10204(ftp.cs.su.oz.au)m 240 fnt82
+2373 10202(with)m 2866(login)s 3427(name)s 240 fnt83 4012 10204(anonymous)m
+240 fnt82 5171 10202(or)m 240 fnt83 5442 10204(ftp)m 240 fnt82
+5758 10202(and)m 6174(an)s 3(y)k 6582(non-empty)s 7685(passw)s 2(ord)k
+8657(\(e.g.)s 240 fnt83 480 9916(none)m 240 fnt82 939 9914(\).)m
+1175(Lout)s 1680(distrib)s 4(utions)k 2914(are)s 3254(also)s
+3685(a)s 4(v)k 6(ailable)k 4585(from)s 5102(the)s
+240 fnt83 5443 9916(comp.sour)m 8(ces.misc)k 240 fnt82 7291 9914(ne)m 6(wsgroup,)k
+8436(and)s 8832(by)s 480 9626(electronic)m 1474(mail)s 1953(from)s
+2477(the)s 2825(author)s 13(.)k 3587(All)s 3947(enquiries)s
+4874(to)s 240 fnt83 5113 9628(jef)m 4(f@cs.su.oz.au)k 240 fnt82
+6672 9626(.)m 0 9121([4])m 480(Jef)s 6(fre)k 3(y)k
+1187(H.)s 1463(Kingston.)s 240 fnt83 2504 9123(A)m 2698(User')s 9(s)k
+3380(Guide)s 4017(to)s 4255(the)s 4599(Lout)s 5101(Document)s
+6148(F)s 25(ormatting)k 7266(System)s 7985(\(V)s 26(er)k 2(sion)k
+8833(3\))s 240 fnt82 9022 9121(.)m 480 8833(Basser)m 1177(Department)s
+2365(of)s 2636(Computer)s 3653(Science)s 4392(,)s 4499(Uni)s 6(v)k 3(ersity)k
+5553(of)s 5824(Sydne)s 3(y)k 6534(,)s 6641(1995)s
+7107(.)s 0 8328([5])m 480(Donald)s 1243(E.)s 1493(Knuth.)s
+240 fnt83 2256 8330(The)m 2668(T)s 2764 8282(E)m 2872 8330(X)m
+3028(Book)s 240 fnt82 3524 8328(.)m 3688(Addison-W)s 19(esle)k 3(y)k
+5268(,)s 5375(1984)s 5849(.)s 0 7823([6])m 480(Brian)s
+1048(K.)s 1305(Reid.)s 1900(A)s 2110(High-)s 2657(Le)s 6(v)k 3(el)k
+3227(Approach)s 4207(to)s 4426(Computer)s 5423(Document)s 6459(Production)s
+7506(.)s 7650(In)s 240 fnt83 7885 7825(Pr)m 10(oceedings)k
+480 7537(of)m 745(the)s 1073(7th)s 1417(Symposium)s 2548(on)s
+2825(the)s 3153(Principles)s 4174(of)s 4438(Pr)s 10(o)k 2(gr)k 3(amming)k
+5804(Langua)s 2(g)k 2(es)k 6891(\(POPL\),)s 7723(Las)s
+8107(V)s 26(e)k 9(gas)k 8695(NV)s 240 fnt82
+9019 7535(,)m 480 7247(pages)m 1076(24\21131)s 1651(,)s 1758(1980)s
+2233(.)s 0 6742([7])m 480(W)s 9(illiam)k 1313(Strunk)s
+2012(and)s 2416(E.)s 2666(B.)s 2930(White.)s 240 fnt83
+3678 6744(The)m 4090(Elements)s 5021(of)s 5302(Style)s 240 fnt82
+5759 6742(.)m 5923(Macmillan)s 6955(.)s 7119(Third)s 7708(Edition)s
+8409(,)s 8516(1979)s 8987(.)s 192 fnt84 4439 2(90)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 91 97
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save 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
+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
+480 fnt84 0 12962(Index)m 220 fnt35 0 12365(adjust)m 641(@Break)s
+240 fnt82 1444 12368(,)m 1551(42)s 0 12080(Adjustment)m 1176(of)s
+1447(object)s 2038(,)s 2145(49)s 0 11792(Adobe)m 695(Systems,)s
+1599(Inc.)s 1955(,)s 2062(41)s 0 11504(Alignment)m 240 fnt83
+1083 11506(see)m 240 fnt82 1441 11504(mark)m 1993(alignment)s 0 11216(Associati)m 6(vity)k
+1256(,)s 1363(22)s 220 fnt35 0 10637(b)m 240 fnt82
+174 10640(unit)m 553(,)s 660(37)s 240 10352(use)m 615(in)s
+220 fnt35 858 10349(//1.1b)m 240 fnt82 1406 10352(,)m 1513(27)s
+220 fnt35 0 10061(@Bac)m 4(kEnd)k 240 fnt82 1145 10064(symbol)m
+1852(,)s 1959(66)s 220 fnt35 0 9773(@Bac)m 4(kg)k 2(round)k
+240 fnt82 1436 9776(symbol)m 2143(,)s 2250(53)s 220 fnt35
+0 9485(@Begin)m 240 fnt82 829 9488(symbol)m 1536(,)s 1643(36)s
+0 9200(Bibliographies)m 1406(,)s 1513(85)s 0 8912(Body)m 574(of)s
+845(a)s 1011(de\207nition)s 1932(,)s 2039(4)s 220 fnt35
+0 8621(body)m 240 fnt82 534 8624(parameter)m 1495(,)s 1602(17)s
+0 8336(Braces)m 648(,)s 755(3)s 220 fnt35 0 7757(c)m
+240 fnt82 165 7760(unit)m 544(,)s 651(37)s 220 fnt35
+0 7469(@Case)m 240 fnt82 787 7472(symbol)m 1494(,)s 1601(56)s
+0 7184(Centring)m 837(,)s 944(37)s 220 fnt35 0 6893(@Chapter)m
+240 fnt82 1063 6896(e)m 3(xample)k 1873(,)s 1980(81)s
+0 6608(Chapters)m 901(and)s 1305(sections)s 2073(,)s 2180(80)s
+220 fnt35 0 6317(@Char)m 240 fnt82 758 6320(symbol)m 1465(,)s
+1572(41)s 0 6032(Cherry)m 15(,)k 756(L.)s 953(,)s
+1060(69)s 220 fnt35 0 5741(clines)m 613(@Break)s 240 fnt82
+1416 5744(,)m 1523(42)s 220 fnt35 0 5453(@ColList)m 240 fnt82
+948 5456(e)m 3(xample)k 1758(,)s 1865(77)s 0 5168(Column)m
+829(mark)s 1328(,)s 1435(1)s 0 4880(Comment)m 951(,)s
+1058(15)s 0 4592(Comment)m 1004(character)s 1885(,)s 1992(13)s
+220 fnt35 0 4301(@Common)m 240 fnt82 1159 4304(symbol)m 1866(,)s
+1973(53)s 0 4016(Components)m 1262(of)s 1533(a)s 1699(g)s 1(alle)k 3(y)k
+2280(,)s 2387(26)s 240 3728(promotion)m 1294(of)s 1512(,)s
+1619(29)s 0 3440(Concatenation)m 1439(symbols)s 2235(,)s 2342(36)s
+0 3152(Contraction)m 1186(of)s 1457(object)s 2048(,)s 2155(48)s
+220 fnt35 0 2861(cr)m 2(agged)k 839(@Break)s 240 fnt82
+1642 2864(,)m 1749(42)s 0 2576(Cross)m 596(reference)s 1486(,)s
+1593(7)s 220 fnt35 0 2285(@CurrLang)m 240 fnt82 1185 2288(symbol)m
+1892(,)s 1999(46)s 220 fnt35 0 1709(d)m 240 fnt82
+170 1712(unit)m 549(,)s 656(37)s 220 fnt35 0 1421(@Database)m
+240 fnt82 1214 1424(symbol)m 1921(,)s 2028(60)s 0 1136(Date,)m
+558(printing)s 1368(of)s 1639(current)s 2322(,)s 2429(57)s
+0 848(Def)m 2(ault)k 774(v)s 6(alue)k 1342(of)s
+1613(parameter)s 2574(,)s 2681(15)s 4816 12367(De\207nitions)m 5877(,)s
+5984(4)s 4816 12079(Delimiter)m 5737(,)s 5844(13)s 4816 11791(Diag)m
+5334(diagram-dra)s 3(wing)k 7030(package)s 7817(,)s 7924(64)s
+4816 11503(Diagrams)m 5743(,)s 5850(61)s 4816 11215(DocumentLayout)m 6551(package)s
+7338(,)s 7445(71)s 5056 10927(chapters)m 5903(and)s 6307(sections)s
+7075(,)s 7182(80)s 5056 10639(displays)m 5838(,)s 5945(72)s
+5056 10351(lists)m 5438(,)s 5545(73)s 5056 10063(page)m 5564(layout)s
+6169(,)s 6276(75)s 5056 9775(paragraphs)m 6103(,)s 6210(71)s
+220 fnt35 4816 9196(e)m 240 fnt82 4990 9199(g)m 1(ap)k
+5388(mode)s 5923(,)s 6030(37)s 4816 8911(Edge-to-edge)m 6160(g)s 1(ap)k
+6558(mode)s 7093(,)s 7200(37)s 220 fnt35 4816 8620(@Enclose)m
+240 fnt82 5818 8623(,)m 5925(30)s 220 fnt35 4816 8332(@End)m
+240 fnt82 5477 8335(symbol)m 6184(,)s 6291(36)s 4816 8047(Eq)m
+5140(equation)s 6021(formatting)s 7082(package)s 7869(,)s 7976(69)s
+220 fnt35 4816 7756(@Eq)m 240 fnt82 5354 7759(e)m 3(xample)k
+6164(,)s 6271(69)s 4816 7471(Escape)m 5549(character)s 6430(,)s
+6537(13)s 220 fnt35 4816 7180(@Ev)m 5(enP)k 8(ageList)k
+240 fnt82 6435 7183(e)m 3(xample)k 7245(,)s 7352(79)s
+4816 6895(Expansion)m 5884(of)s 6155(object)s 6746(,)s 6853(48)s
+220 fnt35 4816 6604(e)m 6(xpor)k -8(t)k 240 fnt82
+5484 6607(clause)m 6084(,)s 6191(18)s 220 fnt35 4816 6028(f)m
+240 fnt82 4934 6031(unit)m 5313(,)s 5420(37)s 4816 5743(F)m 3(ace)k
+5320(of)s 5591(a)s 5757(font)s 6149(,)s 6256(40)s
+4816 5455(F)m 3(amily)k 5544(of)s 5815(a)s 5981(font)s
+6373(,)s 6480(40)s 220 fnt35 4816 5164(f)m 6(ollo)k 3(wing)k
+240 fnt82 5653 5167(,)m 5760(8)s 220 fnt35 4816 4876(f)m 6(ollo)k 3(wing)k
+240 fnt82 5653 4879(,)m 5760(8)s 4816 4591(F)m 3(onts)k
+5343(,)s 5450(40)s 220 fnt35 4816 4300(f)m 6(ontdef)k
+240 fnt82 5485 4303(,)m 5592(41)s 220 fnt35 4816 4012(@F)m 6(ont)k
+240 fnt82 5528 4015(symbol)m 6235(,)s 6342(40)s 220 fnt35
+4816 3724(@F)m 6(ootSect)k 240 fnt82 5967 3727(e)m 3(xample)k
+6777(,)s 6884(76)s 4816 3439(F)m 3(orcing)k 5610(g)s 1(alle)k 3(y)k
+6191(,)s 6298(29)s 4816 3151(F)m 3(ormfeed)k 5747(,)s
+5854(13)s 4816 2575(Galle)m 3(ys)k 5541(,)s 5648(10)s
+5056 2287(in)m 5299(detail)s 5831(,)s 5938(25)s 220 fnt35
+4816 1996(@Galle)m 4(y)k 5654(@F)s 6(orceGalle)k 4(y)k
+240 fnt82 7107 1999(symbol)m 7814(,)s 7921(58)s 8155(,)s
+4816 1711(Gap)m 5215(,)s 5322(37)s 4816 1423(Gap)m 5268(mode)s
+5803(,)s 5910(37)s 220 fnt35 4816 1132(@Gr)m 2(aphic)k
+240 fnt82 5860 1135(symbol)m 6567(,)s 6674(61)s 192 fnt84
+4442 2(91)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 92 98
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(92)m 240 fnt83 8539 13843(Inde)m 4(x)k
+220 fnt35 0 13246(h)m 240 fnt82 168 13249(g)m 1(ap)k
+566(mode)s 1101(,)s 1208(37)s 220 fnt35 0 12958(@HAdjust)m
+240 fnt82 1046 12961(symbol)m 1753(,)s 1860(49)s 220 fnt35
+0 12670(@HContr)m 2(act)k 240 fnt82 1264 12673(symbol)m 1971(,)s
+2078(48)s 220 fnt35 0 12382(@HCo)m 3(v)k 5(er)k
+240 fnt82 1018 12385(symbol)m 1725(,)s 1832(50)s 0 12097(Height)m
+711(of)s 982(an)s 1265(object)s 1856(,)s 1963(24)s
+220 fnt35 0 11806(@HExpand)m 240 fnt82 1173 11809(symbol)m 1880(,)s
+1987(48)s 220 fnt35 0 11518(@High)m 240 fnt82 719 11521(symbol)m
+1426(,)s 1533(47)s 220 fnt35 0 11230(@HLimited)m 240 fnt82
+1135 11233(symbol)m 1842(,)s 1949(48)s 220 fnt35 0 10942(@Hline)m
+240 fnt82 773 10945(e)m 3(xample)k 1583(,)s 1690(71)s
+0 10657(Horizontal)m 1077(concatenation)s 2409(,)s 2516(36)s 220 fnt35
+0 10366(@HScale)m 240 fnt82 981 10369(symbol)m 1688(,)s 1795(49)s
+220 fnt35 0 10078(@HShift)m 240 fnt82 875 10081(symbol)m 1582(,)s
+1689(47)s 220 fnt35 0 9790(@HSpan)m 240 fnt82 939 9793(symbol)m
+1646(,)s 1753(50)s 220 fnt35 0 9502(h)m 6(yphen)k
+760(@Break)s 240 fnt82 1563 9505(,)m 1670(43)s 0 9217(Hyphenation)m
+1294(g)s 1(ap)k 1692(mode)s 2227(,)s 2334(39)s
+0 8929(Hyphenation)m 1294(g)s 1(ap)k 1692(mode)s 2227(,)s
+2334(37)s 0 8353(Identi\207er)m 882(,)s 989(13)s 220 fnt35
+0 8062(impor)m -8(t)k 240 fnt82 673 8065(clause)m 1273(,)s
+1380(18)s 0 7777(In-paragraph)m 1291(concatenation)s 2623(,)s 2730(37)s
+220 fnt35 0 7486(@Include)m 240 fnt82 982 7489(symbol)m 1689(,)s
+1796(66)s 220 fnt35 0 7198(@IncludeGr)m 2(aphic)k 240 fnt82
+1751 7201(symbol)m 2458(,)s 2565(65)s 220 fnt35 0 6910(@IndentedDispla)m 6(y)k
+240 fnt82 1847 6913(e)m 3(xample)k 2657(,)s 2764(72)s
+220 fnt35 0 6622(@IndentedList)m 240 fnt82 1474 6625(e)m 3(xample)k
+2284(,)s 2391(73)s 0 6337(Inde)m 3(x)k 597(\207le)s
+958(\(for)s 1375(databases\))s 2366(,)s 2473(61)s 220 fnt35
+0 6046(@Inser)m -8(t)k 240 fnt82 836 6049(symbol)m 1543(,)s
+1650(54)s 220 fnt35 0 5758(into)m 240 fnt82 406 5761(clause)m
+1006(,)s 1113(10)s 0 5473(In)m 9(v)k 4(ocation)k
+1067(of)s 1338(a)s 1504(symbol)s 2211(,)s 2318(4)s
+220 fnt35 0 4606(k)m 240 fnt82 170 4609(g)m 1(ap)k
+568(mode)s 1103(,)s 1210(37)s 0 4321(K)m 6(ernighan,)k
+1111(B.)s 1322(,)s 1429(69)s 0 4033(K)m 6(erning)k
+778(,)s 885(40)s 0 3745(K)m 6(erning)k 831(g)s 1(ap)k
+1229(mode)s 1764(,)s 1871(37)s 220 fnt35 0 3454(@K)m 8(er)k -5(nShr)k -3(ink)k
+240 fnt82 1367 3457(symbol)m 2074(,)s 2181(53)s 220 fnt35
+0 3166(@K)m 8(e)k 4(y)k 240 fnt82 647 3169(parameter)m
+1608(,)s 1715(31)s 0 2881(Knuth,)m 706(D.)s 930(,)s
+1037(71)s 220 fnt35 0 2302(langdef)m 240 fnt82 776 2305(language)m
+1696(de\207nition)s 2617(,)s 2724(46)s 220 fnt35 0 2014(@Language)m
+240 fnt82 1251 2017(symbol)m 1958(,)s 2065(45)s 220 fnt35
+0 1726(@LClos)m 240 fnt82 836 1729(symbol)m 1543(,)s 1650(14)s
+0 1441(LCM)m 573(\207le)s 881(,)s 988(41)s 0 1153(Length)m
+682(,)s 789(37)s 220 fnt35 0 862(@LEn)m 4(v)k
+240 fnt82 778 865(symbol)m 1485(,)s 1592(14)s 0 577(Letter)m
+629(character)s 1510(,)s 1617(13)s 0 289(Lig)m 1(atures)k
+899(,)s 1006(40)s 220 fnt35 4816 13247(lines)m 5319(@Break)s
+240 fnt82 6122 13250(,)m 6229(42)s 220 fnt35 4816 12959(@LInput)m
+240 fnt82 5705 12962(symbol)m 6412(,)s 6519(14)s 4816 12674(Literal)m
+5506(w)s 2(ord)k 6001(,)s 6108(14)s 220 fnt35
+4816 12383(@LUse)m 240 fnt82 5603 12386(symbol)m 6310(,)s 6417(14)s
+220 fnt35 4816 12095(@L)m 24(Vis)k 240 fnt82 5494 12098(symbol)m
+6201(,)s 6308(14)s 220 fnt35 4816 11519(m)m 240 fnt82
+5045 11522(unit)m 5424(,)s 5531(37)s 4816 11234(Macro)m 5440(,)s
+5547(15)s 4816 10946(Mark)m 5395(alignment)s 6358(,)s 6465(1)s
+5056 10658(in)m 5299(detail)s 5831(,)s 5938(28)s 4816 10370(Mark-to-mark)m
+6230(g)s 1(ap)k 6628(mode)s 7163(,)s 7270(37)s
+220 fnt35 4816 10079(@Meld)m 240 fnt82 5562 10082(symbol)m 6269(,)s
+6376(53)s 220 fnt35 4816 9791(@Merge)m 240 fnt82 5713 9794(symbol)m
+6420(,)s 6527(32)s 220 fnt35 4816 9503(@Moment)m 240 fnt82
+5888 9506(symbol)m 6595(,)s 6702(57)s 220 fnt35 4816 8927(named)m
+240 fnt82 5535 8930(parameter)m 6496(,)s 6603(15)s 4816 8642(Nested)m
+5538(de\207nitions)s 6546(,)s 6653(17)s 220 fnt35 4816 8351(@Ne)m 6(xt)k
+240 fnt82 5540 8354(symbol)m 6247(,)s 6354(56)s 220 fnt35
+4816 8063(noh)m 6(yphen)k 5820(@Break)s 240 fnt82 6623 8066(,)m
+6730(43)s 220 fnt35 4816 7775(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 6343 7778(symbol)m 7050(,)s 7157(58)s 220 fnt35
+4816 7487(@Null)m 240 fnt82 5461 7490(symbol)m 6168(,)s 6275(57)s
+4816 7202(Numbered)m 5884(list)s 6182(,)s 6289(73)s 220 fnt35
+4816 6911(@NumberOf)m 240 fnt82 6108 6914(e)m 3(xample)k 6918(,)s
+7025(80)s 220 fnt35 4816 6335(o)m 240 fnt82 4991 6338(g)m 1(ap)k
+5389(mode)s 5924(,)s 6031(37)s 4816 6050(Object)m 5460(,)s
+5567(1)s 220 fnt35 4816 5759(@OddP)m 8(ageList)k 240 fnt82
+6355 5762(e)m 3(xample)k 7165(,)s 7272(79)s 220 fnt35
+4816 5471(@OneCol)m 240 fnt82 5828 5474(symbol)m 6535(,)s 6642(47)s
+220 fnt35 4816 5183(@OneOf)m 240 fnt82 5743 5186(symbol)m 6450(,)s
+6557(54)s 220 fnt35 4816 4895(@OneP)m 8(age)k 240 fnt82
+6010 4898(e)m 3(xample)k 6820(,)s 6927(78)s 220 fnt35
+4816 4607(@OneRo)m 3(w)k 240 fnt82 5947 4610(symbol)m 6654(,)s
+6761(46)s 220 fnt35 4816 4319(@Open)m 240 fnt82 5622 4322(symbol)m
+6329(,)s 6436(60)s 4816 4034(Optimal)m 5654(g)s 1(alle)k 3(y)k
+6288(breaking)s 7125(,)s 7232(34)s 220 fnt35 4816 3743(@Optimiz)m 3(e)k
+240 fnt82 5953 3746(symbol)m 6660(,)s 6767(35)s 220 fnt35
+4816 3455(or)m 2(agged)k 5667(@Break)s 240 fnt82 6470 3458(,)m
+6577(42)s 220 fnt35 4816 3167(@OrElse)m 240 fnt82 5761 3170(e)m 3(xample)k
+6571(,)s 6678(83)s 4816 2882(Other)m 5420(character)s 6301(,)s
+6408(13)s 220 fnt35 4816 2591(outdent)m 5604(@Break)s 240 fnt82
+6407 2594(,)m 6514(42)s 220 fnt35 4816 2303(o)m 3(v)k 5(er)k
+240 fnt82 5295 2306(e)m 3(xample)k 6105(,)s 6212(70)s
+4816 2018(Ov)m 3(erstrik)k 2(e)k 5875(g)s 1(ap)k
+6273(mode)s 6808(,)s 6915(37)s 220 fnt35 4816 1439(p)m
+240 fnt82 4990 1442(unit)m 5369(,)s 5476(37)s 220 fnt35
+4816 1151(@P)m 26(Adjust)k 240 fnt82 5824 1154(symbol)m 6531(,)s
+6638(49)s 220 fnt35 4816 863(@P)m 8(age)k 240 fnt82
+5595 866(e)m 3(xample)k 6405(,)s 6512(77)s 4816 578(P)m 3(age)k
+5334(layout)s 5056 290(principles)m 6049(of)s 6267(,)s 6374(5)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 93 99
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 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
+240 fnt83 0 13843(Inde)m 4(x)k 240 fnt84 8833 13840(93)m
+240 fnt82 240 13247(in)m 483(practice)s 1241(,)s 1348(75)s
+220 fnt35 0 12956(@P)m 8(ageLabel)k 240 fnt82 1309 12959(symbol)m
+2016(,)s 2123(68)s 220 fnt35 0 12668(@P)m 8(ageOf)k
+240 fnt82 1016 12671(e)m 3(xample)k 1826(,)s 1933(75)s
+0 12383(P)m 3(aragraph)k 1023(breaking)s 1860(,)s 1967(3)s
+240 12095(in)m 483(detail)s 1015(,)s 1122(39)s 0 11807(P)m 3(arameter)k
+971(,)s 1078(4)s 220 fnt35 240 11516(body)m 240 fnt82
+774 11519(parameter)m 1735(,)s 1842(17)s 220 fnt35 240 11228(named)m
+240 fnt82 959 11231(parameter)m 1920(,)s 2027(15)s 220 fnt35
+0 10940(@PlainGr)m 2(aphic)k 240 fnt82 1530 10943(symbol)m 2237(,)s
+2344(65)s 0 10655(PostScript)m 989(,)s 1096(ii)s 240 10367(used)m
+737(by)s 220 fnt35 1031 10364(@Gr)m 2(aphic)k 240 fnt82
+2022 10367(,)m 2129(61)s 240 10079(used)m 737(by)s 220 fnt35
+1031 10076(@IncludeGr)m 2(aphic)k 240 fnt82 2729 10079(,)m 2836(65)s
+240 9791(used)m 737(by)s 220 fnt35 1031 9788(@PrependGr)m 2(aphic)k
+240 fnt82 2851 9791(,)m 2958(65)s 220 fnt35 0 9500(@PP)m
+240 fnt82 566 9503(e)m 3(xample)k 1376(,)s 1483(72)s
+0 9215(Precedence)m 1091(,)s 1198(22)s 220 fnt35 0 8924(preceding)m
+240 fnt82 958 8927(,)m 1065(8)s 220 fnt35 0 8636(@PrependGr)m 2(aphic)k
+240 fnt82 1873 8639(symbol)m 2580(,)s 2687(65)s 0 8351(Principal)m
+917(mark)s 1416(,)s 1523(37)s 240 8063(ef)m 6(fect)k
+836(on)s 220 fnt35 1133 8060(@OneCol)m 240 fnt82 2145 8063(and)m
+220 fnt35 2549 8060(@OneRo)m 3(w)k 240 fnt82 3627 8063(,)m
+3734(46)s 0 7775(Promotion)m 1067(of)s 1338(components)s 2493(,)s
+2600(29)s 0 7199(Quote)m 641(character)s 1522(,)s 1629(13)s
+0 6911(Quoted)m 763(w)s 2(ord)k 1258(,)s 1365(14)s
+220 fnt35 0 6332(r)m 240 fnt82 133 6335(unit)m 512(,)s
+619(37)s 220 fnt35 0 6044(r)m 2(agged)k 729(@Break)s
+240 fnt82 1532 6047(,)m 1639(42)s 220 fnt35 0 5756(@Ra)m 4(wV)k 17(erbatim)k
+240 fnt82 1563 5759(symbol)m 2270(,)s 2377(67)s 0 5471(Recepti)m 6(v)k 3(e)k
+1003(symbol)s 1710(,)s 1817(11)s 0 5183(Recursion)m 974(,)s
+1081(5)s 220 fnt35 0 4892(@Ref)m 240 fnt82 621 4895(e)m 3(xample)k
+1431(,)s 1538(88)s 220 fnt35 0 4604(@Ref)m 6(erence)k
+240 fnt82 1281 4607(e)m 3(xample)k 2091(,)s 2198(85)s
+220 fnt35 0 4316(@Ref)m 6(erenceSection)k 240 fnt82 2006 4319(e)m 3(xample)k
+2816(,)s 2923(87)s 0 4031(Reid,)m 559(Brian)s 1147(K.)s
+1371(,)s 1478(7)s 0 3743(Right)m 592(justi\207cation)s 1724(,)s
+1831(37)s 220 fnt35 0 3452(r)m -3(lines)k 579(@Break)s
+240 fnt82 1382 3455(,)m 1489(42)s 0 3167(Roman)m 749(numerals)s
+1623(,)s 1730(75)s 0 2879(Root)m 526(g)s 1(alle)k 3(y)k
+1107(,)s 1214(11)s 240 2591(in)m 483(detail)s 1015(,)s
+1122(28)s 240 2303(printing)m 1050(of)s 1268(,)s 1375(29)s
+240 2015(size)m 667(of)s 938(components)s 2146(of)s 2364(,)s
+2471(25)s 220 fnt35 0 1724(@Rotate)m 240 fnt82 921 1727(symbol)m
+1628(,)s 1735(52)s 0 1439(Rotation)m 881(of)s 1152(object)s
+1743(,)s 1850(52)s 0 1151(Ro)m 6(w)k 501(mark)s
+1000(,)s 1107(2)s 220 fnt35 0 860(rr)m 2(agged)k
+802(@Break)s 240 fnt82 1605 863(,)m 1712(42)s 220 fnt35
+0 572(@Rump)m 240 fnt82 860 575(symbol)m 1567(,)s 1674(53)s
+220 fnt35 0 284(@Runner)m 240 fnt82 1002 287(e)m 3(xample)k
+1812(,)s 1919(78)s 220 fnt35 4816 13246(s)m 240 fnt82
+4979 13249(unit)m 5358(,)s 5465(37)s 5056 12961(and)m 220 fnt35
+5460 12958(@Space)m 240 fnt82 6357 12961(symbol)m 7064(,)s 7171(43)s
+220 fnt35 4816 12670(@Scale)m 240 fnt82 5639 12673(symbol)m 6346(,)s
+6453(51)s 4816 12385(Scaling)m 5586(of)s 5857(object)s 6448(,)s
+6555(49)s 4816 12097(Scribe)m 5429(,)s 5536(7)s 220 fnt35
+4816 11806(@Section)m 240 fnt82 5816 11809(e)m 3(xample)k 6626(,)s
+6733(83)s 220 fnt35 4816 11518(@SetColor)m 240 fnt82 5951 11521(symbol)m
+6658(,)s 6765(44)s 220 fnt35 4816 11230(@SetColour)m 240 fnt82
+6073 11233(symbol)m 6780(,)s 6887(44)s 4816 10945(Size)m 5283(of)s
+5554(an)s 5837(object)s 6428(,)s 6535(24)s 4816 10657(small)m
+5388(capitals)s 6115(,)s 6222(41)s 4816 10369(Sorted)m 5498(g)s 1(alle)k 3(ys)k
+6169(,)s 6276(31)s 4816 10081(Space)m 5390(,)s 5497(13)s
+5056 9793(when)m 5632(signi\207cant)s 6635(,)s 6742(38)s 220 fnt35
+4816 9502(@Space)m 240 fnt82 5713 9505(symbol)m 6420(,)s 6527(43)s
+220 fnt35 4816 9214(@Star)m -8(tHSpan)k 240 fnt82 6226 9217(symbol)m
+6933(,)s 7040(50)s 220 fnt35 4816 8926(@Star)m -8(tHVSpan)k
+240 fnt82 6372 8929(symbol)m 7079(,)s 7186(50)s 220 fnt35
+4816 8638(@Star)m -8(tVSpan)k 240 fnt82 6214 8641(symbol)m 6921(,)s
+7028(50)s 4816 8353(Style)m 5363(of)s 5634(an)s 5917(object)s
+6508(,)s 6615(23)s 220 fnt35 4816 8062(sup)m 240 fnt82
+5222 8065(e)m 3(xample)k 6032(,)s 6139(70)s 4816 7777(Symbol)m
+5563(,)s 5670(4)s 220 fnt35 4816 7486(@SysDatabase)m 240 fnt82
+6396 7489(symbol)m 7103(,)s 7210(61)s 220 fnt35 4816 7198(@SysInclude)m
+240 fnt82 6164 7201(symbol)m 6871(,)s 6978(66)s 220 fnt35
+4816 6910(@SysIncludeGr)m 2(aphic)k 240 fnt82 6933 6913(symbol)m 7640(,)s
+7747(65)s 220 fnt35 4816 6622(@SysPrependGr)m 2(aphic)k 240 fnt82
+7055 6625(symbol)m 7762(,)s 7869(65)s 220 fnt35 4816 6046(t)m
+240 fnt82 4933 6049(g)m 1(ap)k 5331(mode)s 5866(,)s
+5973(37)s 4816 5761(T)m 19(ables)k 5432(,)s 5539(2)s
+4816 5473(T)m 19(ab)k 4(ulation)k 5886(g)s 1(ap)k
+6284(mode)s 6819(,)s 6926(37)s 220 fnt35 4816 5182(@T)m 26(ag)k
+240 fnt82 5439 5185(parameter)m 9(,)k 6491(def)s 2(ault)k
+7212(v)s 6(alue)k 7780(of)s 7998(,)s 8105(16)s
+220 fnt35 4816 4894(@T)m 26(agged)k 240 fnt82 5805 4897(symbol)m
+6512(,)s 6619(59)s 4816 4609(T)m 19(ar)k 4(get)k
+5476(of)s 5747(cross)s 6289(reference)s 7179(,)s 7286(8)s
+4816 4321(T)m 19(ar)k 4(get)k 5476(of)s 5747(a)s
+5913(g)s 1(alle)k 3(y)k 6494(,)s 6601(11)s
+220 fnt35 4816 4030(@T)m 26(arget)k 240 fnt82 5703 4033(symbol)m
+6410(,)s 6517(30)s 5056 3745(in)m 5299(detail)s 5831(,)s
+5938(25)s 4816 3457(T)m 4912 3409(E)m 5020 3457(X)m 5056 3169(h)m 1(yphenation)k
+6243(,)s 6350(39)s 5056 2881(optimal)m 5841(paragraph)s 6854(breaking)s
+7691(,)s 7798(39)s 4816 2593(T)m 16(e)k 3(xtual)k
+5582(unit)s 5961(,)s 6068(13)s 220 fnt35 4816 2014(@Under)m -3(line)k
+240 fnt82 6031 2017(symbol)m 6738(,)s 6845(67)s 4816 1729(Underscore)m
+5974(character)s 6855(,)s 6962(13)s 220 fnt35 4816 1438(@Use)m
+240 fnt82 5481 1441(symbol)m 6188(,)s 6295(60)s 220 fnt35
+4816 862(v)m 240 fnt82 4985 865(unit)m 5364(,)s 5471(37)s
+5056 577(ef)m 6(fect)k 5652(on)s 5949(paragraph)s 6962(breaking)s
+7799(,)s 7906(42)s 220 fnt35 4816 286(@V)m 17(Adjust)k
+240 fnt82 5833 289(symbol)m 6540(,)s 6647(49)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 94 100
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save 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
+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
+240 fnt84 0 13840(94)m 240 fnt83 8539 13843(Inde)m 4(x)k
+220 fnt35 0 13246(@VContr)m 2(act)k 240 fnt82 1252 13249(symbol)m
+1959(,)s 2066(48)s 220 fnt35 0 12958(@VCo)m 3(v)k 5(er)k
+240 fnt82 1006 12961(symbol)m 1713(,)s 1820(50)s 220 fnt35
+0 12670(@V)m 17(erbatim)k 240 fnt82 1129 12673(symbol)m 1836(,)s
+1943(67)s 0 12385(V)m 26(ertical)k 797(concatenation)s 2129(,)s
+2236(36)s 220 fnt35 0 12094(@VExpand)m 240 fnt82 1161 12097(symbol)m
+1868(,)s 1975(48)s 220 fnt35 0 11806(@VLimited)m 240 fnt82
+1123 11809(symbol)m 1830(,)s 1937(48)s 220 fnt35 0 11518(@VScale)m
+240 fnt82 969 11521(symbol)m 1676(,)s 1783(49)s 220 fnt35
+0 11230(@VShift)m 240 fnt82 863 11233(symbol)m 1570(,)s 1677(48)s
+220 fnt35 0 10942(@VSpan)m 240 fnt82 927 10945(symbol)m 1634(,)s
+1741(50)s 220 fnt35 0 10366(w)m 240 fnt82 216 10369(unit)m
+595(,)s 702(37)s 0 10081(White)m 640(space)s 1174(,)s
+1281(13)s 240 9793(when)m 816(signi\207cant)s 1819(,)s 1926(38)s
+220 fnt35 0 9502(@Wide)m 240 fnt82 774 9505(symbol)m 1481(,)s
+1588(47)s 0 9217(W)m 9(idth)k 646(of)s 917(an)s
+1200(object)s 1791(,)s 1898(24)s 0 8929(W)m 19(ord)k
+531(,)s 638(14)s 220 fnt35 0 8350(x)m 240 fnt82
+168 8353(g)m 1(ap)k 566(mode)s 1101(,)s 1208(37)s
+220 fnt35 0 7774(@Y)m 4(ield)k 240 fnt82 753 7777(symbol)m
+1460(,)s 1567(56)s 220 fnt35 0 7486(@YUnit)m 240 fnt82
+814 7489(symbol)m 1521(,)s 1628(44)s 220 fnt35 0 6910(@ZUnit)m
+240 fnt82 802 6913(symbol)m 1509(,)s 1616(44)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Helvetica-Oblique
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Times-BoldItalic
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 100
+%%EOF
diff --git a/doc/expert/pre b/doc/expert/pre
new file mode 100644
index 0000000..72a4fa3
--- /dev/null
+++ b/doc/expert/pre
@@ -0,0 +1,51 @@
+@Chapter
+ @Title { Predefined symbols }
+ @Tag { symbols }
+@Begin
+@BeginSections
+@Include { pre_begi }
+@Include { pre_conc }
+@Include { pre_font }
+@Include { pre_brea }
+@Include { pre_spac }
+@Include { pre_yuni }
+@Include { pre_colo }
+@Include { pre_lang }
+@Include { pre_oner }
+@Include { pre_wide }
+@Include { pre_hshi }
+@Include { pre_hexp }
+@Include { pre_hcon }
+@Include { pre_hlim }
+@Include { pre_hadj }
+@Include { pre_hsca }
+@Include { pre_cove }
+@Include { pre_span }
+@Include { pre_scal }
+@Include { pre_rota }
+@Include { pre_back }
+@Include { pre_kshr }
+@Include { pre_rump }
+@Include { pre_inse }
+@Include { pre_oneo }
+@Include { pre_next }
+@Include { pre_case }
+@Include { pre_mome }
+@Include { pre_null }
+@Include { pre_gall }
+@Include { pre_notr }
+@Include { pre_cros }
+@Include { pre_tagg }
+@Include { pre_open }
+@Include { pre_data }
+@Include { pre_grap }
+@Include { pre_plai }
+@Include { pre_incg }
+@Include { pre_prep }
+@Include { pre_incl }
+@Include { pre_bend }
+@Include { pre_verb }
+@Include { pre_unde }
+@Include { pre_page }
+@EndSections
+@End @Chapter
diff --git a/doc/expert/pre_back b/doc/expert/pre_back
new file mode 100644
index 0000000..37de5c5
--- /dev/null
+++ b/doc/expert/pre_back
@@ -0,0 +1,12 @@
+@Section
+ @Title { "@Background" }
+ @Tag { background }
+@Begin
+@PP
+background.sym @Index { @@Background symbol }
+The @@Background symbol will print its left parameter in the
+background of its right parameter. That is, the result has
+the size of the right parameter, but the left parameter will
+be printed first in the same space, with its marks aligned with
+the marks of the right parameter.
+@End @Section
diff --git a/doc/expert/pre_begi b/doc/expert/pre_begi
new file mode 100644
index 0000000..e9adbb1
--- /dev/null
+++ b/doc/expert/pre_begi
@@ -0,0 +1,31 @@
+@Section
+ @Title { "@Begin" and "@End" }
+ @Tag { begin }
+@Begin
+@PP
+The body of a symbol @Code "@Sym" may be enclosed in @@Begin and
+begin. @Index { @@Begin symbol }
+end. @Index { @@End symbol }
+@@End @Code "@Sym" instead of the more usual braces:
+@ID @Code {
+"def @Section"
+" named @Title {}"
+" right @Body"
+"@Begin"
+" @Title //2v @Body"
+"@End @Section"
+}
+They may also enclose the right or body parameter of a symbol invocation:
+@ID @Code {
+"@Chapter"
+" @Title { Introduction }"
+"@Begin"
+"This subject needs no introduction."
+"@End @Chapter"
+}
+Apart from their utility as documentation aids, these forms allow Basser
+Lout to pinpoint mismatched braces, which can otherwise create total
+havoc. For this reason, they should enclose the major parts of documents,
+such as chapters and sections. Note that braces cannot be
+replaced by @@Begin and @@End in general.
+@End @Section
diff --git a/doc/expert/pre_bend b/doc/expert/pre_bend
new file mode 100644
index 0000000..8f742a9
--- /dev/null
+++ b/doc/expert/pre_bend
@@ -0,0 +1,61 @@
+@Section
+ @Tag { backend }
+ @Title { "@BackEnd" and the PlainText and PDF back ends }
+@Begin
+@PP
+backend.sym @Index { @@BackEnd symbol }
+The @@BackEnd symbol, which takes no parameters, has for its result a
+string naming the back end currently in use. Three back ends are available,
+PostScript, PDF and PlainText. The symbol is generally used like this:
+@ID @Code {
+"@BackEnd @Case {"
+" PlainText @Yield { ... }"
+" PostScript @Yield { ... }"
+" PDF @Yield { ... }"
+"}"
+}
+to obtain different objects depending on the back end. No @Code else
+is required since these are the only possible values.
+@PP
+When a @Code "@Case" symbol has @Code "@BackEnd" for its left parameter
+and the left parameter of each @Code "@Yield" symbol within it consists
+of a sequence of one or more literal words (including {@Code else}), Lout
+will optimize by evaluating the @Code "@Case" symbol at the time it is
+read. This optimization ensures that there is only a small once-only
+performance penalty for multiple back ends, and it permits these
+@Code "@Case" symbols (but no other symbols) to appear within the object
+following @Code "@Include" and @Code "@PrependGraphic" symbols.
+@PP
+The PlainText back end differs from the PostScript one in two main
+respects. First, there is effectively just one font: although all
+the font commands work exactly as usual, they don't actually change
+anything. Each character in this font is taken to be one tenth
+of one inch wide and 20 points high. Second, the output is an
+ordinary text file, not a PostScript file.
+@PP
+Clearly, with ordinary text output the possibility of advanced graphics
+features such as rotation and scaling is curtailed. Nevertheless, all
+symbols have well-defined (possibly null) effects in the PlainText
+back end, so there is no additional danger of crashing the system or
+obtaining grossly unreasonable output by a change to PlainText.
+@PP
+The PlainText back end is obtained by the @Code "-p" option to Basser
+Lout. The character size can be changed by adding two lengths to
+the @Code "-p" option, like this:
+@ID @Code "lout -p0.1i12p ..."
+which invokes the PlainText back end with each character being 0.1
+inches wide and 12 points high. However, experience suggests that
+the best approach is to define all horizontal lengths as multiples of
+the @Code "s" unit (the width of a space, hence the width of all
+characters) and to define all vertical lengths as multiples of the
+@Code "f" unit (the font size, equal to the height of every character),
+and not to change the character size in the command line.
+@PP
+There is a @Code "-P" option which is identical with the @Code "-p"
+option except that it inserts a form-feed character between each two
+components of the output, but not before the first or after the last.
+@PP
+The PDF back end is obtained by typing {@Code "lout -Z"}. It is similar
+to PostScript but much more limited in functionality. Consult a separate
+document distributed with Lout for further information.
+@End @Section
diff --git a/doc/expert/pre_brea b/doc/expert/pre_brea
new file mode 100644
index 0000000..b91b2d9
--- /dev/null
+++ b/doc/expert/pre_brea
@@ -0,0 +1,154 @@
+@Section
+ @Title { "@Break" }
+ @Tag { break }
+@Begin
+@PP
+The @@Break symbol influences the appearance of paragraphs (Section
+{@NumberOf concatenation}), offering a fixed set of nine styles:
+@IL
+
+@LI {
+2i @Wide { |1rt @Code adjust @@Break @I object }
+adjust.break @Index { @Code adjust @@Break }
+|2m Break the paragraphs of {@I object} into lines, and apply @@PAdjust
+(Section {@NumberOf hadjust}) to every line except the last in
+each paragraph;
+}
+
+@LI {
+2i @Wide { |1rt @Code outdent @@Break @I object }
+outdent.break @Index { @Code outdent @@Break }
+|2m Like {@Code adjust}, except that @Code "2.0f @Wide {} &0i" is
+inserted at the beginning of every line except the first, creating
+an outdented paragraph;
+}
+
+@LI {
+2i @Wide { |1rt @Code ragged @@Break @I object }
+ragged.break @Index { @Code ragged @@Break }
+|2m Break the paragraphs of {@I object} into lines, but do not adjust
+the lines (`ragged right');
+}
+
+@LI {
+2i @Wide { |1rt @Code cragged @@Break @I object }
+cragged.break @Index { @Code cragged @@Break }
+|2m Like {@Code ragged}, except that each line will be centred with
+respect to the others;
+}
+
+@LI {
+2i @Wide { |1rt @Code rragged @@Break @I object }
+rragged.break @Index { @Code rragged @@Break }
+|2m Like {@Code ragged}, except that each line will be right-justified with
+respect to the others (`ragged left');
+}
+
+@LI {
+2i @Wide { |1rt @Code oragged @@Break @I object }
+oragged.break @Index { @Code oragged @@Break }
+|2m The obvious combination of {@Code ragged} and {@Code outdent};
+}
+
+@LI {
+2i @Wide { |1rt @Code lines @@Break @I object }
+lines.break @Index { @Code lines @@Break }
+|2m Break the paragraphs of {@I object} into lines at the same points
+that they are broken into lines in the input, and also at concatenation
+symbols of the form {@Code "&"}{@I k}{@Code "b"} for any {@I k} greater
+than 1. Do not adjust the lines. Any spaces at the start of a line
+other than the first line will appear in the output;
+}
+
+@LI {
+2i @Wide { |1rt @Code clines @@Break @I object }
+clines.break @Index { @Code clines @@Break }
+|2m Break the paragraphs of {@I object} into lines as for @Code "lines"
+@@Break, then centre each line with respect to the others;
+}
+
+@LI {
+2i @Wide { |1rt @Code rlines @@Break @I object }
+rlines.break @Index { @Code rlines @@Break }
+|2m Break the paragraphs of {@I object} into lines as for @Code "lines"
+@@Break, then right-justify each line with respect to the others.
+}
+
+@EL
+If the paragraph was an entire component of a galley, so will each of
+its lines be; otherwise the lines are enclosed in a {@Code "@OneRow"}
+symbol after breaking.
+@PP
+The length of the gap used to separate the lines produced by paragraph
+breaking is always {@Code 1v}. However, the @Code v unit itself and the
+v.unit.effect @SubIndex { effect on paragraph breaking }
+gap mode may be changed:
+@IL
+
+@LI {
+2i @Wide { |1rt @I gap @Code "@Break" @I object }
+|2m Within {@I object}, take the value of the @Code "v" unit to be the
+length of {@I gap};
+}
+
+@LI {
+2i @Wide { |1rt + & @I gap @Code "@Break" @I object }
+|2m Within {@I object}, take the value of the @Code "v" unit to be
+larger by the length of @I gap than it would otherwise have been;
+}
+
+@LI {
+2i @Wide { |1rt -- & @I gap @Code "@Break" @I object }
+|2m Within {@I object}, take the value of the @Code "v" unit to be
+smaller by the length of @I gap than it would otherwise have been.
+}
+
+@EL
+In each case, the mode of @I gap is adopted within {@I object}.
+@PP
+The @@Break symbol also controls hyphenation:
+@IL
+
+@LI {
+2i @Wide { |1rt @Code "hyphen @Break" @I object }
+hyphen.break @Index { @Code hyphen @@Break }
+|2m Permit hyphenation within the paragraphs of {@I object};
+}
+
+@LI {
+2i @Wide { |1rt @Code "nohyphen @Break" @I object }
+nohyphen.break @Index { @Code nohyphen @@Break }
+|2m Prohibit hyphenation within the paragraphs of {@I object}; all
+hyphenation gaps without exception revert to edge-to-edge mode.
+}
+
+@EL
+The @@Break also has options which control widow and orphan lines:
+@IL
+
+@LI {
+2i @Wide { |1rt @Code "unbreakablefirst @Break" @I object }
+hyphen.break @Index { @Code hyphen @@Break }
+|2m Prevent column and page breaks (i.e. prevent a galley from splitting)
+between the first and second lines of the paragraphs of {@I object};
+}
+
+@LI {
+2i @Wide { |1rt @Code "unbreakablelast @Break" @I object }
+nohyphen.break @Index { @Code nohyphen @@Break }
+|2m Prevent column and page breaks between the last and second
+last lines of the paragraphs of {@I object}.
+}
+
+@EL
+These options work by adding the @Code "u" (unbreakable) suffix to the
+appropriate gaps during paragraph breaking, so their precise effect is
+as described for this suffix. These options may be countermanded by
+@Code "breakablefirst @Break" and @Code "breakablelast @Break".
+@PP
+Several options may be given to the @@Break symbol simultaneously, in
+any order. For example,
+@ID @Code "{ adjust 1.2fx hyphen } @Break ..."
+is a typical initial value. There may be empty objects and @@Null objects
+in the left parameter of @@Break; these are ignored.
+@End @Section
diff --git a/doc/expert/pre_case b/doc/expert/pre_case
new file mode 100644
index 0000000..f0f22e1
--- /dev/null
+++ b/doc/expert/pre_case
@@ -0,0 +1,51 @@
+@Section
+ @Title { "@Case" }
+ @Tag { case }
+@Begin
+@PP
+case.sym @Index { @@Case symbol }
+yield.sym @Index { @@Yield symbol }
+The @@Case symbol selects its result from a list of alternatives,
+depending on a tag:
+@ID @Code {
+"@Day @Case {"
+" { 1 21 31 } @Yield st"
+" { 2 22 } @Yield nd"
+" { 3 23 } @Yield rd"
+" else @Yield th"
+"}"
+}
+In this example the result will be st if @Code "@Day" is 1, 21, or 31,
+and nd if @Code "@Day" is 2 or 22, etc. The effect is similar to
+accessing a database, though in a more compact form. The right parameter
+is a sequence of @@Yield symbols, each with a left parameter whose value is
+a sequence of one or more juxtapositions of simple words, and a right
+parameter which may be any object.
+@PP
+We first describe the behaviour when the value of the left parameter of
+@@Case is a juxtaposition of one or more simple words. Then the result of
+the @@Case is the right parameter of the first @@Yield whose left parameter
+contains either the value of the left parameter of the @@Case, or the special
+value {@Code else}. If there is no such @@Yield it is an error.
+@PP
+When the left parameter of @@Case is not a juxtaposition of simple
+words, the result is the right parameter of the first @@Yield whose
+left parameter is {@Code else}, or an error otherwise. This permits
+examples like
+@ID @Code {
+"@RunningTitle @Case {"
+" dft @Yield @Title"
+" else @Yield @RunningTitle"
+"}"
+}
+where a running title is returned unless it has the value {@Code dft}
+(which presumably means that no running title was supplied), in which
+case an ordinary title is returned instead.
+@PP
+When a receptive symbol is placed within a @@Case, it should be included
+in each alternative, since otherwise Basser Lout may become confused when
+trying to predict whether the symbol will be a part of the result or
+not. Alternatively, if it can be guaranteed that the receptive symbol
+will never be searched for when the cases that it does not lie within
+are selected, that is all right too.
+@End @Section
diff --git a/doc/expert/pre_colo b/doc/expert/pre_colo
new file mode 100644
index 0000000..21ae85b
--- /dev/null
+++ b/doc/expert/pre_colo
@@ -0,0 +1,65 @@
+@Section
+ @Title { "@SetColour" and "@SetColor" }
+ @Tag { colour }
+@Begin
+@PP
+The @@SetColour and @@SetColor symbols,
+setcolour.sym @Index { @@SetColour symbol }
+setcolor.sym @Index { @@SetColor symbol }
+which have identical effect, return their right parameter in
+the colour specified by their left parameter. The form of
+the left parameter is implementation-dependent; in Basser Lout
+it must be an object whose value is a sequence of words comprising
+a PostScript command for setting colour. For example,
+@ID @Code "{ 1.0 0.0 0.0 setrgbcolor } @SetColour { hello, world }"
+produces the red result
+@ID {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 1.0 0.0 0.0 setrgbcolor } @SetColour { hello, world }
+ }
+ PDF @Yield {
+ { 1.0 0.0 0.0 rg 1.0 0.0 0.0 RG } @SetColour { hello, world }
+ }
+ }
+}
+Of course, a colour output device is needed to see the effect; on
+a monochrome device the result will be some shade of grey. The
+@@SetColour command will not accept an empty left parameter
+(it refuses to believe that this could cause a change of colour),
+but otherwise it trusts the user to supply something sensible.
+@PP
+The @@SetColour command accepts the special value {@Code "nochange"}
+for the left parameter. This value causes the right parameter to have
+the colour it would have had without the @@SetColour command.
+@PP
+There is no default colour, so the user must ensure that the root galley
+or each of its components is enclosed in a @@SetColour symbol whose
+left parameter is not {@Code "nochange"}.
+@PP
+Lout makes no attempt to understand colour, it simply prints
+the PostScript commands when appropriate. This has the advantage
+of permitting access to any of PostScript's colour models (some
+require initialization which can be supplied using @@PrependGraphic),
+but the disadvantage of offering no way to make relative changes
+(`as before only redder,' and so on).
+@PP
+For those who wish to obtain colour without working very hard,
+the @Code setrgbcolor command used above is available in every
+version of PostScript, requires no initialization, and is simple
+to use. The three numbers, which range from 0.0 to 1.0, determine
+the intensity of red, green, and blue respectively. Some useful
+values for the left parameter are
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col @I B }
+{
+@Rowa A { 1.0 0.0 0.0 setrgbcolor } B { red }
+@Rowa A { 0.0 1.0 0.0 setrgbcolor } B { green }
+@Rowa A { 0.0 0.0 1.0 setrgbcolor } B { blue }
+@Rowa A { 1.0 1.0 1.0 setrgbcolor } B { white }
+@Rowa A { 0.5 0.5 0.5 setrgbcolor } B { grey }
+@Rowa A { 0.0 0.0 0.0 setrgbcolor } B { black }
+}
+Colouring an object white is useful for producing an empty space
+whose size is that of some object.
+@End @Section
diff --git a/doc/expert/pre_conc b/doc/expert/pre_conc
new file mode 100644
index 0000000..4ce6e2b
--- /dev/null
+++ b/doc/expert/pre_conc
@@ -0,0 +1,325 @@
+@Section
+ @Title { Concatenation symbols and paragraphs }
+ @Tag { concatenation }
+@Begin
+@PP
+There are ten concatenation symbols, in three families:
+concatenation. @Index { Concatenation symbols }
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A ! @Col @Code B ! @Col @Code C ! @Col @Code D ! @Col E }
+{
+@Rowa A { "/" } B { "^/" } C { "//" } D { "^//" } E { Vertical concatenation }
+@Rowa A { "|" } B { "^|" } C { "||" } D { "^||" } E { Horizontal concatenation }
+@Rowa A { "&" } B { "^&" } C { } D { } E {In-paragraph concatenation}
+}
+Each symbol produces an object which combines together the two
+parameters. The right parameter must be separated from the symbol by at
+least one white space character.
+@PP
+The vertical concatenation symbol @Code "/" places its left parameter
+vertical.concatenation @Index { Vertical concatenation }
+above its right parameter with their column marks aligned. If one
+parameter has more column marks than the other, empty columns are
+inserted at the right to equalize the numbers. The variant @Code "//"
+ignores column marks and left-justifies the objects.
+@PP
+The horizontal concatenation symbols @Code "|" and @Code "||" are horizontal
+horizontal.concatenation @Index { Horizontal concatenation }
+analogues of @Code "/" and {@Code "//"}: they place their two parameters side
+by side, with row mark alignment or top-justification respectively. The
+in.paragraph.concatenation @Index { In-paragraph concatenation }
+in-paragraph concatenation symbol @Code "&" produces horizontal concatenation
+within a paragraph; its special properties are treated in detail at the
+end of this section.
+@PP
+The concatenation symbols in any one family are @I { mutually associative },
+which means that
+@ID {
+@Code "{" @I x {@Code "|"}{@I p} @I y @Code "}" {@Code "|"}{@I q} @I z
+}
+is always the same as
+@ID {
+@I x {@Code "|"}{@I p} @Code "{" @I y {@Code "|"}{@I q} @I z @Code "}"
+}
+for any objects {@I x}, {@I y}, and {@I z}, any gaps @I p and @I q (defined
+below), and any choice of {@Code "|"}, {@Code "^|"}, {@Code "||"}, and
+{@Code "^||"}. In practice we always omit such braces, since they are
+redundant and can be misleading. The result of the complete sequence of
+concatenations will be called the {@I{whole concatenation object}}, and
+the objects which make it up will be called the {@I components}.
+@PP
+One mark is designated as the @I { principal mark }, usually the mark of
+principal.mark @Index { Principal mark }
+the first component. A later mark can be chosen for this honour by
+attaching {@Code "^"} to the preceding concatenation symbol. See Section
+{@NumberOf onerow} for examples.
+@PP
+A {@I gap},
+gap @Index Gap
+specifying the distance between the two
+parameters, may follow any concatenation symbol. There may be no spaces
+between a concatenation symbol and its gap. A missing gap is taken
+to be {@Code 0ie}. The gap is effectively a third parameter of the
+concatenation symbol, and it may be an arbitrary object provided that it
+evaluates to a juxtaposition of simple words. In general, the gap must
+be enclosed in braces, like this:
+@ID @Code {
+"//{ @Style&&mystyle @Open { @TopMargin } }"
+}
+but the braces may be omitted when the object is a juxtaposition of
+simple words or an invocation of a symbol without parameters, as in
+@Code "//0.3vx" and {@Code "||@Indent"}.
+@PP
+A gap consists of a length plus a gap mode plus an optional indication
+of unbreakability. A @I length
+length @Index { Length }
+is represented by an decimal number (which may not be negative) followed
+by a unit of measurement. For example, @Code "2.5c" represents the
+length 2.5 centimetres. Figure {@NumberOf units} gives the full selection
+of units of measurement.
+c.unit @Index { @Code c unit }
+p.unit @Index { @Code p unit }
+m.unit @Index { @Code m unit }
+f.unit @Index { @Code f unit }
+s.unit @Index { @Code s unit }
+v.unit @Index { @Code v unit }
+w.unit @Index { @Code w unit }
+b.unit @Index { @Code b unit }
+r.unit @Index { @Code r unit }
+d.unit @Index { @Code d unit }
+
+@Figure
+ @Caption { The thirteen units of measurement provided by Lout. }
+ @Tag { units }
+@Begin
+ @Tab
+ vmargin { 0.3v }
+ side { yes }
+ @Fmta { @Col @Code A ! @Col B }
+ {
+ @Rowa above { yes } A { c } B { Centimetres. }
+ @Rowa A { i } B { Inches.
+}
+ @Rowa A { p } B { Points ({@Code 72p} = {@Code 1i}).
+}
+ @Rowa A { m } B { Ems ({@Code 12m} = {@Code 1i}).
+}
+ @Rowa A { f } B {
+One @Code f equals the size of the current font, as specified by
+the @@Font symbol (Section {@NumberOf font}). This unit is
+appropriate for lengths that should change with the font size.
+}
+ @Rowa A { s } B {
+One @Code s equals the preferred gap between two words in the
+current font, as specified in the definition of the font, or by the
+@@Space symbol (Section {@NumberOf break}).
+}
+ @Rowa A { v } B {
+One @Code v equals the current gap between lines introduced during
+paragraph breaking, as specified by the @@Break symbol (Section
+{@NumberOf break}). This unit is appropriate for lengths, such as the
+spaces between paragraphs, which should change with the inter-line gap.
+}
+ @Rowa A { w } B {
+One @Code w equals the width of the following component, or its height if the
+symbol is vertical concatenation.
+}
+ @Rowa A { b } B {
+One @Code b equals the width of the whole concatenation object,
+or its height if the symbol is vertical concatenation.
+}
+ @Rowa A { r } B {
+One @Code r equals one @Code b minus one {@Code w}. This unit is used
+for centring, and for left and right justification.
+}
+ @Rowa A { d } B {
+Degrees. This unit may only be used with the @Code "@Rotate" symbol.
+}
+ @Rowa A { y } B {
+One @Code y equals the current value set by the @Code "@YUnit"
+symbol (Section {@NumberOf yunit}). This unit is not used internally
+by Lout; it is included for the convenience of application packages.
+}
+ @Rowa below { yes } A { z } B {
+One @Code z equals the current value set by the @Code "@ZUnit"
+symbol (Section {@NumberOf yunit}). This unit is not used internally
+by Lout; it is included for the convenience of application packages.
+}
+ }
+@End @Figure
+
+@PP
+After the length comes an optional @I {gap mode},
+gap.mode @Index { Gap mode }
+which is a single letter following the length, indicating how the length
+is to be measured. As shown in Figure {@NumberOf gapmodes},
+
+@Figure
+ @Tag { gapmodes }
+ @Caption { The six gap modes provided by Lout. }
+@Begin
+@Fig {
+{ /2.5vx Edge-to-edge |0.3i {@Code "|"} &1p {@I l} &1p {@Code e}
+ /4vx Hyphenation |0.3i {@Code "|"} &1p {@I l} &1p {@Code h}
+ /4vx Overstrike |0.3i {@Code "|"} &1p {@I l} &1p {@Code o}
+ /4vx Mark-to-mark |0.3i {@Code "|"} &1p {@I l} &1p {@Code x}
+ /4vx Kerning |0.3i {@Code "|"} &1p {@I l} &1p {@Code k}
+ /4vx Tabulation |0.3i {@Code "|"} &1p {@I l} &1p {@Code t}
+}
+||0.5i
+@Box margin { 0c } 6c @Wide 13.2c @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 l } }
+ }
+ //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 l } }
+ }
+ //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 l } }
+ }
+ //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 { max( {@I {l, a+b+l"/10"}}) } }
+ @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 { 1.2c @Wide 1.5c @High } @Put { @DoubleArrow 3.3c }
+ @At { 1.2c @Wide 1.7c @High }
+ @Put { 3.3c @Wide { |0.5rt max( {@I {l, 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 l }
+ }
+ //5vx
+ @DoubleArrow 6c
+ //0.1c |0.5rt @I { current bound }
+}
+
+}
+@End @Figure
+with edge-to-edge gap mode
+edge.to.edge @Index { Edge-to-edge gap mode }
+e.gap.mode @Index { @Code e gap mode }
+the length @I l is measured from the trailing edge
+of the first object to the leading edge of the second. Edge-to-edge is the
+default mode: the @Code e may be omitted. Hyphenation gap mode is
+hyphenation.gap @Index { Hyphenation gap mode }
+h.gap.mode @Index { @Code h gap mode }
+similar, except as explained at the end of this section.
+@PP
+Mark-to-mark,
+mark.to.mark @Index { Mark-to-mark gap mode }
+x.gap.mode @Index { @Code x gap mode }
+overstrike,
+overstrike @Index { Overstrike gap mode }
+o.gap.mode @Index { @Code o gap mode }
+and kerning
+kerning.mode @Index { Kerning gap mode }
+k.gap.mode @Index { @Code k gap mode }
+measure the length from the last mark
+of the first object to the first mark of the second. In the case of
+mark-to-mark, if the length is too small to prevent the objects
+almost overlapping, it is widened until they no longer do. (The extra
+@I { "l/10" } is not applied when plain text output is in effect.) Kerning
+also widens, with the aim of preventing the mark of either object from
+overlapping the other object; this mode is used for subscripts and
+superscripts.
+@PP
+tabulation @Index { Tabulation gap mode }
+t.gap.mode @Index { @Code t gap mode }
+centring @Index { Centring }
+right.justif @Index { Right justification }
+Tabulation ignores the first object and places the leading edge of the
+second object at a distance @I l from the left edge of the whole
+concatenation object. It is the main user of the @Code b and @Code r
+units of measurement; for example, @Code "|1rt" will right-justify the
+following component, and @Code "|0.5rt" will centre it.
+@PP
+The value @Code "|0rt" separating the first and second items in a
+sequence of horizontally concatenated objects is somewhat special in
+that it denotes left justification of the object to its left in the
+available space. This is identical with @Code "|0ie" when the object to
+the left also has the principal mark; but when it does not, @Code "|0rt"
+will cause the object to the left to appear further to the left than it
+would otherwise have done, if space to do so is available.
+@PP
+A gap is optionally concluded with an indication of unbreakability,
+which is a letter @Code "u" appended to the gap. A paragraph will
+never be broken at an unbreakable gap, nor will a galley be broken
+across two targets at such a gap. Basser Lout's implementation is
+slightly defective in that it ignores any unbreakable indication
+in the gap separating the first component promoted into any target
+from the second.
+@PP
+When two objects are separated only by zero or more white space
+white.space.when @SubIndex { when significant }
+space.f.when @SubIndex { when significant }
+characters (spaces, tabs, newlines, and formfeeds), Lout inserts
+{@Code "&"}{@I k}{@Code "s"} between the two objects, where @I k is the
+number of spaces. Precisely, @I k is determined by discarding all space
+characters and tabs that precede newlines (these are invisible so are
+better ignored), then counting 1 for each newline, formfeed or space,
+and 8 for each tab character. The gap will be unbreakable if @I k
+is zero.
+@PP
+A sequence of two or more objects separated by @Code "&" symbols is a
+paragraph.breaking.in.detail @SubIndex { in detail }
+{@I paragraph}. Lout breaks paragraphs into lines automatically as
+required, by converting some of the @Code "&" symbols into
+{@Code "//1vx"}. Unbreakable gaps are not eligible for this
+conversion. `Optimal' line breaks are chosen, using a
+method adapted from @TeX @Cite { $knuth1984tex }.
+tex @RawIndex { @TeX }
+tex.optimal @SubIndex { optimal paragraph breaking }
+@PP
+If an @Code "&" symbol whose gap has hyphenation mode
+hyphenation @Index { Hyphenation gap mode }
+tex.hyphenation @SubIndex { hyphenation }
+is chosen for replacement by {@Code "//1vx"}, a hyphen will be appended to
+the preceding object, unless that object is a word which already ends with
+a hyphen. For example,
+@ID @Code {
+Long words may be "hyph &0ih enat &0ih ed."
+}
+could have the following result, depending where the line breaks fall:
+@ID 2i @Wide {
+Long words may be hyph &0ih enat &0ih ed.
+}
+Basser Lout inserts hyphenation gaps automatically as required, again
+following the method of @TeX, which approximates the hyphenations in
+Webster's dictionary. To prevent the hyphenation of a single word,
+enclose it in quotes. Further control over paragraph breaking and
+hyphenation is provided by the @@Break and @@Space symbols (Sections
+{@NumberOf break} and {@NumberOf space}).
+@End @Section
diff --git a/doc/expert/pre_cove b/doc/expert/pre_cove
new file mode 100644
index 0000000..c5cf45e
--- /dev/null
+++ b/doc/expert/pre_cove
@@ -0,0 +1,32 @@
+@Section
+ @Title { "@HCover" and "@VCover" }
+ @Tag { hcover }
+@Begin
+@PP
+hcover. @Index { @@HCover symbol }
+vcover. @Index { @@VCover symbol }
+The @@VCover symbol vertically scales its right parameter so that it
+covers every object that shares its row mark. For example,
+@ID @Code "@VCover ( 45d @Rotate Hello @VCover )"
+produces
+@ID @ShowHMark { @VCover ( 45d @Rotate Hello @VCover ) }
+The row mark has been added to show clearly where it lies. This should be
+compared with
+@ID @Code "@VScale ( 45d @Rotate Hello @VScale )"
+which produces
+@ID @ShowHMark { @VScale ( 45d @Rotate Hello @VScale ) }
+Scaling abandons mark alignment and so is able to exactly cover the
+rest of the row, whereas covering preserves mark alignment and so
+is obliged in general to more than cover the rest of the row.
+@PP
+If the parameter of @@VCover has zero vertical size, this is taken
+to mean that covering is not required after all and the @@VCover is
+silently ignored. If however the parameter has non-zero size above
+the mark but zero size below, or vice versa, this is taken to be an error
+since scaling cannot make the parameter cover the rest of the row.
+@PP
+@@HCover is similar, horizontally covering all objects that share
+its column mark. Neither symbol works well near galley targets,
+because the scale factor to apply is determined before any galley
+flushing takes place.
+@End @Section
diff --git a/doc/expert/pre_cros b/doc/expert/pre_cros
new file mode 100644
index 0000000..d300e86
--- /dev/null
+++ b/doc/expert/pre_cros
@@ -0,0 +1,36 @@
+@Section
+ @Title { The cross reference symbols "&&" and "&&&" }
+ @Tag { crossref }
+@Begin
+@PP
+The cross reference symbol @Code "&&" takes the name of a symbol (not an
+object) for its left parameter, and an object whose value must be a
+simple word, or several simple words, for its right parameter. The
+result is a cross reference, which may be thought of as an arrow pointing
+from the cross reference symbol to the beginning of an invocation of the
+named symbol.
+@PP
+The invocation pointed to, known as the @I target of the cross
+reference, is generally one whose @@Tag parameter has value equal
+to the right parameter of the cross reference symbol. Three special tags,
+{@Code preceding}, {@Code following}, and {@Code foll_or_prec}, point
+respectively to the first invocation preceding the cross reference in
+the final printed document, to the first invocation following it, and
+to the first following it if such exists else to the first preceding it.
+@PP
+A cross reference may be used in four ways: where an object is
+expected, in which case its value is a copy of the target; with the
+@@Open and @@Use symbols; with the @@Tagged symbol; and in the
+@Code into clause or @Code "@Target" symbol of a galley definition, in
+which case the value of the tag must be {@Code preceding},
+{@Code following}, or {@Code foll_or_prec}.
+@PP
+Within an @Code "into" clause or @Code "@Target" symbol, the alternative
+form @Code "&&&" is acceptable and indicates a forcing galley (Section
+{@NumberOf targets}).
+@PP
+Except within an @Code into clause or @Code "@Target" symbol, the symbol
+referred to must have a @@Tag parameter. This is so even if the right
+parameter of the cross reference is {@Code preceding}, {@Code following},
+or {@Code foll_or_prec}.
+@End @Section
diff --git a/doc/expert/pre_data b/doc/expert/pre_data
new file mode 100644
index 0000000..e7bb643
--- /dev/null
+++ b/doc/expert/pre_data
@@ -0,0 +1,37 @@
+@Section
+ @Title { "@Database and @SysDatabase" }
+ @Tag { database }
+@Begin
+@PP
+database.sym @Index { @@Database symbol }
+The @@Database symbol is used to declare the existence of a file
+of symbol invocations that Lout may refer to when evaluating cross
+references. In Basser Lout, for example,
+@ID @Code {
+"@Database @Months @WeekDays { standard }"
+}
+means that there is a file called @Code "standard.ld" containing
+invocations of the previously defined symbols @Code "@Months" and
+{@Code "@WeekDays"}. A @@Database symbol may appear anywhere a definition
+or a @@Use symbol may appear. Different definitions packages may refer to a
+common database, provided the definitions they give for its symbols are
+compatible. An entry is interpreted as though it appears at the point
+where the cross reference that retrieves it does, which allows symbols
+like @Code "@I" for @Code "Slope @Font" to be used in databases. The
+database file may not contain @@Database or @@Include symbols, and each
+invocation within it must be enclosed in braces.
+@PP
+Basser Lout constructs an {@I {index file}},
+index.file @Index { Index file (for databases) }
+which in this example is called {@Code "standard.li"}, the first time it
+ever encounters the database, as an aid to searching it. If the database
+file is changed, its index file must be deleted by the user so that
+Basser Lout knows to reconstruct it. There is also an installation
+option which allows this deletion to be done automatically on suitable
+systems (including Unix).
+@PP
+Basser Lout searches for databases in the current directory first, then
+in a sequence of standard places. To search the standard places only, use
+sysdatabase.sym @Index { @@SysDatabase symbol }
+@@SysDatabase.
+@End @Section
diff --git a/doc/expert/pre_font b/doc/expert/pre_font
new file mode 100644
index 0000000..f014e73
--- /dev/null
+++ b/doc/expert/pre_font
@@ -0,0 +1,146 @@
+@Section
+ @Title { "@Font" and "@Char" }
+ @Tag { font }
+@Begin
+@PP
+A @I font
+font. @Index { Fonts }
+is a collection of characters which may be
+printed. Many fonts come in {@I families},
+family @Index { Family of a font }
+face @Index { Face of a font }
+which are groups of fonts that
+have been designed to go together. For example, the Times family
+includes the following fonts:
+@ID { Times Base } @Font {
+ Base @Font { Times Base }
+//1vx Slope @Font { Times Slope }
+//1vx Bold @Font { Times Bold }
+//1vx BoldSlope @Font { Times BoldSlope }
+}
+Thus, each font has two names: its @I { family name } (Times,
+Helvetica, etc.) and its @I { face name } (Base, Slope, etc.). Times
+Base is more commonly called Times Roman, and Times Slope is more
+commonly called Times Italic. Lout avoids these names in favour of
+generic names which can be applied to many font families.
+@PP
+Ligatures,
+ligatures @Index Ligatures
+kerning @Index Kerning
+such as fl for {@OneCol f}l and fi for {@OneCol f}i, are considered by
+Basser Lout to be an integral part of the font: if the font definition
+(see below) mentions them, they will be used. Similarly, kerning (fine
+adjustment of the space between adjacent characters to improve the
+appearance) is done whenever indicated in the font definition. Enclosing
+one of the letters in @@OneCol is one sure way to disable a ligature or kern.
+@PP
+The @@Font symbol
+font.sym @Index { @@Font symbol }
+returns its right parameter in a font and size specified by its left:
+@ID {
+@Code "{ Times Base 12p } @Font" @I object
+}
+The family and face names must have appeared together in a {@Code fontdef};
+the size is arbitrary and may be given in any one of the {@Code "c"},
+{@Code "i"}, {@Code "p"}, {@Code "m"}, {@Code "f"}, {@Code "s"}, and
+{@Code "v"} units of measurement (Section {@NumberOf concatenation}),
+although @Code 10p and @Code 12p are the most common sizes for text. There
+may be empty objects and @@Null objects in the left parameter of @@Font;
+these are ignored.
+@PP
+When a @@Font symbol is nested inside the right parameter of
+another @@Font symbol, the inner one determines the font of its
+own right parameter. However, it may be abbreviated so as to inherit
+part of the outer symbol:
+@ID @Code {
+"{ Times Base 12p } @Font"
+"{ hello, Slope @Font hello, 15p @Font hello }"
+}
+has result
+@ID {
+{ Times Base 12p } @Font
+{ hello, Slope @Font hello, 15p @Font hello }
+}
+The first inner @@Font inherits the outer family and size, changing only
+the face; the second inherits the outer family and face. When a family
+name is given, it must be followed immediately by a face name. A size
+change may appear first or last.
+@PP
+Sizes of the form +{@I length} and --{@I length} may also be used,
+meaning that the font size is to be @I length larger or smaller than
+the inherited value. For example, --{@Code "2p"} is often used for
+superscripts and subscripts. These forms are highly recommended, since
+they don't need to be changed if a decision is made to alter the font
+size of the document as a whole.
+@PP
+The @@Font symbol also switches to and from small capitals:
+"smallcaps" @Index { small capitals }
+@ID @Code {
+"smallcaps @Font ..."
+"nosmallcaps @Font ..."
+}
+These may be nested, and they cooperate with other font changes. The
+precise effect depends on the font (see below). There is a default
+value (@Code {"nosmallcaps"}), so it is not necessary to mention this
+attribute when giving an initial font.
+@PP
+There are two predefined symbols, @@CurrFamily and @@CurrFace, which
+respectively return the family and face names of the current font. For
+example, right now @@CurrFamily is @CurrFamily and @@CurrFace is
+@CurrFace.
+@PP
+When Lout runs, the first thing it reads is a list of font definitions,
+font.def @Index { @Code fontdef }
+like these:
+@ID {
+ @Code "fontdef Times Base {" @I implementation-dependent @Code "}"
+//1vx @Code "fontdef Times Slope {" @I implementation-dependent @Code "}"
+}
+Each line tells Lout of the existence of a font, and assigns it a family
+name and a face name. There are a few fonts which are the only members
+of their families; even though these fonts do not need a face name, they
+must be given one by their {@Code fontdef}. The part between braces may
+vary with different implementations of Lout; it is supposed to contain
+the information Lout needs to work with the font.
+@PP
+In Basser Lout Version 3, this implementation-dependent part consists of
+a PostScript font name, an
+adobe @Index { Adobe Systems, Inc. }
+Adobe font metrics (formerly AFM) file whose FontName entry must agree
+with the PostScript font name just mentioned, the name of a Lout
+Character Mapping (LCM) file, and the word @Code Recode or {@Code NoRecode}:
+@ID @Code
+"fontdef Times Base { Times-Roman Ti-Ro LtLatin1.LCM Recode }"
+It seems to have become an invariable rule at Adobe Systems that the font
+name and the file name should be the same, but some operating systems do
+not permit such long file names, so Lout does not use them. The files are
+searched for in standard places. Consult the PostScript Reference Manual
+@Cite { $adobe1990ps } for general information about fonts and encoding
+vectors; briefly, an 8-bit
+lcm. @Index { LCM file }
+character code @I c in Lout's input is mapped to the character in the
+Adobe font metrics file whose name appears on the line labelled @I c in the
+LCM file. The LCM file also defines various character-to-character
+mappings, such as upper-case to lower-case, which are used for various
+purposes, such as the production of small capitals. If the word
+@Code NoRecode appears, Lout assumes that the given encoding vector is
+already associated with this font in the PostScript interpreter, and
+optimizes its output accordingly.
+@PP
+If there are two font definitions with the same family and face name,
+it is an error unless the second one has the same font name and file name
+as the first, in which case it is silently ignored. A PostScript font
+name and file may appear in two or more font definitions, allowing one
+PostScript font to have two or more equally valid Lout names, and
+different LCM files.
+@PP
+The @@Char symbol
+char @Index { @@Char symbol }
+allows a character to be specified by its name (its PostScript name in
+Basser Lout) rather than by its code:
+@ID @Code "@Char nine"
+is equivalent to @Code "9" in most fonts. This is useful as a
+documentation aid and to be sure of getting the right character even if the
+encoding vector of the font is changed. However @@Char will fail if the
+character named is not in the encoding vector of the current font.
+@End @Section
diff --git a/doc/expert/pre_gall b/doc/expert/pre_gall
new file mode 100644
index 0000000..a13aab9
--- /dev/null
+++ b/doc/expert/pre_gall
@@ -0,0 +1,14 @@
+@Section
+ @Title { "@Galley" and "@ForceGalley" }
+ @Tag { galley }
+@Begin
+@PP
+These symbols
+galley.sym @Index { @@Galley symbol }
+galley.sym @Index { @@ForceGalley symbol }
+both act as a placeholder for a galley. That is, they may be replaced
+by components of a galley. In the case of @@ForceGalley the galley will
+then have a forcing galley effect at this point although it need not be
+declared using {@Code "force into"}. See Section {@NumberOf targets}
+for a detailed discussion of galleys, forcing galleys, and targets.
+@End @Section
diff --git a/doc/expert/pre_grap b/doc/expert/pre_grap
new file mode 100644
index 0000000..e75dd21
--- /dev/null
+++ b/doc/expert/pre_grap
@@ -0,0 +1,284 @@
+@Section
+ @Title { "@Graphic" }
+ @Tag { graphic }
+@Begin
+@PP
+graphic.sym @Index { @@Graphic symbol }
+diagrams @Index { Diagrams }
+Lout does not provide the vast repertoire of graphical objects (lines,
+circles, boxes, etc.) required by diagrams. Instead, it provides an
+escape route to some other language that does have these features, via
+its @@Graphic symbol:
+postscript.graphic @SubIndex { used by @@Graphic }
+@ID @OneRow @OneRow @Code {
+"{ 0 0 moveto"
+" 0 ysize lineto"
+" xsize ysize lineto"
+" xsize 0 lineto"
+" closepath"
+" stroke"
+"}"
+"@Graphic"
+"{ //0.2c"
+" ||0.2c hello, world ||0.2c"
+" //0.2c"
+"}"
+}
+The result of the above invocation of the symbol @@Graphic is
+@ID @OneRow @OneRow {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto
+ 0 ysize lineto
+ xsize ysize lineto
+ xsize 0 lineto
+ closepath
+ stroke
+ }
+ @Graphic
+ { //0.2c
+ ||0.2c hello, world ||0.2c
+ //0.2c
+ }
+ }
+ PDF @Yield {
+ { 0 0 m
+ 0 __ysize l
+ __xsize __ysize l
+ __xsize 0 l
+ s
+ }
+ @Graphic
+ { //0.2c
+ ||0.2c hello, world ||0.2c
+ //0.2c
+ }
+ }
+ }
+}
+@PP
+The right parameter always appears as part of the result, and indeed the
+result is always an object whose size is identical to the size of the
+right parameter with @@OneCol and @@OneRow applied to
+it. From now on we refer to this part of the result as the {@I base}.
+@PP
+The left parameter is implementation-dependent: that is, its
+meaning is not defined by Lout, and different implementations could
+require different values for it. The following description applies to
+Basser Lout, which uses the PostScript page description language
+@Cite { $adobe1990ps }. Similar but more restricted possibilities exist
+with the PDF back end (see a separate document distributed with Lout);
+to include both, use the @@BackEnd symbol like this:
+@ID @OneRow @Code {
+"{ @BackEnd @Case {"
+" PostScript @Yield"
+" {"
+" ..."
+" }"
+" PDF @Yield"
+" {"
+" ..."
+" }"
+" }"
+" @Graphic"
+" {"
+" ..."
+" }"
+"}"
+}
+Returning to PostScript, the left parameter refers to a coordinate system
+whose origin is the bottom left-hand corner of the base. It may use the symbols
+@Code xsize and @Code ysize to denote the horizontal and vertical size
+of the base; similarly, @Code xmark and @Code ymark denote the positions
+of the base's column and row marks:
+@ID @OneRow 9p @Font @Fig {
+ { &1rt @I ysize /0ik &1rt @I ymark /0ik &1rt 0 } |0.4c
+ { /
+ |0ik @ShowMarks { 1c @High 1.5c @Wide ^| 3c @Wide ^/ 2c @High }
+ |0ik /
+ }
+ /0.2c
+ | 0 | @I xmark | @I xsize
+}
+In addition to these four symbols and 0, lengths may be denoted in
+centimetres, inches, points, ems, f's, v's and s's using the notation
+@ID @OneRow @Tab
+ vmargin { 0.5vx }
+ hmargin { 1m }
+ @Fmta { @Col {@I l @Code A} ! @Col {instead of Lout's} ! @Col {{@I l}B} }
+{
+@Rowa A { cm } B { c }
+@Rowa A { in } B { i }
+@Rowa A { pt } B { p }
+@Rowa A { em } B { m }
+@Rowa A { ft } B { f }
+@Rowa A { vs } B { v }
+@Rowa A { sp } B { s }
+}
+Note that there must be a space between the number and its unit,
+unlike Lout proper.
+@PP
+A point within the base (and, with care, a point outside it) may
+be denoted by a pair of lengths. For example,
+@ID @OneRow @Code {
+"xmark ymark"
+}
+is the point where the marks cross, and
+@ID @OneRow @Code {
+"0 2 cm"
+}
+is a point on the left edge, two centimetres above the bottom left-hand
+corner. These two numbers are called the @I {x coordinate} and the
+@I {y coordinate} of the point.
+@PP
+The first step in specifying a graphic object is to define a
+{@I path}. A path can be thought of as the track of a pen moving over
+the page. The pen may be up (not drawing) or down (drawing a line or
+curve) as it moves. The entire path is a sequence of the following
+items:
+@LP
+2i @Wide { |1rt @I {x y} @Code moveto }
+|2m Lift the pen and move it to the indicated point.
+@JP
+2i @Wide { |1rt @I {x y} @Code lineto }
+|2m Put the pen down and draw a straight line to the indicated point.
+@JP
+2i @Wide { |1rt @I {x y r angle1 angle2} @Code arc }
+|2m Put the pen down and draw a circular arc whose centre has
+coordinates @I x and @I y and whose radius is {@I r}. The arc begins
+at the angle @I angle1 measuring counterclockwise from the point
+directly to the right of the centre, and proceeds counterclockwise to
+{@I angle2}. If the arc is not the first thing on the path, a straight
+line will be drawn connecting the current point to the start of the arc.
+@JP
+2i @Wide { |1rt @I {x y r angle1 angle2} @Code arcn }
+|2m As for arc, but the arc goes clockwise from @I angle1 to
+{@I angle2 }.
+@JP
+2i @Wide @Code { |1rt closepath }
+|2m Draw a straight line back to the point most recently moved to.
+@LP
+The first item should always be a {@Code moveto}, {@Code arc}, or
+{@Code arcn}. It should be clear from this that the path given earlier:
+@ID @OneRow @Code {
+"0 0 moveto"
+"0 ysize lineto"
+"xsize ysize lineto"
+"xsize 0 lineto"
+"closepath"
+}
+traces around the boundary of the base with the pen down.
+@PP
+Once a path is set up, we are ready to @I paint it onto the page. There
+are two choices: we can either @I stroke it, which means to display it
+as described; or we can @I fill it, which means to paint everything
+inside it grey or black. For stroking the two main options are
+@IL
+@LI {
+2i @Wide { |1rt @I length @Code setlinewidth }
+|2m The pen will draw lines of the given width.
+}
+@LI {
+2i @Wide { |1rt @Code "[" @I length @Code {"]" 0 setdash} }
+|2m The pen will draw dashed lines when it is down, with the dashes each
+of the given length.
+}
+@EL
+These options are followed by the word {@Code "stroke"}. So, for example,
+@ID @OneRow @Code {
+"{ 0 0 moveto xsize 0 lineto"
+" 2 pt setlinewidth [ 5 pt ] 0 setdash stroke"
+"}"
+"@Graphic { 3i @Wide }"
+}
+has result
+@ID @OneRow {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto xsize 0 lineto
+ 2 pt setlinewidth [ 5 pt ] 0 setdash stroke
+ }
+ @Graphic { 3i @Wide }
+ }
+ PDF @Yield {
+ { [ __mul(5, __pt) ] 0 d __mul(2, __pt) w 0 0 m __xsize 0 l S
+ }
+ @Graphic { 3i @Wide }
+ }
+ }
+}
+@PP
+When filling in the region enclosed by a path, the main option is
+{@Code setgray}, which determines the shade of grey to use, on a scale
+from 0 (black) to 1 (white). So, for example,
+@ID @OneRow @Code {
+"{ 0 0 moveto xsize 0 lineto 0 ysize lineto closepath"
+" 0.8 setgray fill"
+"}"
+"@Graphic"
+"{ 2c @Wide 2c @High }"
+}
+has result
+@ID @OneRow {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto xsize 0 lineto 0 ysize lineto closepath
+ 0.8 setgray fill
+ }
+ @Graphic
+ { 2c @Wide 2c @High }
+ }
+ PDF @Yield {
+ { 0 0 m __xsize 0 l 0 __ysize l h
+ 0.8 g f
+ }
+ @Graphic
+ { 2c @Wide 2c @High }
+ }
+ }
+}
+@PP
+There are many other options. The value of the left parameter of
+@@Graphic may be any fragment of the PostScript page description language
+@Cite { $adobe1990ps }. Here are two other examples:
+@ID @OneRow @Code {
+xsize 2 div
+}
+denoting a length equal to half the horizontal size of the base, and
+@ID @OneRow @Code {
+gsave fill grestore stroke
+}
+which both fills and strokes the path. Since Basser Lout does not check
+that the left parameter is valid PostScript, it is possible to cause
+mysterious errors in the printing device, resulting in no output, if an
+incorrect value is given. It is a good idea to encapsulate graphics
+objects in carefully tested definitions, like those of the Diag figure
+drawing package @Cite { $kingston1995lout.user, Chapter 9 },
+diag @Index { Diag diagram-drawing package }
+to be sure of avoiding these errors.
+@PP
+PostScript experts may find the following information helpful when
+designing advanced graphics features. The left parameter of @@Graphic
+may have two parts, separated by {@Code "//"}:
+@ID @OneRow {
+@Code "{" @I {first part} @Code "//" @I {second part} @Code "} @Graphic"
+@I object
+}
+If there is no {@Code "//"}, the second part is taken to be empty. The
+PostScript output has the form
+@ID @OneRow lines @Break {
+@Code gsave
+@I x @I y @Code translate
+@I {Code which defines {@Code xsize}, {@Code ysize}, {@Code xmark}, {@Code ymark}, {@Code ft}, {@Code vs}, and {@Code sp} }
+@Code gsave
+@I {first part}
+@Code grestore
+@I {Code which renders the right parameter in translated coordinates}
+@I {second part}
+@Code grestore
+}
+where @Eq {x, y} is the position of the lower left corner of the
+base. Having two parts permits bracketing operations, like @Code save
+and @Code restore or @Code begin and {@Code end}, to enclose an
+object. See the source file of the Diag package for examples.
+@End @Section
diff --git a/doc/expert/pre_hadj b/doc/expert/pre_hadj
new file mode 100644
index 0000000..4ca9fe0
--- /dev/null
+++ b/doc/expert/pre_hadj
@@ -0,0 +1,33 @@
+@Section
+ @Title { "@HAdjust", "@VAdjust", and "@PAdjust" }
+ @Tag { hadjust }
+@Begin
+@PP
+padjust. @Index { @@PAdjust symbol }
+hadjust. @Index { @@HAdjust symbol }
+vadjust. @Index { @@VAdjust symbol }
+adjustment @Index { Adjustment of object }
+These symbols spread their right parameter apart until it occupies
+all the space available to it; @@HAdjust adjusts @Code "|" sequences,
+@@VAdjust adjusts @Code "/" sequences, and @@PAdjust adjusts @Code "&"
+sequences. For example,
+@ID @Code {
+"4i @Wide @PAdjust { 1 2 3 4 5 6 7 8 }"
+}
+has result
+@ID {
+4i @Wide @PAdjust { 1 2 3 4 5 6 7 8 }
+}
+More precisely, the widening is effected by enlarging the size of each
+component except the last by an equal fraction of the space that would
+otherwise be left over -- just the opposite of the usual procedure,
+which assigns all the leftover space to the last component (Section
+{@NumberOf size}).
+@PP
+@@PAdjust is used by the @Code adjust and @Code outdent options of
+the @@Break symbol (Section {@NumberOf break}). It has a slight
+peculiarity: it will not enlarge components when the immediately
+following gap has width 0. This is to prevent space from appearing
+(for example) between a word and an immediately following comma. The
+other two symbols will enlarge such components.
+@End @Section
diff --git a/doc/expert/pre_hcon b/doc/expert/pre_hcon
new file mode 100644
index 0000000..0d409c0
--- /dev/null
+++ b/doc/expert/pre_hcon
@@ -0,0 +1,17 @@
+@Section
+ @Title { "@HContract" and "@VContract" }
+ @Tag { hcontract }
+@Begin
+@PP
+hcontract. @Index { @@HContract symbol }
+vcontract. @Index { @@VContract symbol }
+contraction @Index { Contraction of object }
+The @@HContract symbol reduces the size of its right parameter to a
+reasonable minimum (after paragraph breaking). For example,
+@ID @Code "5i @Wide @HContract { A |1rt B }"
+has result
+@ID { 5i @Wide @HContract { A |1rt B } }
+in which the B is much closer to the A than it would otherwise have
+been. @@VContract is similar, but in a vertical direction. See
+Section {@NumberOf size} for a more extensive discussion.
+@End @Section
diff --git a/doc/expert/pre_hexp b/doc/expert/pre_hexp
new file mode 100644
index 0000000..937e746
--- /dev/null
+++ b/doc/expert/pre_hexp
@@ -0,0 +1,29 @@
+@Section
+ @Title { "@HExpand" and "@VExpand" }
+ @Tag { hexpand }
+@Begin
+@PP
+hexpand. @Index { @@HExpand symbol }
+vexpand. @Index { @@VExpand symbol }
+expansion @Index { Expansion of object }
+The @@HExpand symbol causes its right parameter to be as wide as it
+possibly could be without violating a @@Wide symbol or intruding into
+the space occupied by neighbouring gaps or objects. The @@VExpand
+symbol is similar, but it affects height. For example, in the object
+@ID @Code {
+"8i @Wide 11i @High {"
+" //1i ||1i @HExpand @VExpand x ||1i"
+" //1i"
+"}"
+}
+object @Code x could have any size up to six inches wide by nine inches
+high, so the @@HExpand and @@VExpand symbols cause it to have exactly
+this size. This is important, for example, if @Code x contains
+@Code "|1rt" or {@Code "/1rt"}; without the expansion these might not
+move as far across or down as expected.
+@PP
+As Section {@NumberOf size} explains in detail, most objects are
+already as large as they possibly could be. Consequently these symbols
+are needed only rarely. @@HExpand includes a @@OneCol effect, and
+@@VExpand includes a @@OneRow effect.
+@End @Section
diff --git a/doc/expert/pre_hlim b/doc/expert/pre_hlim
new file mode 100644
index 0000000..ccf9548
--- /dev/null
+++ b/doc/expert/pre_hlim
@@ -0,0 +1,18 @@
+@Section
+ @Title { "@HLimited" and "@VLimited" }
+ @Tag { hlimited }
+@Begin
+@PP
+hlimited. @Index { @@HLimited symbol }
+vlimited. @Index { @@VLimited symbol }
+The @@HLimited symbol limits the width available to recursive
+and receptive symbols within its right parameter to whatever
+is available without increasing the existing size of the
+@@HLimited object. So this symbol acts like @@Wide with
+respect to limiting the space occupied by recursive and receptive
+symbols, except that instead of enforcing a fixed constant limit,
+it enforces whatever size is already in place.
+@PP
+The @@VLimited symbol is exactly the same, except that it
+applies vertically rather than horizontally.
+@End @Section
diff --git a/doc/expert/pre_hsca b/doc/expert/pre_hsca
new file mode 100644
index 0000000..e224685
--- /dev/null
+++ b/doc/expert/pre_hsca
@@ -0,0 +1,34 @@
+@Section
+ @Title { "@HScale" and "@VScale" }
+ @Tag { hscale }
+@Begin
+@PP
+hscale. @Index { @@HScale symbol }
+vscale. @Index { @@VScale symbol }
+scaling @Index { Scaling of object }
+@@HScale causes its right parameter to expand to fill the space available,
+by geometricallly scaling it:
+@ID @Code {
+"4i @Wide @HScale { 1 2 3 4 5 6 7 8 }"
+}
+has result
+@ID {
+4i @Wide @HScale { 1 2 3 4 5 6 7 8 }
+}
+and
+@ID @Code {
+"0.5i @Wide @HScale { 1 2 3 4 5 6 7 8 }"
+}
+has result
+@ID {
+0.5i @Wide @HScale { 1 2 3 4 5 6 7 8 }
+}
+@@HScale first applies @@HContract to its parameter, then horizontally
+scales it to the actual size. The principal mark of the right parameter
+has no effect on the result; the parameter is scaled to the actual size
+and positioned to fill the space available. (Taking account of alignment
+of the principal mark only causes trouble in practice.)
+@PP
+@@VScale is similar, but in a vertical direction. @@HScale and @@VScale
+each have both a @@OneCol and a @@OneRow effect.
+@End @Section
diff --git a/doc/expert/pre_hshi b/doc/expert/pre_hshi
new file mode 100644
index 0000000..6d28222
--- /dev/null
+++ b/doc/expert/pre_hshi
@@ -0,0 +1,43 @@
+@Section
+ @Title { "@HShift" and "@VShift" }
+ @Tag { hshift }
+@Begin
+@PP
+The @@HShift symbol
+hshift.sym @Index { @@HShift symbol }
+returns its right parameter with principal mark shifted as prescribed
+by its left parameter:
+@IL
+
+@LI {
+2i @Wide { |1rt @Code + & @I length @@HShift @I object }
+|2m Principal mark shifted to the right by {@I length};
+}
+
+@LI {
+2i @Wide { |1rt @Code - & @I length @@HShift @I object }
+|2m Principal mark shifted to the left by {@I length};
+}
+
+@LI {
+2i @Wide { |1rt @I length @@HShift @I object }
+|2m Principal mark shifted so as to lie @I length to the right
+of the left edge of {@I object};
+}
+
+@EL
+In each chase @@HShift includes a @@OneCol effect.
+@PP
+The units of measurement of @I length may be {@Code "c"}, {@Code "i"},
+{@Code "p"}, {@Code "m"}, {@Code "f"}, {@Code "s"}, {@Code "v"}, or
+{@Code "w"}. In the latter case, @Code "1w" is taken to be the width
+of the right parameter, so that, for example, @Code "0.5w @HShift" will
+centre the principal column mark within the right parameter.
+@PP
+vshift.sym @Index { @@VShift symbol }
+The @@VShift symbol is similar except that it applies vertically to the
+principal row mark: @Code + & @I length shifts it down, @Code - & @I
+length shifts it up, and @I length shifts it to @I length below the top
+edge of the object. With @@VShift, @Code "1w" is taken to be the height
+of the right parameter.
+@End @Section
diff --git a/doc/expert/pre_incg b/doc/expert/pre_incg
new file mode 100644
index 0000000..a370c5c
--- /dev/null
+++ b/doc/expert/pre_incg
@@ -0,0 +1,36 @@
+@Section
+ @Title { "@IncludeGraphic" and "@SysIncludeGraphic" }
+ @Tag { includegraphic }
+@Begin
+@PP
+includegraphic.sym @Index { @@IncludeGraphic symbol }
+sysincludegraphic.sym @Index { @@SysIncludeGraphic symbol }
+postscript.includegraphic @SubIndex { used by @@IncludeGraphic }
+These symbols instruct Lout to incorporate a separately created
+illustration:
+@ID @Code "@IncludeGraphic \"myportrait.eps\""
+The parameter is implementation-dependent; in Basser Lout it is an
+object whose value is a simple word denoting the name of a file. This
+file should ideally be a PostScript EPS Version 3.0 file
+@Cite { $adobe1990ps }, since then Lout will keep careful track of what
+resources are required for printing that file. However, any PostScript
+file containing the @Code "%%BoundingBox:" comment and not requiring
+unusual resources is likely to work.
+@PP
+The result of @@IncludeGraphic is an ordinary Lout object with marks
+through its centre. It may be rotated, scaled, and generally
+treated like any other object. Basser Lout determines its size by
+consulting the bounding box information in the file. If this cannot be
+found, a warning message is printed and the result object has zero size.
+@PP
+@@IncludeGraphic searches the same directories that @@Include does
+(Section {@NumberOf include}). @@SysIncludeGraphic is the same as
+@@IncludeGraphic, except that it searches only the directories searched
+by @@SysInclude.
+@PP
+If the file name ends in any of {@Code ".gz"}, {@Code "-gz"}, {@Code ".z"},
+{@Code "-z"}, {@Code "_z"}, or {@Code ".Z"}, the file will first be
+uncompressed using the @Code "gunzip" command into a temporary file
+called @Code "lout.eps" in the current directory. This file is removed
+immediately after it is copied into the output file.
+@End @Section
diff --git a/doc/expert/pre_incl b/doc/expert/pre_incl
new file mode 100644
index 0000000..c531096
--- /dev/null
+++ b/doc/expert/pre_incl
@@ -0,0 +1,20 @@
+@Section
+ @Tag { include }
+ @Title { "@Include and @SysInclude" }
+@Begin
+@PP
+include.sym @Index { @@Include symbol }
+sysinclude.sym @Index { @@SysInclude symbol }
+These symbols instruct Lout to temporarily switch to reading another
+file, whose name appears in braces following the symbol. For example,
+@ID @Code {
+"@Include { \"/usr/lout/fontdefs\" }"
+}
+will cause the contents of file "/usr/lout/fontdefs" to be read at the
+point it occurs. After that file is read, the current file is resumed. The
+included file may contain arbitrary Lout text, including other
+@@Include commands. The file is searched for first in the current
+directory, then in a sequence of standard places which are not necessarily the
+same places that databases are searched for. @@SysInclude searches the
+standard places only.
+@End @Section
diff --git a/doc/expert/pre_inse b/doc/expert/pre_inse
new file mode 100644
index 0000000..e981359
--- /dev/null
+++ b/doc/expert/pre_inse
@@ -0,0 +1,19 @@
+@Section
+ @Title { "@Insert" }
+ @Tag { insert }
+@Begin
+@PP
+insert.sym @Index { @@Insert symbol }
+The @@Insert symbol inserts its left parameter at the beginning of the
+first paragraph of its right parameter:
+@ID @Code "X @Insert { A B // C // D }"
+is equivalent to
+@ID @Code "{ XA B // C // D }"
+Notice that a zero-width space separates @Code { X } from the first
+paragraph, so if some wider space is required it must be placed at the
+end of @Code { X }. The @Code "@Insert" operation is applied to the
+value of the right parameter after evaluation.
+@PP
+The only known use for this symbol is to attach something like
+@B { Figure 6 } to the front of a multi-paragraph caption.
+@End @Section
diff --git a/doc/expert/pre_kshr b/doc/expert/pre_kshr
new file mode 100644
index 0000000..517cb89
--- /dev/null
+++ b/doc/expert/pre_kshr
@@ -0,0 +1,23 @@
+@Section
+ @Title { "@KernShrink" }
+ @Tag { kernshrink }
+@Begin
+@PP
+kernshrink. @Index { @@KernShrink symbol }
+This symbol returns its right parameter unchanged in appearance but
+occupying a slightly smaller bounding box. The reduction is by the
+amount of kerning that would be applied if the right parameter was
+immediately @I followed by the left parameter. For example,
+@ID @Code ". @KernShrink P"
+has result
+@ID @Box margin { 0c } { . @KernShrink P }
+where a box of size 0 has been drawn around the result to make its
+extent clear. Compare this with `P' alone:
+@ID @Box margin { 0c } { P }
+in which the bounding box exactly encloses the object, or at least
+is supposed to. The bounding box is smaller on the right by the
+amount of kerning that would be applied between `P' and `.'.
+@PP
+The only known use for this symbol is to produce tucked-in subscripts
+in the Eq equation formatting package.
+@End @Section
diff --git a/doc/expert/pre_lang b/doc/expert/pre_lang
new file mode 100644
index 0000000..50d3539
--- /dev/null
+++ b/doc/expert/pre_lang
@@ -0,0 +1,61 @@
+@Section
+ @Title { "@Language" and "@CurrLang" }
+ @Tag { language }
+@Begin
+@PP
+The @@Language symbol informs Lout that its right parameter is written
+language.sym @Index { @@Language symbol }
+in the language of its left parameter:
+@ID @Code "Danish @Language { ... }"
+Basser Lout Version 3 uses this information in two ways: to hyphenate
+words appropriately to that language, and to change the value of the
+@@CurrLang symbol (see below). Other uses, such as right-to-left
+formatting of certain languages, may be added in the future.
+@PP
+The left parameter must either be empty (which means to leave the current
+language unchanged) or else it must have been given in a @Code "langdef"
+langdef.sym @Index { @Code langdef language definition }
+language definition at the beginning of the input:
+@ID {
+@Code "langdef Danish Dansk {" @I implementation-dependent @Code "}"
+}
+After @Code "langdef" comes a sequence of one or more simple words,
+which are alternative names for the language being defined. Following
+them comes an implementation-dependent part between braces. In Basser
+Lout Version 3 this part contains the name of the Lout hyphenation
+information file (minus its .lh suffix) to be used when hyphenating
+words in this language, followed by a sequence of words which define
+the ends of sentences. For example:
+@ID @Code "langdef English { english . : ? ! .) ?) !) }"
+defines a language called English with hyphenation patterns file
+{@Code english.lh} and seven ways to end a sentence. The use of
+these sentence endings is described in Section {@NumberOf space}. If
+there is no hyphenation file available, this is indicated by writing
+@Code "-" for the file name; if there are no sentence ends, they are
+simply omitted.
+@PP
+The @@CurrLang symbol, which has no parameters, evaluates to the first
+currlang.sym @Index { @@CurrLang symbol }
+name given in the @Code "langdef" of the language in force at the point
+where it is invoked:
+@ID @Code "Dansk @Language { This is @CurrLang. }"
+has result
+@ID { Dansk @Language { This is @CurrLang. } }
+It is typically used with the @@Case symbol like this:
+@ID @Code {
+"@CurrLang @Case {"
+" Danish @Yield tirsdag"
+" English @Yield Tuesday"
+" French @Yield Mardi"
+"}"
+}
+This example evaluates to the name of the third day of the week in the
+current language.
+@PP
+The current language is part of the style of an object, like its
+font. As explained in Section {@NumberOf size}, style is inherited
+through the point of appearance, which for language can be
+unexpected. For example, an index entry which originates in a French
+chapter but appears in an English index will have English for its
+language, so must be explicitly set to French using @@Language.
+@End @Section
diff --git a/doc/expert/pre_mome b/doc/expert/pre_mome
new file mode 100644
index 0000000..d4d377c
--- /dev/null
+++ b/doc/expert/pre_mome
@@ -0,0 +1,72 @@
+@Section
+ @Title { "@Moment" }
+ @Tag { moment }
+@Begin
+@PP
+The predefined symbol @@Moment
+moment.sym @Index { @@Moment symbol }
+has the following definition:
+@ID @OneRow @Code {
+"def @Moment"
+" named @Tag {}"
+" named @Second {}"
+" named @Minute {}"
+" named @Hour {}"
+" named @Day {}"
+" named @Month {}"
+" named @Year {}"
+" named @Century {}"
+" named @WeekDay {}"
+" named @YearDay {}"
+" named @DaylightSaving {}"
+"{}"
+}
+It may be used like any other symbol. Lout provides an invocation of
+@@Moment with tag {@Code now}, whose other parameters are numbers
+encoding the current date and time:
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "@Second" }
+ B { the current second, usually between 00 and 59 }
+@Rowa
+ A { "@Minute" }
+ B { the current minute, between 00 and 59 }
+@Rowa
+ A { "@Hour" }
+ B { the current hour, between 00 and 23 }
+@Rowa
+ A { "@Day" }
+ B { the current day of the month, between 1 and 31 }
+@Rowa
+ A { "@Month" }
+ B { the current month, between 1 (January) and 12 (December) }
+@Rowa
+ A { "@Year" }
+ B { the current year of the century, between 00 and 99 }
+@Rowa
+ A { "@Century" }
+ B { the current century, e.g. 19 or 20 }
+@Rowa
+ A { "@WeekDay" }
+ B { the current day of the week, between 1 (Sunday) and 7 (Saturday) }
+@Rowa
+ A { "@YearDay" }
+ B { the current day of the year, between 0 and 365 }
+@Rowa
+ A { "@DaylightSaving" }
+ B { an implementation-dependent number that may encode the
+daylight saving currently in effect }
+}
+date @Index { Date, printing of current }
+Unix manual entries state that @Code "@Second" can be as high as 61, to
+allow for leap seconds. Judicious use of databases can convert these
+numbers into useful dates. For example,
+@ID @Code {
+"@Moment&&now @Open { @Day {@Months&&@Month}, @Century{@Year} }"
+}
+produces something like
+@Moment&&now @Open { @Day {@Months&&@Month}, @Century{@Year} }
+given a suitable database of months.
+@End @Section
diff --git a/doc/expert/pre_next b/doc/expert/pre_next
new file mode 100644
index 0000000..c65d7db
--- /dev/null
+++ b/doc/expert/pre_next
@@ -0,0 +1,17 @@
+@Section
+ @Title { "@Next" }
+ @Tag { next }
+@Begin
+@PP
+next.sym @Index { @@Next symbol }
+The @@Next symbol returns its parameter
+plus one. It is rather clever at working this out: it hunts through
+the parameter from right to left, looking for a number to increment:
+@ID @Code {
+"@Next (3.99)"
+}
+has result {@Next (3.99)}. If @@Next cannot find a digit inside
+its parameter, it is an error. Roman numerals are handled by storing
+them in a database, as explained in Section {@NumberOf paras};
+@@Next will not increment a Roman numeral.
+@End @Section
diff --git a/doc/expert/pre_notr b/doc/expert/pre_notr
new file mode 100644
index 0000000..169faeb
--- /dev/null
+++ b/doc/expert/pre_notr
@@ -0,0 +1,61 @@
+@Section
+ @Title { "@NotRevealed" }
+ @Tag { notrevealed }
+@Begin
+@PP
+The @@NotRevealed symbol
+notrevealed.sym @Index { @@NotRevealed symbol }
+exerts fine control over the process of expanding receptive symbols. It
+may appear only within the body of a definition, immediately following
+the name of a receptive symbol. For example:
+@ID @OneRow @Code {
+"def A { @Galley }"
+""
+"def B { @Galley }"
+""
+"def ABList"
+"{"
+" A"
+" // B @NotRevealed"
+" // ABList"
+"}"
+}
+The meaning is that the symbol immediately preceding @@NotRevealed, @Code B
+in this example, is not revealed to galleys which encounter @Code "ABList"
+while searching for targets; to such galleys it appears that @Code "ABList"
+contains @Code A only, not {@Code B}, hence only galleys targeted to
+@Code A will expand {@Code "ABList"}. However, after @Code "ABList"
+is expanded by such a galley, @Code B will be available as a target in
+the usual way.
+@PP
+Apart from this meaning, @@NotRevealed has no effect at all, and the
+body of the definition may be understood by deleting @@NotRevealed and
+any preceding space. Thus, the symbol preceding @@NotRevealed may have
+named and right parameters in the usual way; these would follow after
+the @@NotRevealed symbol.
+@PP
+This symbol was introduced to overcome a problem with floating figures
+treated as displays. It turned out to be essential to specify the
+layout of a column (in part) as
+@ID @OneRow @Code {
+"@BodyTextPlace"
+"// @FigurePlace"
+"// @BodyTextPlace"
+"// @FigurePlace"
+"// @BodyTextPlace"
+"..."
+}
+so that figures could alternate with body text down the column. However,
+some means was needed to ensure that in the absence of any figures there
+could only be one @Code "@BodyTextPlace" in the column, since otherwise
+various problems arose, for example the @Code "@NP" symbol merely causing
+a skip from one @Code "@BodyTextPlace" to the next in the same column,
+rather than to the first in the next column. Also, without this feature
+the optimal page breaker's attempts to end a column early would be
+frustrated by Lout then discovering that plenty of space existed at a
+following @Code "@BodyTextPlace" in the same column. The solution is
+based on @Code "ABList" above; each occurrence of @Code "@BodyTextPlace"
+after a @Code "@FigurePlace" is not revealed in the enclosing definition,
+and so cannot be found by body text galleys unless a figure has
+previously attached to the preceding {@Code "@FigurePlace"}.
+@End @Section
diff --git a/doc/expert/pre_null b/doc/expert/pre_null
new file mode 100644
index 0000000..7b97081
--- /dev/null
+++ b/doc/expert/pre_null
@@ -0,0 +1,26 @@
+@Section
+ @Title { "@Null" }
+ @Tag { null }
+@Begin
+@PP
+This symbol
+null.sym @Index { @@Null symbol }
+provides a convenient way to remove unwanted
+concatenation symbols. If there is a concatenation symbol
+preceding @@Null, the @@Null and the
+concatenation symbol are both deleted. Otherwise, if there is a
+following concatenation symbol, it and the @@Null are both deleted.
+Otherwise, @@Null becomes an empty object.
+@PP
+These rules apply to a fully parenthesized version of the expression. For
+example, in
+@ID @Code {
+"... //1vx @Null |0.5i ..."
+}
+it is the horizontal concatenation symbol following @@Null that
+disappears, because in the fully parenthesized version
+@ID @Code {
+"... //1vx { @Null |0.5i ... }"
+}
+there is no concatenation symbol preceding the @@Null.
+@End @Section
diff --git a/doc/expert/pre_oneo b/doc/expert/pre_oneo
new file mode 100644
index 0000000..bc662cb
--- /dev/null
+++ b/doc/expert/pre_oneo
@@ -0,0 +1,62 @@
+@Section
+ @Title { "@OneOf" }
+ @Tag { oneof }
+@Begin
+@PP
+oneof.sym @Index { @@OneOf symbol }
+The @@OneOf symbol returns one of the sequence of objects which is
+its right parameter as its result:
+@ID @Code @Verbatim {
+@OneOf {
+ @ResultA
+ @ResultB
+ @ResultC
+}
+}
+The choice is made to ensure that whatever galley target is required
+at the moment is found. For example, if we are evaluating @@OneOf
+as part of an attempt to attach a galley whose target is
+{@Code "@SomeTarget"}, then the result above will be
+{@Code "@ResultA"} if it contains {@Code "@SomeTarget"}, or else
+{@Code "@ResultB"} if it contains {@Code "@SomeTarget"}, or else
+{@Code "@ResultC"} (whether or not it contains the target, or
+if there is no target).
+@PP
+Use of @@OneOf in conjunction with recursive symbols can lead
+to problems. Consider this example:
+@ID @Code {
+"def @Recursive {"
+""
+" def @ChoiceA { @APlace // @Recursive }"
+""
+" def @ChoiceB { @BPlace // @Recursive }"
+""
+" @OneOf {"
+" @ChoiceA"
+" @ChoiceB"
+" }"
+"}"
+}
+Lout believes that expanding @Code "@Recursive" is the right thing
+to do when searching for either of the galley targets {@Code "@APlace"}
+and {@Code "@BPlace"}. When searching for @Code "@BPlace" this leads
+Lout to expand {@Code "@Recursive"}, then {@Code "@ChoiceA"}, then
+the {@Code "@Recursive"} symbol within {@Code "@ChoiceA"}, and so on
+infinitely. This problem can be avoided by attaching a
+@Code "@NotRevealed" symbol to each of the inner @Code "@Recursive"
+symbols: these are then not available for expansion until a
+decision has been made to expand the symbol they lie within. In
+this particular example it would be simpler to write
+@ID @Code {
+"def @Recursive {"
+""
+" @OneOf {"
+" @APlace"
+" @BPlace"
+" }"
+" // @Recursive"
+"}"
+}
+but this factoring is not possible when the recursive calls have
+parameters that are required to differ in the two cases.
+@End @Section
diff --git a/doc/expert/pre_oner b/doc/expert/pre_oner
new file mode 100644
index 0000000..7e0dbce
--- /dev/null
+++ b/doc/expert/pre_oner
@@ -0,0 +1,36 @@
+@Section
+ @Title { "@OneCol" and "@OneRow" }
+ @Tag { onerow }
+@Begin
+@PP
+The @@OneRow symbol
+onerow.sym @Index { @@OneRow symbol }
+principal.mark.effect @SubIndex { effect on @@OneCol and @@OneRow }
+returns its right parameter modified so that only the principal row mark
+protrudes. This is normally the first row mark, but another one may be
+chosen by preceding it with @Code "^/" or {@Code "^//"}. For example,
+@ID @Code {
+"@OneRow { |0.5rt Slope @Font x + 2 ^//1p @HLine //1p |0.5rt 5 }"
+}
+has result
+@LP
+@ID {
+@ShowMarks
+@OneRow { |0.5rt Slope @Font x + 2 ^//1p @HLine //1p |0.5rt 5 }
+}
+@LP
+with one row mark protruding from the bar as shown. Compare this with
+@ID @Code {
+"@OneRow { |0.5rt Slope @Font x + 2 //1p @HLine //1p |0.5rt 5 }"
+}
+where the mark protrudes from the numerator:
+@LP
+@ID {
+@ShowMarks
+@OneRow { |0.5rt Slope @Font x + 2 //1p @HLine //1p |0.5rt 5 }
+}
+onecol.sym @Index { @@OneCol symbol }
+@@OneCol has the same effect on columns as @@OneRow does on rows, with
+the symbols @Code "^|" and @Code "^||" (or {@Code "^&"}) determining
+which mark is chosen.
+@End @Section
diff --git a/doc/expert/pre_open b/doc/expert/pre_open
new file mode 100644
index 0000000..d332570
--- /dev/null
+++ b/doc/expert/pre_open
@@ -0,0 +1,41 @@
+@Section
+ @Title { "@Open and @Use" }
+ @Tag { open }
+@Begin
+@PP
+The @@Open symbol
+open.sym @Index { @@Open symbol }
+takes a cross reference or symbol
+invocation for its left parameter, and an arbitrary object, which must
+be enclosed in braces, for its right parameter. The right parameter
+may refer to the exported parameters and nested definitions of the invocation
+denoted by the left parameter, and its value is the @@Open
+symbol's result. The target of the cross reference may lie in an
+external database (Section {@NumberOf database}). Any symbol available
+outside the @@Open which happens to have the same name as one of the
+symbols made available by the @@Open will be unavailable within the @@Open.
+@PP
+use.sym @Index { @@Use symbol }
+The @@Use symbol is an @@Open symbol in a
+different form. It may only appear among or after the definitions
+in Lout's input, and it is equivalent to enclosing the remainder of the
+input in an @@Open symbol. For example,
+@ID @OneRow {
+ @I definitions
+//1vx @Code "@Use" @Code "{" @I x @Code "}"
+//1vx @Code "@Use" @Code "{" @I y @Code "}"
+//1vx @I { rest of input }
+}
+is equivalent to
+@ID @OneRow {
+ @I definitions
+//1vx @I x @Code "@Open"
+//1vx @Code "{" &4mt @I y @Code "@Open"
+//1vx &4mt @Code "{" @I { rest of input }
+//1vx &4mt @Code "}"
+//1vx @Code "}"
+}
+The @@Use symbol allows a set of standard packages to be opened without
+the inconvenience of enclosing the entire document in @@Open symbols. Such
+enclosure could cause Basser Lout to run out of memory.
+@End @Section
diff --git a/doc/expert/pre_page b/doc/expert/pre_page
new file mode 100644
index 0000000..cccff13
--- /dev/null
+++ b/doc/expert/pre_page
@@ -0,0 +1,20 @@
+@Section
+ @Tag { pagelabel }
+ @Title { "@PageLabel" }
+@Begin
+@PP
+pagelabel.sym @Index { @@PageLabel symbol }
+The @@PageLabel symbol associates a page label in the PostScript
+output file with the page within which (or just before which) the symbol
+occurs, so that PostScript viewers are able to index the page
+by this label. (The label is printed in the @Code "%%Page" comment
+preceding the page in the PostScript output file.) For example,
+@ID @Code "@PageLabel iv"
+associates the label @Code "iv" with the page. The label may be
+an arbitrary object; if its value is not a simple word, it will
+be replaced by {@Code "?"}.
+@PP
+@@PageLabel is unrelated to Lout's cross referencing mechanism;
+it is for communicating a label to the PostScript output file, not to
+other parts of Lout. The result of @@PageLabel is a null object.
+@End @Section
diff --git a/doc/expert/pre_plai b/doc/expert/pre_plai
new file mode 100644
index 0000000..1f0319e
--- /dev/null
+++ b/doc/expert/pre_plai
@@ -0,0 +1,15 @@
+@Section
+ @Title { "@PlainGraphic" }
+ @Tag { plaingraphic }
+@Begin
+@PP
+plaingraphic.sym @Index { @@PlainGraphic symbol }
+The @@PlainGraphic symbol is avery rudimentary analogue for plain text
+output of the @@Graphic symbol for PostScript output. Its result is
+its right parameter printed on a background created by repeated
+printings of its left parameter, which must be a simple word. For
+example,
+@ID @Verbatim { "." @PlainGraphic 5s @Wide }
+would produce five dots. @@PlainGraphic is used in the @Code tbl
+table-drawing package to produce plain-text rules.
+@End @Section
diff --git a/doc/expert/pre_prep b/doc/expert/pre_prep
new file mode 100644
index 0000000..d53845b
--- /dev/null
+++ b/doc/expert/pre_prep
@@ -0,0 +1,24 @@
+@Section
+ @Tag { prependgraphic }
+ @Title { "@PrependGraphic and @SysPrependGraphic" }
+@Begin
+@PP
+prependgraphic.sym @Index { @@PrependGraphic symbol }
+sysprependgraphic.sym @Index { @@SysPrependGraphic symbol }
+postscript.prependgraphic @SubIndex { used by @@PrependGraphic }
+These symbols, which may appear anywhere that a definition or @@Use
+symbol may appear, tell Lout to include the contents of a file in the
+preamble of its output. For Basser Lout this means that the file must
+contain PostScript (and ideally it would begin and end with the
+@Code "%%BeginResource" and @Code "%%EndResource" comments of
+DSC 3.0). For example,
+@ID @Code {
+"@SysPrependGraphic { diagf.lpg }"
+}
+appears at the start of the Diag package; the file @Code diagf.lpg
+contains a number of PostScript definitions used by Diag for drawing
+diagrams. It saves a lot of space to include them just once at the
+start like this, rather than with every diagram. @@PrependGraphic and
+@@SysPrependGraphic search for the file in the same places as @@Include and
+@@SysInclude respectively.
+@End @Section
diff --git a/doc/expert/pre_rota b/doc/expert/pre_rota
new file mode 100644
index 0000000..00e28ff
--- /dev/null
+++ b/doc/expert/pre_rota
@@ -0,0 +1,57 @@
+@Section
+ @Title { "@Rotate" }
+ @Tag { rotate }
+@Begin
+@PP
+rotate.sym @Index { @@Rotate symbol }
+rotation @Index { Rotation of object }
+The @@Rotate symbol will rotate its
+right parameter counterclockwise an amount given in degrees (positive or
+negative) by its left parameter. For example,
+@ID @Code {
+"30d @Rotate { hello, world }"
+}
+has result
+@ID {
+30d @Rotate { hello, world }
+}
+Before rotating the object, @@OneCol and @@OneRow are applied to it. The
+result is a rectangle whose marks pass through the point where the
+original marks crossed:
+@ID {
+ @ShowMarks
+ { 0.6c @Wide 0.3c @High ^| 2.2c @Wide ^/ 0.2c @High }
+
+&4m => &4m
+
+ @ShowMarks
+ {
+ 30d @Rotate
+ { @ShowMarks
+ { 0.6c @Wide 0.3c @High ^| 2.2c @Wide ^/ 0.2c @High }
+ }
+ }
+}
+As this example shows, rotation by an angle other than a multiple of
+ninety degrees introduces quite a lot of white space. So, for example, the
+result of
+@ID {
+@Code { "-30d" "@Rotate" 30d "@Rotate" } @I object
+}
+is a much larger object than {@I object}, despite the fact that one
+rotation cancels the other.
+@PP
+Rotation of objects containing receptive and recursive symbols is
+permitted, but for angles other than multiples of ninety degrees it is
+best to make the size of the rotated object clear with @@Wide and
+@@High symbols:
+@ID @Code {
+"30d @Rotate 5i @Wide 4i @High"
+"{ //1i @TextPlace"
+" //1i"
+"}"
+}
+This is because for angles other than multiples of ninety degrees the
+space available for @Code "@TextPlace" to occupy is indeterminate, and
+the result is poor.
+@End @Section
diff --git a/doc/expert/pre_rump b/doc/expert/pre_rump
new file mode 100644
index 0000000..0270202
--- /dev/null
+++ b/doc/expert/pre_rump
@@ -0,0 +1,41 @@
+@Section
+ @Title { {"@Common"}, {"@Rump"}, and "@Meld" }
+ @Tag { rump }
+@Begin
+@PP
+common.sym @Index { @@Common symbol }
+rump.sym @Index { @@Rump symbol }
+meld.sym @Index { @@Meld symbol }
+The @@Common and @@Rump symbols compare two paragraph objects:
+@ID @Code "{ Aardvark, 29 } @Common { Aardvark, 359 }"
+If either parameter is not a paragraph object, it is converted into
+a single-object paragraph first. The result of @@Common is the
+common prefix of the two paragraphs; that is, those initial objects
+which are equal in the two paragraphs. In the example above, the
+result is {@Code "Aardvark,"}. The result of @@Rump is that part of
+the second object which is not included in @@Common; the result of
+@ID @Code "{ Aardvark, 29 } @Rump { Aardvark, 359 }"
+is {@Code "359"}.
+@PP
+If the two objects have nothing in common, the result of @@Common will
+be an empty object and the result of @@Rump will be the second
+object. If the two objects are identical, the result of @@Common will
+be the first object, and the result of @@Rump will be an empty object.
+@PP
+The only known use for @@Rump and @@Common is to implement merged index
+entries (Section {@NumberOf sorted}).
+@PP
+The @@Meld symbol returns the minimum meld of two paragraphs, that
+is the shortest paragraph that contains the two original paragraphs
+as subsequences. For example,
+@ID @Code "{ Aardvark , 1 , 2 } @Meld { Aardvark , 2 , 3 }"
+produces
+@ID { Aardvark , 1 , 2 } @Meld { Aardvark , 2 , 3 }
+The result is related to the well-known
+longest common substring, in that the meld contains everything not in
+the lcs plus one copy of everything in the lcs. This function is
+well-suited to melding complex index entries. Note that there must be
+a non-zero amount of space before each comma, otherwise each will become
+part of the preceding word, and, since @@Meld compares the two paragraphs
+word by word, the result will be different and less satisfactory.
+@End @Section
diff --git a/doc/expert/pre_scal b/doc/expert/pre_scal
new file mode 100644
index 0000000..1e1b1a3
--- /dev/null
+++ b/doc/expert/pre_scal
@@ -0,0 +1,26 @@
+@Section
+ @Title { "@Scale" }
+ @Tag { scale }
+@Begin
+@PP
+scale. @Index { @@Scale symbol }
+This symbol geometrically scales its right parameter by the scale factor
+given in its left parameter:
+@ID @Code "1.0 @Scale Hello 2.0 @Scale Hello 0.5 @Scale Hello"
+has result
+@ID { 1.0 @Scale Hello 2.0 @Scale Hello 0.5 @Scale Hello }
+The left parameter can be two scale factors, in which case the first
+applies horizontally, and the second vertically:
+@ID @Code "{0.5 2.0} @Scale Hello"
+has result
+@ID { {0.5 2.0} @Scale Hello }
+The left parameter may be empty, in which case Lout will scale the
+object by a common factor horizontally and vertically so as to occupy
+all available horizontal space:
+@ID @Code "{} @Scale { Hello world }"
+has result
+@LD {} @Scale { Hello world }
+The right parameter may be any object. @@Scale has both a @@OneCol and
+a @@OneRow effect, and the marks of the result coincide with the principal
+marks of the right parameter.
+@End @Section
diff --git a/doc/expert/pre_spac b/doc/expert/pre_spac
new file mode 100644
index 0000000..f44d840
--- /dev/null
+++ b/doc/expert/pre_spac
@@ -0,0 +1,55 @@
+@Section
+ @Title { "@Space" }
+ @Tag { space }
+@Begin
+@PP
+The @@Space symbol
+space.sym @Index { @@Space symbol }
+changes the value of the @Code s unit of measurement (Section
+s.unit.space @SubIndex { and @@Space symbol }
+{@NumberOf concatenation}) within its right parameter to the value
+given by the left parameter:
+@ID {
+@Code "1c @Space { a b c d }"
+}
+has result
+@ID {
+1c @Space { a b c d }
+}
+As for the @@Break symbol, the left parameter of @@Space may be given
+relative to the enclosing @Code s unit, and it may include a gap
+mode. Note that the @@Font symbol also sets the @Code s unit.
+@PP
+The left parameter of the @@Space symbol may also hold any one of the
+five special values {@Code lout}, {@Code compress}, {@Code separate},
+{@Code troff}, and {@Code tex}, which control the way in which Lout
+treats white space separating two objects. The names {@Code troff}
+and {@Code tex} indicate that the behaviour of these options is
+inspired by these other document formatting systems.
+@PP
+The default setting, {@Code lout}, produces as many spaces in the output as
+there are in the input. The {@Code compress} setting causes all sequences
+of two or more white space characters to be treated the same as one white
+space character. The {@Code separate} setting is like {@Code compress}
+but also causes zero white spaces between two objects (but not within
+one word) to be treated the same as one white space character.
+@PP
+The {@Code troff} setting is the same as {@Code lout} except that
+wherever a sentence ends at the end of a line, one extra space is
+added. Formally, when two objects are separated by white space
+characters which include at least one newline character, and the
+first object is a word ending in any one of a certain set of
+sequences of characters, the extra space is added. The set of
+sequences of characters depends on the current language and is defined
+in the @Code langdef for that language (see Section {@NumberOf language}).
+@PP
+The {@Code tex} option is the most complicated. First, the
+{@Code compress} option is applied. Then, at every sentence ending,
+whether or not at the end of a line, one extra space is added. A
+sentence ending is defined as for {@Code troff} except that, in addition
+to the preceding word having to end in one of a certain set of sequences of
+characters, the character preceding that sequence must exist and must
+be a lower-case letter. A character is a lower-case letter if, in the
+Lout Character Mapping file (Section {@NumberOf font}) associated with
+the current font, an upper-case equivalent of the character is defined.
+@End @Section
diff --git a/doc/expert/pre_span b/doc/expert/pre_span
new file mode 100644
index 0000000..e527652
--- /dev/null
+++ b/doc/expert/pre_span
@@ -0,0 +1,58 @@
+@Section
+ @Title { "@StartHSpan","@StartVSpan", "@StartHVSpan", "@HSpan", and "@VSpan" }
+ @Tag { hspan }
+@Begin
+@PP
+starthspan. @Index { @@StartHSpan symbol }
+startvspan. @Index { @@StartVSpan symbol }
+starthvspan. @Index { @@StartHVSpan symbol }
+hspan. @Index { @@HSpan symbol }
+vspan. @Index { @@VSpan symbol }
+These symbols work together to produce spanning columns and rows in
+a more flexible way than is possible in practice with @Code "//" and
+{@Code "||"}. An object
+@ID @Code "@StartHSpan object"
+causes @Code object to be printed, but occupying all the horizontal space
+to the right on the row mark on which it lies up to and including the rightmost
+@@HSpan symbol on that mark not preceded by @@StartHVSpan, @@StartHSpan,
+@@StartVSpan, or @@VSpan. The column mark of this spanning object is not
+constrained to align with any of the column marks of the columns it spans.
+@PP
+If there is no @@HSpan symbol anywhere to the right of @@StartHSpan, then
+the object spans only its own column. This means that it occupies that
+column as usual but its mark is not constrained to align with those of the
+other objects in the column.
+@PP
+Similarly, the @@StartVSpan symbol causes its object to occupy all
+the vertical space below it on the column mark on which it lies, down to and
+including the bottommost @@VSpan symbol on that mark not preceded by a
+@@StartHVSpan, @@StartHSpan, @@StartVSpan, or @@HSpan; and if there
+is no @@VSpan symbol anywhere below it on that mark, then the object
+spans only its own row, occupying its row but with its mark not constrained
+to align with the row mark.
+@PP
+The @@StartHVSpan symbol combines the effects of @@StartHSpan and
+@@StartVSpan, allowing an object to span both columns and rows
+simultaneously. For example, in
+@ID @Code {
+"@StartHVSpan x | | @HSpan"
+"/"
+"@VSpan | |"
+}
+the object @Code x will occupy a rectangular area spanning three columns,
+two rows, and the gaps between them.
+@PP
+The objects lying in the region spanned should all be empty, or the
+@@HSpan and @@VSpan symbols can be used to document the spanning that
+is occurring. At present there may be no galley targets or recursive symbols
+within the right parameter of @@StartHSpan, @@StartVSpan, or
+@@StartHVSpan. However, the right parameter may otherwise be an
+arbitrary object, including paragraphs of text that require breaking.
+@PP
+If the right parameter of @@StartHSpan, @@StartVSpan, or @@StartHVSpan
+occupies more horizontal or vertical space than all of the spanned columns
+or rows combined require, the extra space goes into the last spanned column
+or row. Overlapping spanning rows and columns are permitted. Gaps spanned
+by span objects are unbreakable (their @Code "u" indicator is set
+automatically and cannot be revoked).
+@End @Section
diff --git a/doc/expert/pre_tagg b/doc/expert/pre_tagg
new file mode 100644
index 0000000..df6cdc3
--- /dev/null
+++ b/doc/expert/pre_tagg
@@ -0,0 +1,15 @@
+@Section
+ @Title { "@Tagged" }
+ @Tag { tagged }
+@Begin
+@PP
+The @@Tagged
+tagged.sym @Index { @@Tagged symbol }
+symbol takes a cross reference for its left parameter and an object, whose
+value must be a juxtaposition of simple words, or several words, or an empty
+object, for its right parameter. It has the effect of attaching its
+right parameter as an additional tag to the invocation denoted by its
+left parameter, unless the right parameter is empty, in which case @@Tagged
+does nothing. The result of @@Tagged is always @@Null, which makes it
+effectively invisible.
+@End @Section
diff --git a/doc/expert/pre_unde b/doc/expert/pre_unde
new file mode 100644
index 0000000..1261449
--- /dev/null
+++ b/doc/expert/pre_unde
@@ -0,0 +1,30 @@
+@Section
+ @Tag { underline }
+ @Title { "@Underline" }
+@Begin
+@PP
+underline.sym @Index { @@Underline symbol }
+The @@Underline symbol underlines its right parameter, but only if that
+parameter is a word or a paragraph:
+@ID @Code "We @Underline { really do } mean this."
+produces
+@ID { We @Underline { really do } mean this. }
+It is not possible to underline an arbitrary object using this symbol;
+the @@Underline symbol will be ignored if this is attempted.
+@PP
+It is very easy to @I define a symbol which will underline an arbitrary
+object, using the @@Graphic symbol. This raises the question of why
+@@Underline is needed at all. The answer is that @@Underline has two
+properties that distinguish it from symbols based on @@Graphic.
+@PP
+First, when @@Underline both contains a paragraph and is used within a
+paragraph, as in the example above, the inner and outer paragraphs are
+merged into one, permitting the underlined text to break over several
+lines. This is how the @@Font symbol works too, but symbols based on
+@@Graphic do not permit this merging.
+@PP
+Second, Adobe font files specify the correct position and thickness of
+underlining for each font, and the @@Underline symbol follows these
+specifications. The font used is the font of the first object underlined,
+if it is a simple word, or else the font of the enclosing paragraph.
+@End @Section
diff --git a/doc/expert/pre_verb b/doc/expert/pre_verb
new file mode 100644
index 0000000..725df85
--- /dev/null
+++ b/doc/expert/pre_verb
@@ -0,0 +1,30 @@
+@Section
+ @Tag { verbatim }
+ @Title { "@Verbatim and @RawVerbatim" }
+@Begin
+@PP
+verbatim.sym @Index { @@Verbatim symbol }
+rawverbatim.sym @Index { @@RawVerbatim symbol }
+These symbols instruct Lout to read the following text (enclosed in braces)
+verbatim, that is, turning off all special character meanings. For example,
+@ID @Code @Verbatim {
+@Verbatim { "hello" }
+}
+produces
+@ID @Verbatim { "hello" }
+@@Verbatim ignores all characters after the opening brace up to but not
+including the first non-white-space character. @@RawVerbatim differs from
+@@Verbatim only in that it ignores all characters after the opening brace
+up to but not including the first non-white-space character, or up to and
+including the first newline character, whichever comes first. This
+variant is useful in cases such as
+@ID @Code @Verbatim {
+@RawVerbatim {
+ var x: Real
+begin
+}
+}
+where the first line of the verbatim text begins with white space which
+would be ignored by @@Verbatim. Both symbols ignore all white spaces
+at the end of the verbatim text, preceding the closing brace.
+@End @Section
diff --git a/doc/expert/pre_wide b/doc/expert/pre_wide
new file mode 100644
index 0000000..6526957
--- /dev/null
+++ b/doc/expert/pre_wide
@@ -0,0 +1,22 @@
+@Section
+ @Title { "@Wide" and "@High" }
+ @Tag { wide }
+@Begin
+@PP
+The @@Wide symbol
+wide.sym @Index { @@Wide symbol }
+returns its right parameter modified to have the width given by its left
+parameter, which must be a length (Section {@NumberOf concatenation})
+whose unit of measurement is {@Code "c"}, {@Code "i"}, {@Code "p"},
+{@Code "m"}, {@Code "f"}, {@Code "s"}, or {@Code "v"}. If the right
+parameter is not as wide as required, white space is added at the right;
+if it is too wide, its paragraphs are broken (Section {@NumberOf break})
+so that it fits. A @@OneCol operation is included in the effect of @@Wide,
+since it does not make sense for an object of fixed width to have two column
+marks.
+@PP
+high.sym @Index { @@High symbol }
+The @@High symbol similarly ensures that its result is of a given height,
+by adding white space at the bottom. In this case it is an error for the
+right parameter to be too large. A @@OneRow operation is included.
+@End @Section
diff --git a/doc/expert/pre_yuni b/doc/expert/pre_yuni
new file mode 100644
index 0000000..7b06b5d
--- /dev/null
+++ b/doc/expert/pre_yuni
@@ -0,0 +1,28 @@
+@Section
+ @Title { "@YUnit" and "@ZUnit" }
+ @Tag { yunit }
+@Begin
+@PP
+The @@YUnit symbol
+yunit.sym @Index { @@YUnit symbol }
+zunit.sym @Index { @@ZUnit symbol }
+changes the value of the @Code y unit of measurement (Section
+{@NumberOf concatenation}) within its right parameter to the value
+given by the left parameter:
+@ID {
+@Code "1c @YUnit { ... }"
+}
+ensures that the value of @Code "1y" within the right parameter will
+be {@Code "1c"}. The @@ZUnit symbol is similar, setting the value
+of the @Code z unit in its right parameter. Both units have default
+value zero. The left parameter may not include a gap mode, nor may it
+use the {@Code w}, {@Code b}, {@Code r}, or of course {@Code d} units,
+but it may begin with @Code "+" or @Code "-" to indicate that value is
+to be added to or subtracted from the current value. Any negative result
+of using @Code "-" will be silently replaced by zero.
+@PP
+These units are not used internally by Lout. They are supplied as
+part of the style information for the convenience of application
+packages. For example, the Eq equation formatting package uses them
+to fine-tune the appearance of equations.
+@End @Section
diff --git a/doc/expert/preface b/doc/expert/preface
new file mode 100644
index 0000000..1150929
--- /dev/null
+++ b/doc/expert/preface
@@ -0,0 +1,31 @@
+@Preface
+ @Tag { preface }
+@Begin
+@PP
+@IndexBlanks
+This manual is addressed to those who wish to become
+expert users of the Lout document formatting system. An expert user
+is someone who understands the principles of document formatting
+that Lout embodies, and is able to apply them, for example to design
+a document format or a special-purpose package. In contrast, a non-expert
+user is someone who simply uses Lout to format documents.
+@PP
+Chapter {@NumberOf principles} explains these principles, and it
+should be read carefully and in sequence. Chapters {@NumberOf details}
+and {@NumberOf symbols} are for reference; respectively, they
+contain descriptions of the detailed operation of Lout's major
+components, and a complete description of each predefined symbol. The
+final chapter presents a collection of advanced examples.
+@PP
+This manual presents Version 3 of Basser Lout, publicly released in
+September 1994 @Cite { $kingston1995lout.program }. This manual was
+rendered into PostScript
+postscript @Index { PostScript }
+by Version 3.17 of the Basser Lout interpreter, using the symbols
+described in the User's Guide @Cite { $kingston1995lout.user }.
+@DP
+@Heading { Acknowledgment. } Version 3 has benefited from hundreds of
+comments received since the release of Version 1 in October 1991. Not
+every suggestion could be followed, but many have been, and the
+encouragement was greatly appreciated.
+@End @Preface
diff --git a/doc/expert/pri b/doc/expert/pri
new file mode 100644
index 0000000..f24cb02
--- /dev/null
+++ b/doc/expert/pri
@@ -0,0 +1,15 @@
+@Chapter
+ @Title { Principles }
+ @Tag { principles }
+@Begin
+@LP
+The Lout document formatting language is based on just four key ideas:
+objects, definitions, cross references, and galleys. This chapter
+concentrates on them, postponing the inevitable details.
+@BeginSections
+@Include { pri_obje }
+@Include { pri_defi }
+@Include { pri_cros }
+@Include { pri_gall }
+@EndSections
+@End @Chapter
diff --git a/doc/expert/pri_cros b/doc/expert/pri_cros
new file mode 100644
index 0000000..677794e
--- /dev/null
+++ b/doc/expert/pri_cros
@@ -0,0 +1,112 @@
+@Section
+ @Tag { cross }
+ @Title { Cross references }
+@Begin
+@PP
+A cross reference
+cross.ref @Index { Cross reference }
+in common terminology is something like `see Table 6'
+or `see page 57' -- a reference within a document to some other part of
+it. Readers find them very useful, but they are a major
+problem for authors. As the document is revised, Table 6
+becomes Table 7, the thing on page 57 moves to page 63, and all the
+cross references must be changed.
+@PP
+The Scribe
+scribe @Index { Scribe }
+document formatter, developed by Brian K. Reid @Cite { $reid1980scribe },
+reid.brian @Index { Reid, Brian K. }
+introduced a scheme for keeping track of cross
+references. It allows you to give names to tables, figures, etc., and to
+refer to them by name. The formatter inserts the appropriate numbers in
+place of the names, so that as the document is revised, the
+cross references are kept up to date automatically. Lout has adopted
+and extended this scheme.
+@PP
+In Lout, automatic cross referencing works in the following way. First
+define a symbol with a parameter with the special name @Code "@Tag":
+@ID @OneRow @Code {
+"def @Table"
+" left @Tag"
+" right @Value"
+"{"
+" ||1i @Value"
+"}"
+}
+When this symbol is invoked, the value given to @Code "@Tag" should be a
+simple word like {@Code "cities"}, or several simple words juxtaposed
+like {@Code "cities compare"}; it serves to name the invocation:
+@ID @OneRow @Code {
+"{ cities compare } @Table"
+"{"
+" Washington |0.5i Canberra"
+"}"
+}
+We may now refer to this invocation elsewhere in the document, using the
+@I {cross reference} @Code "@Table&&{ cities compare }". Here @Code "&&"
+is the {@I {cross reference symbol}}; its left parameter is a symbol and
+its right parameter is the value of the @Code "@Tag" parameter of some
+invocation of that symbol. Of course it's simplest if you use just a
+one-word tag; then no braces are needed.
+@PP
+A cross reference is not an object; the reader should think of it as
+an arrow in the final printed document, beginning at the cross reference
+and ending at the top of the target
+target.cr @Index { Target of cross reference }
+#@ID 8p @Font {
+# { @LittlePage // @LittlePage }
+# ||0io ||0.7c
+# { //2c
+# { @Code "@Table&&cities" }
+# //0.1c
+# ||0.5c 90d @Rotate @Arrow 2.5c
+# //0.05c
+# @HContract @VContract
+# @Fig { @Box margin { 0c } paint { grey } { 1.5c @Wide 1c @High } }
+# }
+#}
+#@PP
+invocation. Three special values may be given to the right parameter of
+{@Code "&&"}: {@Code preceding}, {@Code following}, and
+preceding. @Index { @Code preceding }
+following. @Index { @Code following }
+foll_or_prec. @Index { @Code following }
+{@Code foll_or_prec}. The cross
+reference @Code "@Table&&preceding" points to some table
+appearing earlier in the final printed document than itself; that is, the
+arrow is guaranteed to point backwards through the document. Usually it
+points to the nearest preceding invocation. Similarly,
+@Code "@Table&&following" points forwards, usually to the
+nearest following invocation. @Code "@Table&&foll_or_prec" is the same as
+@Code "@Table&&following" if it exists, otherwise it is the same as
+{@Code "@Table&&preceding"}.
+@PP
+This section has been concerned with what a cross reference is -- an
+arrow from one point in a document to another -- but not with how it is
+used. One simple way to use a cross reference is to put it where an
+object is expected, like this:
+@ID @Code {
+"a | @Table&&cities | c"
+}
+In this case the cross reference will be replaced by a copy of the
+invocation it points to: in the example just given, a table will appear
+between @Code a and @Code c. Other applications of cross references may be
+found in Chapter {@NumberOf examples}, including finding the number of
+the page where something appears, producing running page headers and footers,
+and accessing databases of Roman numerals, references, etc. Cross
+references are also used by galleys, as will be explained in the next section.
+@PP
+The implementation of cross referencing copies every symbol invocation with
+a @Code "@Tag" parameter into the @I { cross-reference database },
+a collection of files whose names end in {@Code ".ld"} indexed by one file
+whose name is {@Code "lout.li"}. It is generally the case that the bulk
+content of a symbol such as the table above is contained in its right or
+body parameter, and that this bulk content is not needed by cross references
+to the symbol. Hence, to save space in the database, Lout replaces the
+right parameter of each symbol it writes into it by the word "???" whenever
+the right parameter appears to be large. The table above would appear as
+"???" because of this optimization, and in general, the user must ensure
+that any content required by cross references is contained in parameters
+other than the right or body parameter. This optimization does not apply
+when the symbol being written into the cross-reference database is a galley.
+@End @Section
diff --git a/doc/expert/pri_defi b/doc/expert/pri_defi
new file mode 100644
index 0000000..002db15
--- /dev/null
+++ b/doc/expert/pri_defi
@@ -0,0 +1,246 @@
+@Section
+ @Title { Definitions }
+ @Tag { definitions }
+@Begin
+@PP
+The features of Lout are very general. They do not assume that documents
+are composed of pages, nor that there are such things as margins and
+footnotes, for example. @I Definitions
+definitions. @Index { Definitions }
+bridge the gap between Lout's general features and the
+special features -- footnotes, equations, pages -- that particular
+documents require. They hold the instr&-uct&-ions for producing these
+special features, conveniently packaged ready for use.
+@PP
+For example, consider the challenge posed by `@TeX', which is the name of
+one of Lout's most illustrious rivals @Cite { $knuth1984tex }. Lout solves it
+easily enough, like this:
+@ID @Code {
+"T{ /0.2fo E }X"
+}
+but to type this every time @TeX is mentioned would be tedious and
+error-prone. So we place a definition at the beginning of the document:
+@ID @Code {
+"def @TeX { T{ /0.2fo E }X }"
+}
+Now @Code "@TeX" stands for the object following it between
+braces, and we may write
+@ID @Code {
+consider the challenge posed by "`@TeX'", ...
+}
+as the author did earlier in this paragraph.
+@PP
+A @I symbol
+symbol. @Index Symbol
+is a name, like {@Code "@TeX"}, which stands for
+something other than itself. The initial @Code "@" is not compulsory,
+but it does make the name stand out clearly. A @I definition of a symbol
+declares a name to be a symbol, and says what the symbol stands for. The
+@I body of a definition
+body.of @Index { Body of a definition }
+is the part following the name, between the braces. To @I invoke
+invocation @Index { Invocation of a symbol }
+a symbol is to make use of it.
+@PP
+Another expression ripe for packaging in a definition is
+@ID @Code {
+"@OneRow { | -2p @Font n ^/0.5fk 2 }"
+}
+which produces @OneRow { | -2p @Font n ^/0.5sk 2 } (see
+Chapter {@NumberOf details}). But this time we would like to be able to write
+@ID {
+@I object @Code "@Super" @I object
+}
+so that @Code { a "@Super" 2 } would come out as {a @Super 2}, and so
+on, for in this way the usefulness of the definition is greatly
+increased. Here is how it is done:
+@ID @OneRow @Code {
+"def @Super"
+" left x"
+" right y"
+"{ @OneRow { | -2p @Font y ^/0.5fk x }"
+"}"
+}
+This definition says that @Code "@Super" has two {@I parameters},
+parameter @Index Parameter
+@Code x and {@Code y}. When @Code "@Super" is invoked, all occurrences
+of @Code x in the body will be replaced by the object just to the left
+of {@Code "@Super"}, and all occurrences of @Code y will be replaced by
+the object just to the right. So, for example, the expression
+@ID @Code {
+"2 @Super { Slope @Font n }"
+}
+is equal to
+@ID @Code {
+"@OneRow { | -2p @Font { Slope @Font n } ^/0.5fk 2 }"
+}
+and so comes out as {2 @Super {Slope @Font n}}.
+@PP
+Lout permits definitions to invoke themselves, a peculiarly circular
+thing to do which goes by the name of
+recursion @Index Recursion
+@I recursion. Here is an example
+of a recursive definition:
+@ID @Code {
+"def @Leaders { .. @Leaders }"
+}
+The usual rule is that the value of an invocation of a symbol is a copy of
+the body of the symbol's definition, so the value of @Code "@Leaders" must be
+@ID @Code {
+".. @Leaders"
+}
+But now this rule applies to this new invocation of {@Code "@Leaders"};
+substituting its body gives
+@ID @Code {
+".. .. @Leaders"
+}
+and so on forever. In order to make this useful,
+an invocation of a recursive symbol is replaced by its body only if
+sufficient space is available. So, for example,
+@ID @Code {
+"4i @Wide { Chapter 7 @Leaders 62 }"
+}
+has for its result the object
+@ID {
+4i @Wide { Chapter 7 @Leaders 62 }
+}
+with Lout checking before each replacement of @Code "@Leaders" by
+@OneCol @Code { ".." "@Leaders" } that the total length afterwards,
+including the other words, would not exceed four inches.
+@PP
+The remaining issue is what happens when Lout decides that it is time to
+stop. The obvious thing to do is to replace the last invocation by an
+empty object:
+@ID @Code {
+".. .. .. .. .. .. .. .. {}"
+}
+As the example shows, this would leave a small trailing space, which
+is a major headache. Lout fixes this
+by replacing the last invocation with a different kind of empty object,
+called @@Null, whose effect is to make an adjacent concatenation symbol
+disappear, preferably one preceding the @@Null. Thus, when Lout
+replaces @Code "@Leaders" by @@Null in the expression
+@ID @Code {
+".. .. .. .. .. .. .. .. @Leaders"
+}
+the trailing space, which is really a horizontal concatenation symbol,
+disappears as well. This is taken into account when deciding
+whether there is room to replace @Code "@Leaders" by its body.
+@PP
+The remainder of this section is devoted to showing how definitions may
+be used to specify the @I {page layout}
+page.layout @RawIndex { Page layout }
+page.layout.basic @SubIndex { principles of }
+of a document. To begin with,
+we can define a page like this:
+@ID @OneRow @Code {
+"def @Page"
+"{"
+" //1i ||1i"
+" 6i @Wide 9.5i @High"
+" { @TextPlace //1rt @FootSect }"
+" ||1i //1i"
+"}"
+}
+Now @Code "@Page" is an eight by
+eleven and a half inch object, with one inch margins, a place at the top for
+text, and a section at the bottom for footnotes (since @Code "//1rt"
+bottom-justifies the following object). It will be
+convenient for us to show the effect of invoking @Code "@Page" like this:
+@ID @Code
+{ { //0.5ix 8p @Font "@Page" &2m => } &2m
+@LittlePage { "@TextPlace" //1rt "@FootSect" }
+}
+with the invoked symbol appearing to the left of the arrow, and its body to
+the right.
+@PP
+The definition of a vertical list of pages should come as no surprise:
+@ID @OneRow @Code {
+"def @PageList"
+"{"
+" @Page // @PageList"
+"}"
+}
+This allows invocations like the following:
+@ID @Code @HExpand @HScale {
+{ //0.5ix 8p @Font "@PageList" }
+||1m { //0.5ix => } ||1m
+{ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+ //0.2c 8p @Font "@PageList"
+}
+||1m { //0.5ix => } ||1m
+{ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+ // @LittlePage { "@TextPlace" //1rt "@FootSect" }
+ //0.2c 8p @Font "@PageList"
+}
+||1m { //0.5ix => } ||1m
+{ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+ // @LittlePage { "@TextPlace" //1rt "@FootSect" }
+}
+}
+setting @Code "@PageList" to @Code @@Null on the last step. Any
+number of pages can be generated.
+@PP
+A definition for @Code "@TextPlace" is beyond us at present, since
+@Code "@TextPlace" must be replaced by different parts of the text
+of the document on different pages. But we can
+define @Code "@FootSect" to be a small space followed by a
+horizontal line followed by a list of places where footnotes go:
+@ID @OneRow @Code {
+"def @FootList "
+"{ "
+" @FootPlace //0.3v @FootList"
+"} "
+" "
+"def @FootSect"
+"{ "
+" //0.3v 1i @Wide @HLine"
+" //0.3v @FootList "
+"} "
+}
+assuming that @Code "@HLine" will produce a horizontal line of the
+indicated width. With this definition we can generate pages like this:
+@ID @Code {
+@LittlePage { "@TextPlace"
+ //1rt
+ "@FootSect"
+ }
+||2m { //0.5ix => } ||2m
+@LittlePage { "@TextPlace"
+ //1rt
+ @OneRow { 1c @Wide @HLine
+ //0.1c
+ "@FootList"
+ }
+ }
+||2m { //0.5ix => } ||2m
+@LittlePage { "@TextPlace"
+ //1rt
+ @OneRow { 1c @Wide @HLine
+ //0.1c
+ "@FootPlace"
+ //0.1c
+ "@FootList"
+ }
+ }
+}
+and so on for arbitrarily many footnotes.
+@PP
+We will see in the next section how invocations of @Code "@PageList",
+@Code "@FootSect" and @Code "@FootList" are replaced by their bodies only
+when the need to insert text and footnotes obliges Lout to do so;
+otherwise the invocations are replaced by @@Null. In this way, the
+right number of pages is made, the small line appears only on pages that
+have at least one footnote, and unnecessary concatenation symbols
+disappear.
+@PP
+This approach to page layout is the most original contribution Lout has
+made to document formatting. It is extraordinarily flexible. Two-column
+pages? Use
+@ID @Code {
+"{2.8i @Wide @TextPlace} ||0.4i {2.8i @Wide @TextPlace}"
+}
+instead of {@Code "@TextPlace"}. Footnotes in smaller type? Use
+@Code { -2p "@Font" "@FootPlace" } instead of {@Code "@FootPlace"}. And
+on and on.
+@End @Section
diff --git a/doc/expert/pri_gall b/doc/expert/pri_gall
new file mode 100644
index 0000000..9efb3c1
--- /dev/null
+++ b/doc/expert/pri_gall
@@ -0,0 +1,279 @@
+@Section
+ @Title { Galleys }
+ @Tag { galleys }
+@Begin
+@PP
+It is time to pause and ask ourselves how close we are to achieving our
+aim of producing neatly formatted documents. We can certainly produce
+the pieces of a document:
+@ID {
+
+nohyphen @Break @LittlePageColumn {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@DP
+In the world of music England is supposed to be a mere province. If she
+produces an indifferent composer or performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign students of
+musical history have to acknowledge a British musical genius, he is
+considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+}
+
+||1c
+
+@LittlePageColumn
+{ { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944.
+}
+
+||1c
+
+@Code {
+ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+// @LittlePage { "@TextPlace" //1rt "@FootSect" }
+// @LittlePage { "@TextPlace" //1rt "@FootSect" }
+//0.2c 8p @Font "@PageList"
+}
+
+}
+but when we try to merge them together, we encounter two obstacles.
+@PP
+First, when an object is entered at a certain place in the document, it
+appears at that place. But a footnote is naturally entered immediately
+after the point it refers to (`{-2p @Font PURCELL}' in this case), yet it
+appears somewhere else: at the bottom of a page.
+@PP
+Second, all our features build up larger objects out of smaller ones,
+but the -2p @Font PURCELL object, for example, must be broken down into
+page-sized pieces. This occurs when the available space at the
+`somewhere else' is insufficient to hold the entire object, so this
+second obstacle arises out of the first.
+@PP
+Lout's last major feature, which we introduce to overcome these
+obstacles, is the @I galley
+galley.feature @Index { Galleys }
+(the name is borrowed from the galleys
+used in manual typesetting). A galley is an object plus a cross
+reference which points to where the object is to appear. The example
+above has three galleys:
+@ID {
+
+{
+//0.1c
+
+nohyphen @Break @LittlePageColumn {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@DP
+In the world of music England is supposed to be a mere province. If she
+produces an indifferent composer or performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign students of
+musical history have to acknowledge a British musical genius, he is
+considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+} { //0.4c 180d @Rotate @Arrow 2.0c }
+
+}
+
+||0io ||4.8c
+
+@Code {
+ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+// @LittlePage { "@TextPlace" //1rt "@FootSect" }
+// @LittlePage { "@TextPlace" //1rt "@FootSect" }
+//0.2c 8p @Font "@PageList"
+} 180d @Rotate @Arrow 1i @I -2p @Font {to printer}
+
+||0io ||2.0c
+{
+//3.9c
+
+{ @Arrow 1.7c } nohyphen @Break @LittlePageColumn
+{ { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944.
+}
+}
+}
+A galley replaces the invocation pointed to by its cross reference. If
+space is not sufficient there to hold it all, the remainder of the
+galley is split off (the vertical concatenation symbol preceding it
+being discarded) and it replaces later invocations of the same symbol.
+This is exactly what is required to get text and footnotes onto pages.
+@PP
+To create a galley, first define a symbol with a
+special @Code into
+into @Index { @Code into clause }
+clause, like this:
+@ID @OneRow @Code {
+"def @FootNote into { @FootPlace&&following }"
+" right x"
+"{"
+" 8p @Font x"
+"}"
+}
+An invocation of such a symbol will then be a galley whose object is the
+result of the invocation, and whose cross reference is given by the
+@Code into clause. The right parameter of the cross reference must be
+one of {@Code preceding}, {@Code following}, and {@Code foll_or_prec}.
+@PP
+A symbol, like @Code "@FootPlace", which is the @I target of a galley,
+target.g @Index { Target of a galley }
+must contain the special symbol @@Galley exactly once in its body; often
+this is all that the body contains:
+@ID @Code {
+"def @FootPlace { @Galley }"
+}
+It is this special symbol that is replaced by the incoming galley, in
+fact, not the @Code "@FootPlace" symbol as a whole.
+@PP
+A symbol which contains @@Galley, either directly within its body or
+indirectly within the body of a symbol it invokes, is called a @I receptive
+receptive @Index { Receptive symbol }
+symbol, meaning receptive to galleys. @Code "@FootPlace" is receptive, which
+makes @Code "@FootList", @Code "@FootSect" and @Code "@PageList"
+receptive since they invoke @Code "@FootPlace". If no galley replaces
+any @@Galley within some invocation of a receptive symbol, that
+invocation is replaced by @@Null. The advantages of this rule for page
+layout were explained at the end of Section {@NumberOf definitions}.
+@PP
+Let us now follow through the construction of our example
+document. Initially there is just the one @I root
+root.galley @Index { Root galley }
+galley, containing an unexpanded invocation of @Code "@PageList":
+@ID { ||5c
+10p @Font @Code "@PageList" 180d @Rotate @Arrow 1i @I -2p @Font {to printer}
+}
+Then the -2p @Font PURCELL galley appears, targeted to a @Code
+"@TextPlace". Lout knows that there is a @Code "@TextPlace" hidden
+inside @Code "@PageList", so it expands @Code "@PageList":
+@ID {
+
+{
+//0.1c
+
+nohyphen @Break @LittlePageColumn {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@DP
+In the world of music England is supposed to be a mere province. If she
+produces an indifferent composer or performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign students of
+musical history have to acknowledge a British musical genius, he is
+considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+} { //0.4c 180d @Rotate @Arrow 2.2c }
+}
+
+||0io ||5c
+
+@Code {
+ @LittlePage { "@TextPlace" //1rt "@FootSect" }
+//0.2c 8p @Font "@PageList"
+} 180d @Rotate @Arrow 1i @I -2p @Font {to printer}
+
+}
+After promoting the first line into @Code "@TextPlace", the footnote
+galley attached to it appears and demands an invocation of
+@Code "@FootPlace" following its attachment point
+(`{-2p @Font PURCELL}'). Such a @Code "@FootPlace" is found at
+the bottom of the first page, inside @Code "@FootSect", which is
+accordingly expanded, and the footnote is promoted onto the page:
+@ID {
+
+{
+//1.2c
+
+nohyphen @Break @LittlePageColumn {
+In the world of music England is supposed to be a mere province. If she
+produces an indifferent composer or performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign
+students of musical history have to acknowledge a British musical genius,
+he is considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+} 180d @Rotate @Arrow 2.2c
+}
+
+||0io ||5c
+
+{
+nohyphen @Break @LittleDocument
+//
+@LittleText {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@LittleFootNote
+{ { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944.
+//1vx @Code "@FootList"
+}
+//1vx @Code "@TextPlace" }
+//
+@LittleEndRun
+//0.2c 8p @Font @Code "@PageList"
+} 180d @Rotate @Arrow 1i -2p @Font @I {to printer}
+
+}
+Now the promotion of the -2p @Font PURCELL galley resumes. When the
+first page is filled, Lout searches forwards for another @Code "@TextPlace"
+to receive the remainder, once again expanding a @Code "@PageList":
+@ID {
+
+{
+//4.85c
+
+nohyphen @Break @LittlePageColumn {
+performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign
+students of musical history have to acknowledge a British musical genius,
+he is considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+} 180d @Rotate @Arrow 2.2c
+}
+
+||0io ||5c
+
+{
+nohyphen @Break @LittleDocument
+//
+@LittleText {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@LittleFootNote
+{ { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944.
+}
+@DP
+ @HExpand {In the world of music}
+//1vx @HExpand {England is supposed to}
+//1vx @HExpand {be a mere province. If}
+//1vx @HExpand {she produces an indifferent composer or}
+}
+//
+@LittleEndRun
+// @LittlePage { @Code "@TextPlace" //1rt @Code "@FootSect" }
+//0.2c 8p @Font @Code "@PageList"
+} 180d @Rotate @Arrow 1i -2p @Font @I {to printer}
+
+}
+and so on. All these expansions and replacements are done with total
+integrity. For example, if Lout finds after expanding @Code "@FootSect"
+that the page is too full to accept even the first line of the footnote,
+@Code "@FootSect" is reset to unexpanded and the search for a target for
+the footnote moves on. And the cross reference direction, @Code
+preceding or @Code following, is always obeyed (although lack of space
+sometimes prevents Lout from choosing the nearest target). Only the
+root galley contains receptive symbols in our running example, but
+any galley may contain them.
+@End @Section
diff --git a/doc/expert/pri_obje b/doc/expert/pri_obje
new file mode 100644
index 0000000..fcb9177
--- /dev/null
+++ b/doc/expert/pri_obje
@@ -0,0 +1,178 @@
+@Section
+ @Title { Objects }
+ @Tag { objects }
+@Begin
+@PP
+Since our aim is to produce neatly formatted documents, we should begin by
+looking at a typical example of such a document:
+@ID {
+nohyphen @Break @LittleDocument
+//
+@LittleText {
+@DP
+|0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v}
+@LittleFootNote
+{ { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944.
+}
+@DP
+In the world of music England is supposed to be a mere province. If she
+produces an indifferent composer or performer, that is regarded
+elsewhere as perfectly normal and natural; but if foreign students of
+musical history have to acknowledge a British musical genius, he is
+considered a freak.
+@PP
+Such a freak is Henry Purcell. Yet if we make a choice of fifteen of
+the world's musical classics, as here, we find that we cannot omit this
+English master.
+}
+//
+@LittleEndRun
+}
+It is a large rectangle made from three smaller rectangles -- its
+pages. Each page is made of lines; each line is made of words,
+although it makes sense for any rectangle (even a complete document) to
+be part of a line, provided it is not too large.
+@PP
+Lout deals with something a little more complicated than rectangles:
+@I objects. An object
+objec @Index { Object }
+is a rectangle with at least one @I {column mark}
+column.mark @Index { Column mark }
+mark.alignment @Index { Mark alignment }
+alignment @RawIndex { Alignment @I see mark alignment }
+protruding above and below it, and at least one @I {row mark}
+row.mark @Index { Row mark }
+protruding to the left and right. The simplest objects contain words like
+metempsychosis, and have one mark of each type:
+@ID {
+@ShowMarks metempsychosis
+}
+The rectangle exactly encloses the word; its column mark is at the left
+edge, and its row mark passes through the middle of the lower-case
+letters. The rectangle and marks do not appear on the printed page, but
+to understand what Lout is doing you have to imagine them.
+@PP
+To place two objects side by side, we separate them by the
+symbol @Code "|", which denotes the act of @I {horizontal
+concatenation}. So, if we write
+@ID {
+@Code "USA | Australia"
+}
+the result will be the object
+@ID {
+@ShowMarks USA | @ShowMarks Australia
+}
+Notice that this object has two column marks, but still only one row mark,
+because @Code "|" merges the two row marks
+together. This merging of row marks fixes the vertical
+position of each object with respect to the other, but it does not
+determine how far apart they are. This distance, or {@I gap},
+may be given just after the symbol, as in @Code "|0.5i" for example,
+which specifies horizontal concatenation with a gap of half an inch. If
+no gap is given, it is assumed to be {@Code "0i"}.
+@PP
+@I {Vertical concatenation} & , denoted by {@Code "/"},
+is the same apart from the change of direction:
+@ID {
+@Code "Australia /0.1i USA"
+}
+has result
+@ID {
+@ShowMarks Australia /0.1i
+@ShowMarks USA
+}
+The usual merging of marks occurs, and now the gap determines the
+vertical separation. Horizontal and vertical can be combined:
+@ID @Code {
+ |1m USA |1m "|0.2i" |1m Australia
+/1vx "/0.1i" | Washington | "|" | Canberra
+}
+has result
+@ID {
+ @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
+ }
+ }
+}
+tables @Index { Tables }
+There are several things to note carefully here. White space (including
+tabs and newlines) adjacent to a concatenation symbol is ignored, so
+it may be used to lay out the expression clearly. The symbol
+@Code "|" takes precedence over {@Code "/"}, which means that the rows
+are formed first, then vertically concatenated. The symbol @Code "/" will
+merge two or more column marks, creating multiple
+columns (and @Code "|" will merge two or more row marks). This
+implies that the gap @Code "0.2i" used above is between
+columns, not individual items in columns; a gap in the second row
+would therefore be redundant, and so is omitted.
+@PP
+A variant of @Code "/" called @Code "//" left-justifies
+two objects instead of merging their marks.
+@PP
+By enclosing an object in braces, it is possible to override the
+braces @Index { Braces }
+set precedences. Here is another expression for the table
+above, in which the columns are formed first:
+@ID @Code {
+ |1m "{ USA" |1m "/0.1i" |1m "Washington }"
+/1vx "|0.2i" | "{ Australia" | "/" | "Canberra }"
+}
+Braces have no effect other than to alter the grouping.
+@PP
+@I {Paragraph breaking} occurs when an object is too wide to fit
+paragraph.breaking @Index { Paragraph breaking }
+into the space available to it; by breaking its paragraphs into lines,
+its width is reduced to an acceptable amount. The available
+space is determined by the @@Wide symbol, whose form is
+@ID {
+@I length @@Wide @I object
+}
+and whose result is the given object modified to have exactly the given
+length. For example,
+@ID @OneRow @Code {
+"5i @Wide {"
+"Macbeth was very ambitious. This led him to wish to become king of"
+"Scotland. The witches told him that this wish of his would come true. The"
+"king of Scotland at this time was Duncan. Encouraged by his wife, Macbeth"
+"murdered Duncan. He was thus enabled to succeed Duncan as king. (51 words)"
+"|0.5i"
+"Encouraged by his wife, Macbeth achieved his ambition and realized the"
+"prediction of the witches by murdering Duncan and becoming king of Scotland"
+"in his place. (26 words)"
+"}"
+}
+has for its result the following five inch wide object
+@Cite { $strunk1979style }:
+@ID {
+5i @Wide {
+Macbeth was very ambitious. This led him to wish to become king of
+Scotland. The witches told him that this wish of his would come true. The
+king of Scotland at this time was Duncan. Encouraged by his wife, Macbeth
+murdered Duncan. He was thus enabled to succeed Duncan as king. (51 words)
+|0.5i
+Encouraged by his wife, Macbeth achieved his ambition and realized the
+prediction of the witches by murdering Duncan and becoming king of Scotland
+in his place. (26 words)
+}
+}
+A paragraph of text can be included anywhere, and it will be broken
+automatically if necessary to fit the available space. The spaces
+between words are converted into concatenation symbols.
+@PP
+These are the most significant of Lout's object-building symbols. There
+are others, for changing fonts, controlling paragraph breaking, printing
+graphical objects like boxes and circles, and so on, but
+they do not add anything new in principle.
+@End @Section
diff --git a/doc/slides/README b/doc/slides/README
new file mode 100644
index 0000000..a494b7c
--- /dev/null
+++ b/doc/slides/README
@@ -0,0 +1,18 @@
+Directory lout/doc/slides
+
+This directory contains the Lout source of
+a set of overhead transparencies entitled
+`A Practical Introduction to the Lout
+Document Formatting System.' To format
+the transparencies, type
+
+ lout all > outfile.ps
+
+in this directory. This needs to be done
+twice to resolve all cross references.
+There should be no error messages at all
+after the second run. A copy of the final
+outfile.ps is included.
+
+Jeff Kingston
+17 September 1999
diff --git a/doc/slides/all b/doc/slides/all
new file mode 100644
index 0000000..98c7d6c
--- /dev/null
+++ b/doc/slides/all
@@ -0,0 +1,680 @@
+@SysInclude { eq }
+@SysInclude { tab }
+@SysInclude { fig }
+@SysInclude { pas }
+@SysInclude { graph }
+@SysInclude { cprint }
+@SysInclude { slides }
+@SysDatabase @Reference { loutrefs }
+@OverheadTransparencies
+ @Title { A Practical Introduction to the
+
+Lout
+
+Document Formatting System
+}
+ @RunningTitle { lout }
+ @Author { Jeffrey H. Kingston }
+ @Institution {
+Basser Dept. of Computer Science
+The University of Sydney
+}
+ @InitialLanguage { English }
+//
+
+@Overhead
+ @Title { A simple input file }
+@Begin
+@ID @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"Hello, world"
+"@End @Text"
+}
+@LP
+@LP
+@Heading { How to format it }
+@ID @Code {
+"lout filename > out.ps"
+"ghostview out.ps"
+"mpr out.ps"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+Hello, world
+}
+@End @Overhead
+
+@Overhead
+ @Title { Headings and paragraphs }
+@Begin
+@ID @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"@Heading { Introduction }"
+"@PP"
+"The design of the Lout formatting"
+"system was undertaken with the"
+"needs of the @I { ordinary user }"
+"very much in mind."
+"@End @Text"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Heading { Introduction }
+@PP
+The design of the Lout formatting
+system was undertaken with the
+needs of the @I { ordinary user }
+very much in mind.
+}
+@End @Overhead
+
+@Overhead
+ @Title { Displays }
+@Begin
+@ID @Code {
+"You certainly don't want to return to"
+"his office and report:"
+"@IndentedDisplay @I {"
+"`I can't find an efficient algorithm, I"
+"guess I'm just too dumb.'"
+"}"
+"To avoid serious damage to your"
+"position in the company, it would"
+"be better if ..."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+You certainly don't want to return to
+his office and report:
+@IndentedDisplay @I {
+`I can't find an efficient algorithm, I
+guess I'm just too dumb.'
+}
+To avoid serious damage to your
+position in the company, it would
+be better if ...
+}
+@End @Overhead
+
+@Overhead
+ @Title { Paragraph breaking styles }
+@Begin
+@ID @Code {
+"You certainly don't want to return to"
+"his office and report:"
+"@ID { ragged nohyphen } @Break @I {"
+"`I can't find an efficient algorithm, I"
+"guess I'm just too dumb.'"
+"}"
+"To avoid serious damage to your"
+"position in the company, it would"
+"be better if ..."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+You certainly don't want to return to
+his office and report:
+@ID { ragged nohyphen } @Break @I {
+`I can't find an efficient algorithm, I
+guess I'm just too dumb.'
+}
+To avoid serious damage to your
+position in the company, it would
+be better if ...
+}
+@End @Overhead
+
+@Overhead
+ @Title { Lists }
+@Begin
+@ID @Code {
+"@Heading { Operating Instructions }"
+"@NumberedList"
+"@ListItem { Press small green lever. }"
+"@ListItem { Wait approximately 10 seconds"
+"until red light flashes. }"
+"@ListItem { If smoke emerges from rear of unit,"
+"call Service Department. }"
+"@EndList"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Heading { Operating Instructions }
+@NumberedList
+@ListItem { Press small green lever. }
+@ListItem { Wait approximately 10 seconds
+until red light flashes. }
+@ListItem { If smoke emerges from rear of unit,
+call Service Department. }
+@EndList
+}
+@End @Overhead
+
+@Overhead
+ @Title { Technical reports }
+@Begin
+@ID @Code {
+"@SysInclude { report }"
+"@Report"
+" @Title { ... }"
+" @Author { ... }"
+" @Institution { ... }"
+" @DateLine { ... }"
+"//"
+"@Abstract { ... }"
+"@Section { ... }"
+"@Section { ... }"
+"@Section { ... }"
+"@Appendix { ... }"
+"@Appendix { ... }"
+}
+@End @Overhead
+
+@Overhead
+ @Title { Sections }
+@Begin
+@ID @Code {
+"@Section"
+" @Tag { dfs }"
+" @Title { Depth-first search }"
+"@Begin"
+"@PP"
+"We turn now to our first algorithm"
+"on general graphs ..."
+"@End @Section"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Heading { 10.6. Depth-first search }
+@PP
+We turn now to our first algorithm
+on general graphs ...
+}
+@End @Overhead
+
+@Overhead
+ @Title { Cross references }
+@Begin
+@ID @Code {
+"For further information, consult"
+"Section @NumberOf dfs on page"
+"@PageOf { dfs }."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+For further information, consult
+Section 10.6 on page 245.
+}
+@End @Overhead
+
+@Overhead
+ @Title { References }
+@Begin
+@ID @Code {
+"@Database @Reference { myrefs }"
+"..."
+"For the details, consult the User's"
+"Guide @Cite { $kingston1995lout.user }."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+For the details, consult the User's
+Guide [1].
+@LP
+...
+@LP
+@Heading { References }
+@NumberedList
+@LI @RefPrint kingston1995lout.user
+@LI ...
+@EndList
+}
+@End @Overhead
+
+@Overhead
+ @Title { Database file myrefs.ld }
+@Begin
+@ID @Code {
+"{ @Reference"
+" @Tag { kingston1995lout.user }"
+" @Type { Book }"
+" @Author { Jeffrey H. Kingston }"
+" @Title { A User's Guide to the Lout"
+"Document Formatting System (Version 3) }"
+" @Institution { Basser Department of"
+"Computer Science }"
+" @Address { University of Sydney"
+"2006, Australia }"
+" @Year { 1994 }"
+"}"
+}
+@End @Overhead
+
+@Overhead
+ @Title { Books (and theses) }
+@Begin
+@BulletList
+@LI { Title page, preface, introduction }
+@LI { Automatic table of contents }
+@LI { Prefatory pages numbered in Roman numerals }
+@LI { Chapters, sections, subsections, appendices }
+@LI { References at end of chapters or book }
+@LI { Running page headers }
+@LI { Odd-even page formats }
+@LI { Sorted index }
+@EndList
+@End @Overhead
+
+@Overhead
+ @Title { Making a sorted index }
+@Begin
+@ID @Code {
+"@PP"
+"There are several possible ways to implement the"
+"@I Partition procedure,"
+"partition @Index { @I Partition (in {@I Quicksort}) }"
+"but the following seems to be the best. Starting ..."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Heading { Index }
+@LD lines @Break {
+...
+partial order, 227
+@I Partition (in {@I Quicksort}), 189
+postorder traversal
+ of binary tree, 19
+ topological ordering, 229
+...
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Equation formatting }
+@Begin
+@ID @Code {
+"@SysInclude { eq }"
+"..."
+"Since @Eq { T(n-i) = T(0) = 0 } we have"
+"@IndentedDisplay @Eq {"
+"T(n) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1"
+"}"
+"for the number of disk moves made by the Towers"
+"of Hanoi algorithm, given @Eq { n } disks."
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+Since @Eq { T(n-i) = T(0) = 0 } we have
+@IndentedDisplay @Eq {
+T(n) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1
+}
+for the number of disk moves made by the Towers of Hanoi
+algorithm, given @Eq { n } disks.
+}
+@End @Overhead
+
+@Overhead
+ @Title { Another equation }
+@Begin
+@ID @Code {
+"@CenteredDisplay @Eq {"
+"big int supp 1 on 0 `"
+"dx over sqrt { 1 - x sup 2 }"
+"= pi over 2"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@CenteredDisplay @Eq {
+big int supp 1 on 0 `
+dx over sqrt { 1 - x sup 2 }
+= pi over 2
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Tables }
+@Begin
+@ID @Code {
+"@SysInclude { tab }"
+"..."
+"@Tab"
+" @Fmta { @Col @I A ! @Col B }"
+"{"
+"@Rowa"
+" A { Fortran }"
+" B { The first ... language }"
+"@Rowa"
+" A { Algol-60 }"
+" B { Said to be ... successors }"
+"@Rowa"
+" A { Pascal }"
+" B { The famous ... successors }"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Tab
+ vmargin { 0.4v }
+ @Fmta { @Col @I A ! @Col B }
+{
+@Rowa
+ A { Fortran }
+ B { The first high-level
+programming language }
+@Rowa
+ A { Algol-60 }
+ B { Said to be a better
+language than most of its successors }
+@Rowa
+ A { Pascal }
+ B { The most famous of
+Algol-60's successors }
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Another table }
+@Begin
+@RID @Code {
+"@Tab"
+" hmargin { 0.4c }"
+" vmargin { 0.3v }"
+" side { single }"
+" @Fmta { @Col @B @CC X @Over A,B,C }"
+" @Fmtb { @Col @I A ! @Col B !! @Col C }"
+"{"
+""
+"@Rowa above { single }"
+" X { Value of mathematical ... dollars) }"
+""
+"@Rowb above { double }"
+" A { Quadratic formula }"
+" B { @Eq { x ^= { ... } over 2a } }"
+" C { 3^.5 }"
+""
+"@Rowb below { single }"
+" A { Binomial theorem }"
+" B { @Eq { ( a + b ) sup n ^= ... b sup n-k } }"
+" C { 12^ }"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+0.6 @Scale @Tab
+ hmargin { 0.4c }
+ vmargin { 0.3v }
+ side { single }
+ @Fmta { @Col @B @CC X @Over A,B,C }
+ @Fmtb { @Col @I A ! @Col B !! @Col C }
+{
+@Rowa
+ above { single }
+ X { Value of mathematical formulae (millions of dollars) }
+@Rowb
+ above { double }
+ A { Quadratic formula }
+ B { @Eq { x ^= { minus b +- sqrt { b sup 2 - 4ac } } over 2a } }
+ C { 3^.5 }
+@Rowb
+ below { single }
+ A { Binomial theorem }
+ B { @Eq { ( a + b ) sup n ^= big sum from k=0 to infty
+matrix atleft { ( } atright { ) } { n above k } a sup k b sup n-k
+} }
+ C { 12^ }
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Pascal programs }
+@Begin
+@ID @Code {
+"@SysInclude { pas }"
+"..."
+"@ID @Pas {"
+"procedure DoPriAbstract(root: PriEntry);"
+"begin"
+" if root^.leftchild <> nil then begin"
+" DoPriAbstract(root^.leftchild);"
+" write(', ');"
+" end;"
+" PriKeyAbstract(root^.key);"
+" write(':');"
+" PriValueAbstract(root^.value);"
+" if root^.rightchild <> nil then begin"
+" write(', ');"
+" DoPriAbstract(root^.rightchild);"
+" end;"
+"end;"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Pas {
+procedure DoPriAbstract(root: PriEntry);
+begin
+ if root^.leftchild <> nil then begin
+ DoPriAbstract(root^.leftchild);
+ write(', ');
+ end;
+ PriKeyAbstract(root^.key);
+ write(':');
+ PriValueAbstract(root^.value);
+ if root^.rightchild <> nil then begin
+ write(', ');
+ DoPriAbstract(root^.rightchild);
+ end;
+end;
+} &0io
+}
+@End @Overhead
+
+@Overhead
+ @Title { Basic graphics }
+@Begin
+@ID @Code {
+"45d @Rotate 1.5 @Scale @Box {"
+" Hello, world"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@ID @Code {
+45d @Rotate 1.5 @Scale @Box {
+ Hello, world
+}
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Advanced graphics }
+@Begin
+@ID @Code {
+"@SysInclude { fig }"
+"..."
+"@Fig {"
+"@Box"
+" margin { 0c }"
+" paint { black }"
+"@Ellipse"
+" linestyle { noline }"
+" paint { white }"
+"{ Hello, world }"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Fig {
+@Box
+ margin { 0c }
+ paint { black }
+@Ellipse
+ linestyle { noline }
+ paint { white }
+{ Hello, world }
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Point labelling }
+@Begin
+@ID @Code {
+"@Fig {"
+"A::"
+"{"
+" 1:: @Ellipse { 3c @Wide 2c @High }"
+" //3c"
+" 2:: @Box { 3c @Wide 2c @High }"
+"}"
+"@ShowLabels"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage {
+@Fig {
+A::
+{
+ 1:: @Ellipse { 3c @Wide 2c @High }
+ //3c
+ 2:: @Box { 3c @Wide 2c @High }
+}
+@ShowLabels
+}
+}
+@End @Overhead
+
+@Overhead
+ @Title { Graphs }
+@Begin
+@LP
+@ID -1p @Font @Code {
+"@Graph"
+" abovecaption { New South Wales road deaths"
+"(per 100 million vehicle km) }"
+"{"
+" @Data points { plus } pairs { dashed }"
+" { 1963 5.6 1971 4.3 1976 3.7 1979 3.4"
+" 1982 2.9 1985 2.3 1988 2.0 }"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage @Graph
+ width { 9 cm }
+ height { 6 cm }
+ abovecaption { New South Wales road deaths
+(per 100 million vehicle km) }
+{
+ @Data
+ points { plus }
+ pairs { dashed }
+ {
+ 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0
+ }
+}
+@End @Overhead
+
+@Overhead @Begin
+@RID @Code {
+"-2p @Font @Graph"
+" style { axes }"
+" xorigin { 0 } yorigin { 0 }"
+" xticks { 10@ 50@ 100@ 200@ 500@ }"
+" objects { @NE at { 300 2 } @I { Exponential }"
+" @SE at { ... } @I { Uniform } }"
+" belowcaption { @I n }"
+"{"
+" @Data points { filledcircle } { ... }"
+" @Data points { filledcircle } { ... }"
+""
+" @Data pairs { dashed }"
+" { 10 2 500 2 }"
+""
+" @Data pairs { dashed }"
+" {"
+" xloop from { 10 } to { 500 } by { 20 } do"
+" {"
+" x sqrt { pi*x / 4 } + 1"
+" }"
+" }"
+"}"
+}
+@End @Overhead
+
+@Overhead @Begin
+@ShowPage -2p @Font @Graph
+ style { axes }
+ xorigin { 0 }
+ yorigin { 0 }
+ width { 10 cm }
+ height { 7 cm }
+ xticks { 10@ 50@ 100@ 200@ 500@ }
+ objects {
+ @NE at { 300 2 } @I { Exponential }
+ @SE at { 300 sqrt { pi*300/4 } + 1 } @I { Uniform }
+ }
+ belowcaption { @I n }
+ belowgap { 0 cm }
+{
+ @Data points { filledcircle }
+ { 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 }
+
+ @Data points { filledcircle }
+ { 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 }
+
+ @Data pairs { dashed }
+ { 10 2 500 2 }
+
+ @Data pairs { dashed }
+ {
+ xloop from { 10 } to { 500 } by { 20 } do
+ {
+ x sqrt { pi*x / 4 } + 1
+ }
+ }
+}
+@End @Overhead
diff --git a/doc/slides/mydefs b/doc/slides/mydefs
new file mode 100644
index 0000000..69417f5
--- /dev/null
+++ b/doc/slides/mydefs
@@ -0,0 +1,8 @@
+
+def @Code right x { { Helvetica Base -2p } @Font lines @Break x }
+
+import @BasicSetup
+def @ShowPage right x
+{
+ @Box margin { 1i } 4i @Wide 5i @High { x // }
+}
diff --git a/doc/slides/outfile.ps b/doc/slides/outfile.ps
new file mode 100644
index 0000000..ed978e9
--- /dev/null
+++ b/doc/slides/outfile.ps
@@ -0,0 +1,4470 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.17 (September 1999)
+%%CreationDate: Fri Sep 17 11:58:48 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 LoutGraphPrependGraphic
+% @PrependGraphic file /usr/staff/jeff/lout.lib/include/graphf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Graph (Version 1.0) %
+% %
+% Version 1.0 by Jeffrey H. Kingston, December 1993. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lgraphdict exch known
+ { lgraphdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+/lgraphdict 200 dict def
+lgraphdict begin
+
+% error messages
+/dictfull (dictfull error) def
+/dictstackoverflow (dictstackoverflow error) def
+/execstackoverflow (execstackoverflow error: expression too complex?) def
+/limitcheck (limitcheck error: graph too complex or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of graph?) def
+/typecheck (typecheck error: syntax error in text of graph?) def
+/undefined (undefined error: unknown or misspelt symbol?) def
+/rangecheck (rangecheck error: undefined expression (e.g. divide by zero)?) def
+/VMError (VMError error: run out of memory?) def
+
+% random number between x and y inclusive: x y dorand num
+/dorand { 1 index sub 1 add rand exch mod add } def
+
+% log to given base: base num dolog num
+/dolog { ln exch ln div } def
+
+% maximum of two numbers: <num> <num> max <num>
+/max { 2 copy gt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> padd <point>
+/padd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> psub <point>
+/psub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% distance between two points: <point> <point> distance <length>
+/distance { psub dup mul exch dup mul add sqrt } def
+
+% point at angle and distance: <point> <length> <angle> atangle <point>
+/atangle { 2 copy cos mul 3 1 roll sin mul padd } def
+
+% angle from one point to another: <point> <point> angle <angle>
+/angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+
+% set up for line
+% - linesetup <length> <dashlength>
+/linesetup
+{ newpath
+ xcurr ycurr trpoint xprev yprev trpoint
+ 4 copy moveto lineto distance dashlength
+} def
+
+% set up for icon-avoiding line
+% - ilinesetup <length> <dashlength>
+/ilinesetup
+{ newpath
+ xprev yprev trpoint xcurr ycurr trpoint 4 copy
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 6 2 roll 4 2 roll
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 4 copy moveto lineto distance dashlength
+} def
+
+
+% stroke a solid line: <length> <dashlength> solid -
+/solid
+{ pop pop [] 0 setdash linewidth setlinewidth stroke
+} def
+
+% stroke a dashed line: <length> <dashlength> dashed -
+/dashed
+{ 2 copy 2 mul le 1 index 0 le or
+ { exch pop 1 pt max [ 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 linewidth setlinewidth stroke
+} def
+
+% stroke a cdashed line: <length> <dashlength> cdashed -
+/cdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ 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 linewidth setlinewidth stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> dotted -
+/dotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div 0.99999 mul
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath
+} def
+
+% stroke a noline line: <length> <dashlength> noline -
+/noline
+{ pop pop
+} def
+
+% stroke a y histogram: - yhisto -
+/yhisto
+{ xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ xcurr yprev trpoint lineto
+ xcurr yleft trpoint yextra sub lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke an x histogram: - xhisto -
+/xhisto
+{ xleft yprev trpoint exch xextra sub exch moveto
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ xleft ycurr trpoint exch xextra sub exch lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface y histogram: - surfaceyhisto -
+/surfaceyhisto
+{ firstpair
+ { xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ lastpair
+ { xcurr yleft trpoint yextra sub lineto
+ }
+ { xcurr ycurr trpoint lineto
+ } ifelse
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface x histogram: - surfacexhisto -
+/surfacexhisto
+{ firstpair
+ { xleft yprev trpoint exch xextra sub exch moveto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ lastpair
+ { xleft ycurr trpoint exch xextra sub exch lineto
+ } if
+ linewidth setlinewidth stroke
+} def
+
+% stroke a filled y histogram: - filledyhisto -
+/filledyhisto
+{
+ linewidth setlinewidth
+ xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto
+ xprev yprev trpoint exch currentlinewidth 2 div add exch lineto
+ xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto
+ xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto
+ closepath fill
+} def
+
+% stroke a filled x histogram: - filledxhisto -
+/filledxhisto
+{
+ linewidth setlinewidth
+ xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto
+ xcurr yprev trpoint currentlinewidth 2 div add lineto
+ xcurr ycurr trpoint currentlinewidth 2 div sub lineto
+ xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto
+ closepath fill
+} def
+
+
+% cross: show a small cross
+/cross
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul symbolsize 2 mul rlineto
+ 0 symbolsize -2 mul rmoveto
+ symbolsize -2 mul symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% plus: show a small plus
+/plus
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize 2 mul 0 rlineto
+ symbolsize neg symbolsize neg rmoveto
+ 0 symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% square: show a small square
+/square
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledsquare: show a small filled square
+/filledsquare
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% diamond: show a small diamond
+/diamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filleddiamond: show a small filled diamond
+/filleddiamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% circle: show a small circle
+/circle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke
+} def
+
+% filledcircle: show a small filled circle
+/filledcircle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill
+} def
+
+% triangle: show a small triangle
+/triangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledtriangle: show a small filled triangle
+/filledtriangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+
+%plog: like log only with a base, and protected from failing if <= 0
+% base x plog res
+/plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def
+
+% xtr: transform one x value logarithmically if xlog > 1
+% <num> xtr <num>
+/xtr
+{ xlog 1 gt
+ { xlog exch plog
+ } if
+} def
+
+% ytr: transform one y value logarithmically if ylog > 1
+% <num> ytr <num>
+/ytr
+{ ylog 1 gt
+ { ylog exch plog
+ } if
+} def
+
+% % trpoint: transform (x, y) in graph space into (x', y') in print space
+% % x y trpoint x' y'
+% /trpoint
+% { exch xtr trxmin sub trxmax trxmin sub div xwidth mul xextra add
+% exch ytr trymin sub trymax trymin sub div ywidth mul yextra add
+% } def
+
+
+% trpoint: transform (x, y) in graph space into (x', y') in print space
+% x y trpoint x' y'
+/trpoint
+{ exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse
+ trxmax trxmin sub div xwidth mul xextra add
+
+ exch ytr ydecr { trymax exch sub } { trymin sub } ifelse
+ trymax trymin sub div ywidth mul yextra add
+} def
+
+
+% yonly: interpolate x values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/yonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get
+ } for
+ ]
+} def
+
+% xonly: interpolate y values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/xonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get exch
+ } for
+ ]
+} def
+
+% xandy: no interpolation of x or y values
+% [ data ] xandy [ data ]
+/xandy {} def
+
+
+% expstringwidth: calculate width of string containing optional exponent
+% <string> expstringwidth <width>
+/expstringwidth
+{ (^) search
+ { exch pop stringwidth pop exch stringwidth pop 0.7 mul add }
+ { stringwidth pop }
+ ifelse
+} def
+
+% expstringshow: show string containing optional exponent
+% <string> expstringshow -
+/expstringshow
+{ (^) search
+ { exch pop show 0 0.5 ft rmoveto
+ gsave currentfont 0.7 scalefont setfont show grestore
+ }
+ { show
+ }
+ ifelse
+} def
+
+% concatenate two strings: <string> <string> strconcat <string>
+/strconcat
+{ 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
+
+% lgen: generate one label automatically
+% num lgen num string
+/lgen { dup 20 string cvs } def
+
+% loglgen: generate one logarithmic label (with exponent)
+% <base> <exponent> loglgen <string>
+/loglgen
+{ 20 string cvs exch 20 string cvs
+ (^) strconcat exch strconcat
+} def
+
+
+% printxtick: print one x tick
+% xpos printxtick -
+/printxtick
+{ newpath
+ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rlineto [] 0 setdash stroke
+} def
+
+% printxlabel: print one x label
+% (xlabel) xpos printxlabel -
+/printxlabel
+{ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printytick: print one y tick
+% ypos printytick -
+/printytick
+{ newpath
+ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rlineto [] 0 setdash stroke
+} def
+
+% printylabel: print one y label
+% (ylabel) ypos printylabel -
+/printylabel
+{ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+% printrtick: print one r tick
+% ypos printrtick -
+/printrtick
+{ newpath
+ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printrlabel: print one r label
+% (rlabel) ypos printrlabel -
+/printrlabel
+{ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rmoveto 0.3 ft -0.3 ft rmoveto
+ expstringshow
+} def
+
+% printticks: print ticks and labels
+% /tickproc /labelproc [ tickandlabeldata ] min printticks -
+/printticks
+{ /prev exch def
+ { dup type dup dup /integertype eq exch /realtype eq or
+ { pop dup /prev exch def 2 index cvx exec
+ }
+ { /stringtype eq
+ { prev 2 index cvx exec
+ }
+ { pop
+ } ifelse
+ } ifelse
+ } forall
+ pop pop
+} def
+
+
+% printxaxistick: print one x axis tick
+% xpos printxaxistick -
+/printxaxistick
+{ newpath
+ yaxis trpoint moveto 0 xticklength -2 div rmoveto
+ 0 xticklength rlineto [] 0 setdash stroke
+} def
+
+% printxaxislabel: print one x axis label
+% (xlabel) xpos printxaxislabel -
+/printxaxislabel
+{ yaxis trpoint moveto
+ 0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printyaxistick: print one y axis tick
+% ypos printyaxistick -
+/printyaxistick
+{ newpath
+ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto
+ yticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printyaxislabel: print one y axis label
+% (ylabel) ypos printyaxislabel -
+/printyaxislabel
+{ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+
+% <val> minmax -
+% perform minv := min(minv, val); maxv := max(maxv, val)
+% allowing for the possibility of minv, maxv, val being false (undefined)
+/minmax
+{ dup false eq
+ { pop }
+ { minv false eq
+ { dup /minv exch def /maxv exch def }
+ { dup minv lt
+ { /minv exch def }
+ { dup maxv gt
+ { /maxv exch def }
+ { pop }
+ ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% <ticks> ticksundef <ticks> <bool>
+% returns true iff the ticks array is undefined (one false entry)
+/ticksundef
+{ dup length 1 eq
+ { dup 0 get false eq
+ }
+ { false }
+ ifelse
+} def
+
+% <number> integral <boolean>
+% true if the number has an integral value
+/integral { dup round eq } def
+
+% ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base
+% ticksandlimits: sort out value of x or y ticks and limits and log base
+/ticksandlimits
+{ /base exch def
+ /minv false def
+ /maxv false def
+
+ % min and max of user-supplied minval, maxval, and axis
+ minmax minmax minmax
+
+ % min and max of data points
+ { 0 get dup dup length 1 sub 3 index exch 2 exch
+ { get minmax dup
+ } for pop pop
+ } forall
+ pop dup
+
+ % min and max of tick values
+ { dup type /stringtype eq
+ { pop } { minmax } ifelse
+ } forall
+
+ % fix minv and maxv if undefined (false) or equal
+ minv false eq
+ { /minv -1 def /maxv 1 def }
+ { minv maxv eq
+ { minv 0 lt
+ { /minv 2 minv mul def /maxv 0 def
+ }
+ { minv 0 eq
+ { /minv -1 def /maxv 1 def
+ }
+ { /minv 0 def /maxv 2 maxv mul def
+ } ifelse
+ } ifelse
+ } if
+ } ifelse
+
+ % invent ticks if undefined
+ ticksundef
+ { pop /ticksep exch def
+
+ % if base is reasonable and minv is positive, logarithmic ticks
+ base 1 gt minv 0 gt and
+ {
+ % get integral log of minv and maxv
+ /logminv base minv plog floor cvi def
+ /logmaxv base maxv plog ceiling cvi def
+
+ % if minv close to base, make it 1; reset minv and maxv
+ logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if
+ /minv base logminv exp def
+ /maxv base logmaxv exp def
+
+ % ticks := [ base**logminv, ... , base**logmaxv ]
+ [ logminv 1 logmaxv
+ { dup base exch exp
+ exch base exch loglgen
+ } for
+ ]
+ }
+ { % non-logarithmic ticks
+ {
+ % fix tick separation if undefined (0) or too small
+ /base 0 def
+ /delta maxv minv sub def
+ ticksep delta 30 div le
+ { /ticksep 10 delta log 1 sub ceiling exp def
+ ticksep delta 2 div ge
+ { /ticksep ticksep 2 div def }
+ { ticksep delta 5 div lt
+ { /ticksep 2 ticksep mul def
+ } if
+ } ifelse
+ } if
+
+ % adjust minv and maxv to be multiples of ticksep
+ /minv minv ticksep div floor ticksep mul def
+ /maxv maxv ticksep div ceiling ticksep mul def
+ /delta maxv minv sub def
+
+ % if minv or maxv near zero, move to zero and redo
+ minv ticksep eq
+ { /minv 0 def }
+ { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse
+ } ifelse
+ } loop
+
+ % if minv, maxv, and ticksep are all integral, set "makeint" to true
+ /makeint minv integral maxv integral ticksep integral and and def
+
+ % ticks := [ minv, minv+ticksep, ... , maxv ]
+ [ 0 1 delta ticksep div round
+ { ticksep mul minv add makeint { cvi } if lgen }
+ for
+ ]
+ } ifelse
+ }
+ { exch pop
+ } ifelse
+ minv maxv base
+} def
+
+% xset: set up all data for x axis, including limits and ticks
+% xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset -
+/xset
+{ /xticklength exch def
+ /xaxis exch def
+ /xdecr exch def
+ /xextra exch def
+ xaxis exch ticksandlimits
+ /xlog exch def /xmax exch def /xmin exch def /xticks exch def
+ /xleft xdecr { xmax } { xmin } ifelse def
+ /xright xdecr { xmin } { xmax } ifelse def
+ /xwidth xsize xextra 2 mul sub def
+ /trxmin xmin xtr def /trxmax xmax xtr def
+} def
+
+% yset: set up all data for y axis, including limits and yticks
+% yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset -
+/yset
+{ /yticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /yticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% rset: set up all data for y axis (again), but including limits and rticks
+% rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset -
+/rset
+{ /rticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /rticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% norset: set up data for no rticks
+% - norset -
+/norset
+{ /rticklength 0 def
+ /rticks [] def
+} def
+
+% framestyle: print a frame around the graph
+/framestyle
+{ 0 0 moveto xsize 0 lineto xsize ysize lineto
+ 0 ysize lineto closepath stroke
+ /printxtick /printxlabel xticks xleft printticks
+ /printytick /printylabel yticks ymin printticks
+ /printrtick /printrlabel rticks ymin printticks
+} def
+
+% nonestyle: print nothing around the graph
+/nonestyle
+{
+} def
+
+% axesstyle: print axes for the graph (unless axis values missing)
+/axesstyle
+{
+ xaxis false eq yaxis false eq or
+ { framestyle }
+ { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto
+ dup 0 moveto ysize lineto stroke
+ /printxaxistick /printxaxislabel xticks xleft printticks
+ /printyaxistick /printyaxislabel yticks ymin printticks
+ } ifelse
+} def
+
+% rundata: run all data sets
+/rundata
+{ alldata
+ { gsave
+ dup dup dup dup
+ 4 get /dopaint exch def
+ 3 get /initrun exch def
+ 2 get /pairs exch def
+ 1 get /points exch def
+ 0 get /data exch def
+ dopaint
+ { data length 4 ge
+ { initrun
+ newpath
+ data 0 get ymin trpoint yextra sub moveto
+ 0 2 data length 2 sub
+ { dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ xcurr ycurr trpoint lineto
+ } for
+ data dup length 2 sub get ymin trpoint yextra sub lineto
+ closepath fill
+ } if
+ } if
+ initrun
+ data length 2 ge
+ {
+ /xcurr data 0 get def
+ /ycurr data 1 get def
+ points
+ data length 4 ge
+ { 2 2 data length 2 sub
+ { /xprev xcurr def
+ /yprev ycurr def
+ dup dup 2 eq /firstpair exch def
+ data length 2 sub eq /lastpair exch def
+ dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ pairs
+ points
+ } for
+ } if
+ } if
+ grestore
+ } forall
+} 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 Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Helvetica-Oblique
+/Helvetica-Obliquefnt36 vec2 /Helvetica-Oblique LoutRecode
+/fnt36 { /Helvetica-Obliquefnt36 LoutFont } def
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Helvetica-Oblique
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 9002(1)s 600 fnt35 691 11623(A)m
+1250(Pr)s 6(actical)k 3667(Introduction)s 6922(to)s 7566(the)s
+3956 10183(Lout)m 616 8743(Document)m 3500(F)s 18(or)k -15(matting)k
+6490(System)s 400 fnt35 2882 6881(Jeffre)m 8(y)k 4180(H.)s
+4656(Kingston)s 400 fnt36 1395 5779(Basser)m 2794(Dept.)s 3834(of)s
+4333(Computer)s 6242(Science)s 2251 5299(The)m 3058(Univ)s 10(ersity)k
+4951(of)s 5450(Sydne)s 8(y)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8990(2)s 400 fnt84 2988 11377(A)m
+3363(simple)s 4565(input)s 5575(\207le)s 360 fnt35 800 9646(@SysInclude { doc })m
+800 9166(@Doc @T)m 43(e)k 10(xt @Begin)k 800 8686(Hello)m 14(, w)k 3(or)k -5(ld)k
+800 8206(@End @T)m 43(e)k 10(xt)k 400 fnt84 0 6379(Ho)m 4(w)k
+889(to)s 1313(f)s 10(ormat)k 2579(it)s 360 fnt35
+800 5633(lout \207lename > out.ps)m 800 5153(ghostvie)m 7(w out.ps)k 800 4673(mpr out.ps)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8997(3)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Hello,)m 2505(w)s 4(orld)k
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8990(4)s 400 fnt84 2339 11377(Headings)m
+4026(and)s 4762(paragraphs)s 360 fnt35 800 9646(@SysInclude { doc })m 800 9166(@Doc @T)m 43(e)k 10(xt @Begin)k
+800 8686(@Heading { Introduction })m 800 8206(@PP)m 800 7726(The design of the Lout f)m 10(or)k -9(matting)k
+800 7246(system w)m 5(as under)k -14(tak)k 7(en with the)k 800 6766(needs of the @I { ordinar)m -10(y user })k
+800 6286(v)m 9(er)k -10(y m)k 3(uch in mind.)k 800 5806(@End @T)m 43(e)k 10(xt)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save 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
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8995(5)s gsave
+0 666 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(Intr)m 7(oduction)k
+400 fnt82 2240 7742(The)m 2953(design)s 4090(of)s 4543(the)s
+5123(Lout)s 1440 7262(formatting)m 3215(system)s 4423(w)s 4(as)k
+5123(undertak)s 4(en)k 1440 6782(with)m 2245(the)s 2825(needs)s
+3818(of)s 4271(the)s 400 fnt83 4851 6784(or)m 14(dinary)k
+6328(user)s 400 fnt82 1440 6302(v)m 6(ery)k 2234(much)s
+3217(in)s 3622(mind.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8991(6)s 400 fnt84 3817 11376(Displays)m
+360 fnt35 800 9652(Y)m 50(ou cer)k -14(tainly don't w)k 5(ant to retur)k -9(n to)k
+800 9172(his of\207ce and repor)m -14(t:)k 800 8692(@IndentedDispla)m 10(y @I {)k 800 8212(`I can't \207nd an ef\207cient algor)m -5(ithm, I)k
+800 7732(guess I'm just too dumb)m 14(.)k 36(')k 800 7252(})m 800 6772(T)m 43(o a)k 7(v)k 9(oid ser)k -5(ious damage to y)k 7(our)k
+800 6292(position in the compan)m 5(y)k 36(, it w)k 3(ould)k 800 5812(be better if ...)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8994(7)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Y)m 44(ou)k
+2173(certainly)s 3657(don')s 7(t)k 4591(w)s 4(ant)k
+5460(to)s 5856(return)s 6901(to)s 1440 7887(his)m 1990(of\207ce)s
+2991(and)s 3665(report:)s 400 fnt83 2240 7048(`I)m 2626(can')s 12(t)k
+3542(\207nd)s 4252(an)s 4742(ef\207cient)s 2240 6568(algorithm,)m 3970(I)s
+4223(guess)s 5201(I'm)s 5848(just)s 6532(too)s 2240 6088(dumb)m 16(.)k 56(')k
+400 fnt82 1440 5330(T)m 32(o)k 1940(a)s 8(v)k 8(oid)k
+2909(serious)s 4124(damage)s 5458(to)s 5857(your)s 1440 4850(position)m
+2822(in)s 3227(the)s 3807(compan)s 6(y)k 26(,)k
+5418(it)s 5740(w)s 4(ould)k 6831(be)s 1440 4370(better)m
+2449(if)s 2813(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8994(8)s 400 fnt84 2299 11376(P)m 4(aragraph)k
+4229(br)s 7(eaking)k 5847(styles)s 360 fnt35 800 9652(Y)m 50(ou cer)k -14(tainly don't w)k 5(ant to retur)k -9(n to)k
+800 9172(his of\207ce and repor)m -14(t:)k 800 8692(@ID { r)m 3(agged noh)k 10(yphen } @Break @I {)k
+800 8212(`I can't \207nd an ef\207cient algor)m -5(ithm, I)k 800 7732(guess I'm just too dumb)m 14(.)k 36(')k
+800 7252(})m 800 6772(T)m 43(o a)k 7(v)k 9(oid ser)k -5(ious damage to y)k 7(our)k
+800 6292(position in the compan)m 5(y)k 36(, it w)k 3(ould)k 800 5812(be better if ...)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8992(9)s gsave
+0 666 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Y)m 44(ou)k
+2173(certainly)s 3657(don')s 7(t)k 4591(w)s 4(ant)k
+5460(to)s 5856(return)s 6901(to)s 1440 7887(his)m 1990(of\207ce)s
+2991(and)s 3665(report:)s 400 fnt83 2240 7048(`I)m 2626(can')s 12(t)k
+3542(\207nd)s 4252(an)s 4742(ef\207cient)s 2240 6568(algorithm,)m 3970(I)s
+4223(guess)s 5201(I'm)s 5848(just)s 6532(too)s 2240 6088(dumb)m 16(.)k 56(')k
+400 fnt82 1440 5330(T)m 32(o)k 1940(a)s 8(v)k 8(oid)k
+2909(serious)s 4124(damage)s 5458(to)s 5857(your)s 1440 4850(position)m
+2822(in)s 3227(the)s 3807(compan)s 6(y)k 26(,)k
+5418(it)s 5740(w)s 4(ould)k 6831(be)s 1440 4370(better)m
+2449(if)s 2813(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(10)s 400 fnt84 4128 11376(Lists)m
+360 fnt35 800 9722(@Heading { Oper)m 3(ating Instr)k -5(uctions })k 800 9242(@NumberedList)m
+800 8762(@ListItem { Press small g)m 3(reen le)k 10(v)k 9(er)k 18(.)k 21( })k
+800 8282(@ListItem { )m 14(W)k 14(ait appro)k 10(ximately 10 seconds)k 800 7802(until red light \210ashes)m 5(.)k 21( })k
+800 7322(@ListItem { If smok)m 7(e emerges from rear of unit,)k 800 6842(call Ser)m -10(vice Depar)k -14(tment.)k 21( })k
+800 6362(@EndList)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(11)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(Operating)m
+3287(Instructions)s 400 fnt82 1440 7529(1.)m 2240(Press)s 3166(small)s
+4123(green)s 5104(le)s 10(v)k 6(er)k 22(.)k
+1440 6689(2.)m 2240(W)s 32(ait)k 3077(approximately)s 5468(10)s
+5952(seconds)s 2240 6209(until)m 3065(red)s 3672(light)s 4505(\210ashes.)s
+1440 5369(3.)m 2240(If)s 2626(smok)s 4(e)k 3757(emer)s 7(ges)k
+5164(from)s 6040(rear)s 6760(of)s 2240 4889(unit,)m 3040(call)s
+3708(Service)s 4997(Department.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(12)s 400 fnt84 3062 11377(T)m 36(echnical)k
+4780(r)s 7(eports)k 360 fnt35 800 9646(@SysInclude { repor)m -14(t })k
+800 9166(@Repor)m -14(t)k 800 8686( @Title { ...)m 21( })k 800 8206( @A)m 10(uthor { ...)k 21( })k
+800 7726( @Institution { ...)m 21( })k 800 7246( @DateLine { ...)m 21( })k 800 6766(//)m
+800 6286(@Abstr)m 3(act { ...)k 21( })k 800 5806(@Section { ...)m 21( })k
+800 5326(@Section { ...)m 21( })k 800 4846(@Section { ...)m 21( })k 800 4366(@Appendix { ...)m 21( })k
+800 3886(@Appendix { ...)m 21( })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(13)s 400 fnt84 3840 11376(Sections)m
+360 fnt35 800 9720(@Section)m 800 9240( @T)m 43(ag { dfs })k 800 8760( @Title { Depth-\207rst search })m
+800 8280(@Begin)m 800 7800(@PP)m 800 7320(W)m 10(e tur)k -9(n no)k 5(w to our \207rst algor)k -5(ithm)k
+800 6840(on gener)m 3(al g)k 3(r)k 3(aphs ...)k 800 6360(@End @Section)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(14)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(10.6.)m
+2424(Depth-\207rst)s 4386(sear)s 7(ch)k 400 fnt82 2240 7742(W)m 32(e)k
+2854(turn)s 3592(no)s 10(w)k 4359(to)s 4758(our)s
+5391(\207rst)s 1440 7262(algorithm)m 3093(on)s 3587(general)s 4854(graphs)s
+6003(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(15)s 400 fnt84 3142 11375(Cr)m 7(oss)k
+4199(r)s 7(efer)k 7(ences)k 360 fnt35 800 9722(F)m 10(or fur)k -14(ther inf)k 10(or)k -9(mation, consult)k
+800 9242(Section @NumberOf dfs on page)m 800 8762(@P)m 14(ageOf { dfs }.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(16)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(F)m 6(or)k
+2089(further)s 3276(information,)s 5341(consult)s 1440 7887(Section)m 2732(10.6)s
+3520(on)s 4014(page)s 4860(245.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(17)s 400 fnt84 3612 11377(Refer)m 7(ences)k
+360 fnt35 800 9723(@Database @Ref)m 10(erence { m)k 5(yrefs })k 800 9243(...)m
+800 8763(F)m 10(or the details)k 5(, consult the User')k 18(s)k 800 8283(Guide @Cite { $kingston1995lout.user }.)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save 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
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(18)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(F)m 6(or)k
+2089(the)s 2669(details,)s 3889(consult)s 5143(the)s 5723(User')s 22(s)k
+1440 7887(Guide)m 2508([1].)s 1440 7263(\202)m 400 fnt84 1440 6637(Refer)m 7(ences)k
+400 fnt82 1440 5879(1.)m 2240(Jef)s 10(fre)k 6(y)k
+3422(H.)s 3883(Kingston.)s 400 fnt83 5621 5881(A)m 5947(User')s 16(s)k
+2240 5401(Guide)m 3304(to)s 3703(the)s 4279(Lout)s 5119(Document)s
+2240 4921(F)m 42(ormatting)k 4107(System)s 5308(\(V)s 44(er)k 4(sion)k
+2240 4441(3\))m 400 fnt82 2556 4439(.)m 2829(Basser)s 3992(Department)s
+5977(of)s 2240 3959(Computer)m 3938(Science)s 5171(,)s 5349(Uni)s 10(v)k 6(ersity)k
+2240 3479(of)m 2693(Sydne)s 6(y)k 3876(,)s 4054(1995)s
+4830(.)s 1440 2642(2.)m 2240(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(19)s 400 fnt84 2601 11375(Database)m
+4269(\207le)s 4872(myr)s 7(efs.ld)k 360 fnt35 800 9644({ @Ref)m 10(erence)k
+800 9164( @T)m 43(ag { kingston1995lout.user })k 800 8684( @T)m 43(ype { Book })k 800 8204( @A)m 10(uthor { Jeffre)k 7(y H.)k 21( Kingston })k
+800 7724( @Title { A User')m 18(s Guide to the Lout)k 800 7244(Document F)m 10(or)k -9(matting System \(V)k 28(ersion 3\) })k
+800 6764( @Institution { Basser Depar)m -14(tment of)k 800 6284(Computer Science })m 800 5804( @Address { Univ)m 9(ersity of Sydne)k 7(y)k
+800 5324(2006, A)m 10(ustr)k 3(alia })k 800 4844( @Y)m 50(ear { 1994 })k
+800 4364(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(20)s 400 fnt84 2965 11375(Books)m
+4097(\(and)s 4966(theses\))s 400 fnt82 0 9650(\213)m 800(T)s 14(itle)k
+1632(page,)s 2564(pref)s 4(ace,)k 3912(introduction)s 0 8810(\213)m
+800(Automatic)s 2574(table)s 3442(of)s 3895(contents)s 0 8053(\213)m
+800(Pref)s 4(atory)k 2372(pages)s 3365(numbered)s 5060(in)s
+5465(Roman)s 6713(numerals)s 0 7213(\213)m 800(Chapters,)s 2397(sections,)s
+3861(subsections,)s 5880(appendices)s 0 6374(\213)m 800(References)s 2656(at)s
+3044(end)s 3718(of)s 4171(chapters)s 5585(or)s 6018(book)s
+0 5535(\213)m 800(Running)s 2265(page)s 3111(headers)s 0 4695(\213)m
+800(Odd-e)s 10(v)k 6(en)k 2453(page)s 3299(formats)s
+0 3855(\213)m 800(Sorted)s 1940(inde)s 6(x)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(21)s 400 fnt84 2631 11377(Making)m
+4057(a)s 4353(sorted)s 5509(index)s 360 fnt35 800 9646(@PP)m
+800 9166(There are se)m 10(v)k 9(er)k 3(al possib)k 7(le w)k 5(a)k 10(ys to implement the)k
+800 8686(@I P)m 14(ar)k -14(tition procedure)k 5(,)k 800 8206(par)m -14(tition @Inde)k 10(x { @I P)k 14(ar)k -14(tition \(in {@I Quic)k 7(ksor)k -14(t}\) })k
+800 7726(b)m 7(ut the f)k 10(ollo)k 5(wing seems to be the best.)k 21( Star)k -14(ting ...)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save 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
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(22)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8462 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8370(Index)m
+400 fnt82 1440 7795(\202)m 1440 7315(partial)m 2552(order)s 16(,)k
+3557(227)s 400 fnt83 1440 6837(P)m 32(artition)k 400 fnt82
+2941 6835(\(in)m 400 fnt83 3479 6837(Quic)m 8(ksort)k 400 fnt82
+5052 6835(\),)m 5363(189)s 1440 6355(postorder)m 3049(tra)s 8(v)k 6(ersal)k
+1840 5875(of)m 2293(binary)s 3404(tree,)s 4180(19)s 1840 5395(topological)m
+3730(ordering,)s 5262(229)s 1440 4915(\202)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(23)s 400 fnt84 2785 11376(Equation)m
+4455(f)s 10(ormatting)k 360 fnt35 800 9645(@SysInclude { eq })m 800 9165(...)m
+800 8685(Since @Eq { )m 18(T\(n-i\) = )k 18(T\(0\) = 0 } w)k 3(e ha)k 7(v)k 9(e)k
+800 8205(@IndentedDispla)m 10(y @Eq {)k 800 7725(T\(n\) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1)m 800 7245(})m 800 6765(f)m 10(or the n)k 3(umber of disk mo)k 5(v)k 9(es made b)k 7(y the )k 18(T)k 43(o)k 5(w)k 3(ers)k
+800 6285(of Hanoi algor)m -5(ithm, giv)k 9(en @Eq { n } disks)k 5(.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(24)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Since)m 400 fnt83
+2419 8369(T)m 400 fnt78 2691 8357(\()m 400 fnt83 2831 8369(n)m
+400 fnt78 3141 8357(-)m 400 fnt83 3475 8369(i)m 400 fnt78
+3601 8357(\))m 3852(=)s 400 fnt83 4207 8369(T)m 400 fnt78
+4479 8357(\()m 4619(0)s 4828(\))s 5079(=)s 5434(0)s
+400 fnt82 5723 8367(we)m 6280(ha)s 8(v)k 6(e)k
+400 fnt83 2240 7204(T)m 400 fnt78 2512 7192(\()m 400 fnt83
+2652 7204(n)m 400 fnt78 2862 7192(\))m 3113(=)s 280 fnt83
+3468 7622(n)m 280 fnt78 3640 7613(-)m 3829(1)s 520 fnt78
+3522 7162(\345)m 280 fnt83 3483 6864(i)m 280 fnt78 3599 6855(=)m
+3791(0)s 280 fnt83 4149 7367(i)m 400 fnt78 3959 7192(2)m
+4363(=)s 280 fnt83 4908 7400(n)m 400 fnt78 4718 7192(2)m
+5161(-)s 5495(1)s 400 fnt82 1440 6098(for)m 2006(the)s
+2586(number)s 3907(of)s 4360(disk)s 5128(mo)s 6(v)k 6(es)k
+6243(made)s 1440 5618(by)m 1930(the)s 2510(T)s 32(o)k 10(wers)k
+3749(of)s 4202(Hanoi)s 5268(algorithm,)s 1440 5138(gi)m 10(v)k 6(en)k
+400 fnt83 2406 5140(n)m 400 fnt82 2696 5138(disks.)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(25)s 400 fnt84 3035 11375(Another)m
+4550(equation)s 360 fnt35 800 9644(@CenteredDispla)m 10(y @Eq {)k 800 9164(big int supp 1 on 0 )m 21(`)k
+800 8684(dx o)m 5(v)k 9(er sqr)k -14(t { 1 - x sup 2 })k 800 8204(= pi o)m 5(v)k 9(er 2)k
+800 7724(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(26)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+676 fnt78 3159 7423(\362)m
+280 fnt78 3355 7972(1)m 3355 7281(0)m 400 fnt83 3991 7782(dx)m
+1187 0 0 0 400 480 20 3587 7697 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+gsave
+0 7292 translate
+1.0000 1.2231 scale
+400 fnt78 3587 -100(\326)m
+grestore
+981 0 0 0 400 480 20 3793 7617 LoutGr2
+0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke
+grestore
+
+grestore
+400 fnt78 3853 7251(1)m 4129(-)s
+280 fnt78 4641 7365(2)m 400 fnt83 4463 7263(x)m 400 fnt78
+4914 7597(=)m 5269 7784(p)m gsave
+5269 7697 translate
+400 fnt83 212 0 0 0 400 480 20 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+5280 7317(2)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(27)s 400 fnt84 3991 11383(T)m 36(ables)k
+360 fnt35 800 9729(@SysInclude { tab })m 800 9249(...)m 800 8769(@T)m 43(ab)k
+800 8289( @Fmta { @Col @I A ! @Col B })m 800 7809({)m 800 7329(@Ro)m 5(w)k 5(a)k
+800 6849( A { F)m 10(or)k -14(tr)k 3(an })k 800 6369( B { )m 18(The \207rst ...)k 21( language })k
+800 5889(@Ro)m 5(w)k 5(a)k 800 5409( A { Algol-60 })m 800 4929( B { Said to be ...)m 21( successors })k
+800 4449(@Ro)m 5(w)k 5(a)k 800 3969( A { P)m 14(ascal })k
+800 3489( B { )m 18(The f)k 10(amous ...)k 21( successors })k 800 3009(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(28)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt83 1440 8177(F)m 42(ortr)k 6(an)k
+400 fnt82 3178 8175(The)m 3891(\207rst)s 4612(high-le)s 10(v)k 6(el)k
+3178 7695(programming)m 5442(language)s 400 fnt83 1440 6950(Algol-60)m 400 fnt82
+3178 6948(Said)m 3985(to)s 4384(be)s 4853(a)s 5130(better)s
+3178 6468(language)m 4712(than)s 5494(most)s 6371(of)s 6824(its)s
+3178 5988(successors)m 400 fnt83 1440 5327(P)m 32(ascal)k 400 fnt82
+3178 5325(The)m 3891(most)s 4768(f)s 4(amous)k 6024(of)s
+3178 4845(Algol-60')m 22(s)k 4971(successors)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(29)s 400 fnt84 3357 11375(Another)m
+4872(table)s 360 fnt35 800 10201(@T)m 43(ab)k 800 9721( hmargin { 0.4c })m
+800 9241( vmargin { 0.3v })m 800 8761( side { single })m 800 8281( @Fmta { @Col @B @CC X @Ov)m 9(er A,B)k 7(,C })k
+800 7801( @Fmtb { @Col @I A ! @Col B !! @Col C })m 800 7321({)m 800 6361(@Ro)m 5(w)k 5(a abo)k 5(v)k 9(e { single })k
+800 5881( X { )m 18(V)k 25(alue of mathematical ...)k 21( dollars\) })k 800 4921(@Ro)m 5(wb abo)k 5(v)k 9(e { doub)k 7(le })k
+800 4441( A { Quadr)m 3(atic f)k 10(or)k -9(m)k 3(ula })k
+800 3961( B { @Eq { x ^= { ...)m 21( } o)k 5(v)k 9(er 2a } })k 800 3481( C { 3^.5 })m
+800 2521(@Ro)m 5(wb belo)k 5(w { single })k 800 2041( A { Binomial theorem })m 800 1561( B { @Eq { \( a + b \) sup n ^= ...)m 21( b sup n-k } })k
+800 1081( C { 12^ })m 800 601(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save 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
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(30)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+1440 8640 translate
+0.5938 0.5938 scale
+0 144 0 144 400 480 100 0 -144 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+226 0 0 0 400 480 100 0 0 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 344 0 159 400 480 100 0 -488 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 0 400 480 100 0 -632 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+8889 0 0 0 400 480 100 226 0 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt84 226 -421(V)m 36(alue)k
+1281(of)s 1736(mathematical)s 4157(f)s 10(ormulae)k 5793(\(millions)s
+7369(of)s 7824(dollars\))s gsave
+9115 0 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhsp
+grestore
+
+grestore
+gsave
+9341 -144 translate
+400 fnt82 360 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+9341 -488 translate
+400 fnt82 360 344 0 159 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+9341 -632 translate
+400 fnt82 360 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -776 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+0 -1867 translate
+400 fnt82 0 1091 0 480 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -2011 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+226 -632 translate
+400 fnt82 2985 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+400 fnt83 226 -1475(Quadr)m 6(atic)k
+1955(formula)s gsave
+3211 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+3437 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+3663 -632 translate
+400 fnt82 4255 0 1260 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+4725(x)s 400 fnt78 5063 -1487(=)m 5418 -1207(-)m
+400 fnt83 5652 -1195(b)m 400 fnt78 5962 -1207(\261)m gsave
+0 -1146 translate
+1.0000 1.3937 scale
+6297 -100(\326)m
+
+grestore
+gsave
+6503 -776 translate
+400 fnt83 1415 0 0 0 400 480 20 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke
+grestore
+
+grestore
+280 fnt78 6753 -1028(2)m 400 fnt83 6563 -1195(b)m 400 fnt78
+7006 -1207(-)m 7340(4)s 400 fnt83 7548 -1195(ac)m 2500 0 0 0 400 480 20 5418 -1387 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+400 fnt78
+6467 -1767(2)m 400 fnt83 6677 -1755(a)m gsave
+7918 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+8144 -776 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+8144 -1867 translate
+400 fnt82 0 1091 0 480 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -2011 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8370 -632 translate
+400 fnt82 745 0 390 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+400 fnt82 8587 -1477(3)m
+8760(.5)s 226 0 0 0 400 480 100 9115 -632 LoutGr2
+0.5 pt ltabhd
+grestore
+
+grestore
+360 144 0 144 400 480 100 9341 -776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 1091 0 480 400 480 100 9341 -1867 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 144 0 0 400 480 100 9341 -2011 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 144 400 480 100 0 -2155 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 863 0 449 400 480 100 0 -3018 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 0 400 480 100 0 -3162 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+226 0 0 0 400 480 100 0 -3162 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+400 fnt83 226 -2657(Binomial)m 1791(theor)s 14(em)k
+gsave
+226 -3162 translate
+400 fnt82 2985 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+3211 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+3437 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt78 3663 -2669(\()m 400 fnt83 3803 -2657(a)m 400 fnt78
+4114 -2669(+)m 400 fnt83 4449 -2657(b)m 280 fnt83 4770 -2463(n)m
+400 fnt78 4659 -2669(\))m 5063(=)s 336 fnt78 5549 -2290(\245)m
+520 fnt78 5484 -2699(\345)m 280 fnt83 5418 -3005(k)m 280 fnt78
+5588 -3014(=)m 5780(0)s gsave
+0 -2560 translate
+1.0000 2.3652 scale
+400 fnt78 5932 -100(\()m
+grestore
+400 fnt83
+6112 -2417(n)m 6115 -2893(k)m gsave
+0 -2560 translate
+1.0000 2.3652 scale
+400 fnt78 6362 -100(\))m
+grestore
+280 fnt83
+6684 -2501(k)m 400 fnt83 6493 -2657(a)m 280 fnt83 7022 -2488(n)m
+280 fnt78 7194 -2497(-)m 280 fnt83 7383 -2488(k)m 400 fnt83
+6832 -2657(b)m gsave
+3663 -3162 translate
+400 fnt82 4255 0 1260 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+7918 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+8144 -2155 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3018 translate
+400 fnt82 0 863 0 449 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3162 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt82 8370 -2659(12)m 745 0 390 0 400 480 100 8370 -3162 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+226 0 0 0 400 480 100 9115 -3162 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+360 144 0 144 400 480 100 9341 -2155 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 863 0 449 400 480 100 9341 -3018 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 144 0 0 400 480 100 9341 -3162 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(31)s 400 fnt84 3123 11382(P)m 4(ascal)k
+4297(pr)s 7(ograms)k 360 fnt35 800 9651(@SysInclude { pas })m 800 9171(...)m
+800 8691(@ID @P)m 14(as {)k 800 8211(procedure DoPr)m -5(iAbstr)k 3(act\(root:)k 18( Pr)k -5(iEntr)k -10(y\);)k
+800 7731(begin)m 800 7251( if root^.leftchild <> nil then begin)m 800 6771( DoPr)m -5(iAbstr)k 3(act\(root^.leftchild\);)k
+800 6291( wr)m -5(ite\(', '\);)k 800 5811( end;)m 800 5331( Pr)m -5(iK)k 14(e)k 7(yAbstr)k 3(act\(root^.k)k 7(e)k 7(y\);)k
+800 4851( wr)m -5(ite\(':'\);)k 800 4371( Pr)m -5(iV)k 25(alueAbstr)k 3(act\(root^.v)k 9(alue\);)k
+800 3891( if root^.r)m -5(ightchild <> nil then begin)k 800 3411( wr)m -5(ite\(', '\);)k 800 2931( DoPr)m -5(iAbstr)k 3(act\(root^.r)k -5(ightchild\);)k
+800 2451( end;)m 800 1971(end;)m 800 1491(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save 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
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(32)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8455 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8363(pr)m 7(ocedur)k 7(e)k
+400 fnt83 3270 8367(DoPriAbstr)m 6(act)k 400 fnt82 5622 8365(\()m
+400 fnt83 5744 8367(r)m 18(oot)k 400 fnt82 6399 8365(:)m
+400 fnt83 6576 8367(PriEntry)m 400 fnt82 7966 8365(\);)m 400 fnt84
+1440 7883(begin)m 1840 7403(if)m 400 fnt83 2206 7407(r)m 18(oot)k
+320 fnt78 2861 7415(\255)m 400 fnt82 3043 7405(.)m 400 fnt83
+3116 7407(leftc)m 6(hild)k 400 fnt78 4529 7395(\271)m 400 fnt84
+4845 7403(nil)m 5380(then)s 6228(begin)s 400 fnt83 2240 6927(DoPriAbstr)m 6(act)k
+400 fnt82 4592 6925(\()m 400 fnt83 4714 6927(r)m 18(oot)k
+320 fnt78 5369 6935(\255)m 400 fnt82 5551 6925(.)m 400 fnt83
+5624 6927(leftc)m 6(hild)k 400 fnt82 6937 6925(\);)m 400 fnt83
+2240 6447(write)m 400 fnt82 3048 6445(\(',)m 3492('\);)s 400 fnt84
+1840 5963(end)m 400 fnt82 2453 5965(;)m 400 fnt83 1840 5487(PriK)m 14(e)k 12(yAbstr)k 6(act)k
+400 fnt82 4298 5485(\()m 400 fnt83 4420 5487(r)m 18(oot)k
+320 fnt78 5075 5495(\255)m 400 fnt82 5257 5485(.)m 400 fnt83
+5330 5487(k)m 4(e)k 12(y)k 400 fnt82 5838 5485(\);)m
+400 fnt83 1840 5007(write)m 400 fnt82 2648 5005(\(':'\);)m 400 fnt83
+1840 4527(PriV)m 44(alueAbstr)k 6(act)k 400 fnt82 4592 4525(\()m
+400 fnt83 4714 4527(r)m 18(oot)k 320 fnt78 5369 4535(\255)m
+400 fnt82 5551 4525(.)m 400 fnt83 5624 4527(value)m 400 fnt82
+6477 4525(\);)m 400 fnt84 1840 4043(if)m 400 fnt83 2206 4047(r)m 18(oot)k
+320 fnt78 2861 4055(\255)m 400 fnt82 3043 4045(.)m 400 fnt83
+3116 4047(rightc)m 6(hild)k 400 fnt78 4796 4035(\271)m 400 fnt84
+5112 4043(nil)m 5647(then)s 6495(begin)s 400 fnt83 2240 3567(write)m
+400 fnt82 3048 3565(\(',)m 3492('\);)s 400 fnt83 2240 3087(DoPriAbstr)m 6(act)k
+400 fnt82 4592 3085(\()m 400 fnt83 4714 3087(r)m 18(oot)k
+320 fnt78 5369 3095(\255)m 400 fnt82 5551 3085(.)m 400 fnt83
+5624 3087(rightc)m 6(hild)k 400 fnt82 7204 3085(\);)m 400 fnt84
+1840 2603(end)m 400 fnt82 2453 2605(;)m 400 fnt84 1440 2123(end)m
+400 fnt82 2053 2125(;)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(33)s 400 fnt84 3304 11376(Basic)m
+4308(graphics)s 360 fnt35 800 9645(45d @Rotate 1.5 @Scale @Bo)m 10(x {)k 800 9165( Hello)m 14(, w)k 3(or)k -5(ld)k
+800 8685(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(34)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+2528 5722 translate
+45.0000 rotate
+gsave
+0 0 translate
+1.5000 1.5000 scale
+gsave
+0 -254 translate
+360 fnt35 2027 526 108 254 360 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+108 161(Hello)m 14(,)k
+1080(w)s 3(or)k -5(ld)k
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(35)s 400 fnt84 2908 11375(Adv)m 4(anced)k
+4704(graphics)s 360 fnt35 800 9644(@SysInclude { \207g })m 800 9164(...)m 800 8684(@Fig {)m
+800 8204(@Bo)m 10(x)k 800 7724( margin { 0c })m 800 7244( paint { b)m 7(lac)k 7(k })k
+800 6764(@Ellipse)m 800 6284( linestyle { noline })m 800 5804( paint { white })m 800 5324({ Hello)m 14(, w)k 3(or)k -5(ld })k
+800 4844(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(36)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8231 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+5760 781 226 372 400 480 100 1440 7859 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2442 781 226 372 400 480 100 0 0 LoutGr2
+/lfigblack [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2442 781 226 372 400 480 100 0 0 LoutGr2
+/lfigwhite [ lfigellipse ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigellipse ] lfigdopath
+pop pop
+grestore
+226 282(Hello,)m 1291(w)s 4(orld)k
+
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(37)s 400 fnt84 3302 11376(P)m 8(oint)k
+4304(labelling)s 360 fnt35 800 9645(@Fig {)m 800 9165(A::)m 800 8685({)m
+800 8205( 1::)m 18( @Ellipse { 3c @Wide 2c @High })k 800 7725( //3c)m 800 7245( 2::)m 18( @Bo)k 10(x { 3c @Wide 2c @High })k
+800 6765(})m 800 6285(@Sho)m 5(wLabels)k 800 5805(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(38)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8414 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+5760 4873 0 4647 400 480 100 1440 3767 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2153 4873 0 4647 400 480 100 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 3287 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+
+grestore
+(1) lfigpromotelabels
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(2) lfigpromotelabels
+grestore
+(A) lfigpromotelabels
+grestore
+3507 4873 0 4647 400 480 100 2253 0 LoutGr2
+lfigshowlabels
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(39)s 400 fnt84 3895 11375(Graphs)m
+340 fnt35 800 9035(@Gr)m 3(aph)k 800 8555( abo)m 5(v)k 8(ecaption { Ne)k 6(w South )k 13(W)k 13(ales road deaths)k
+800 8075(\(per 100 million v)m 8(ehicle km\) })k 800 7595({)m 800 7115( @Data points { plus } pairs { dashed })m 800 6635( { 1963 5.6 1971 4.3 1976 3.7 1979 3.4)m
+800 6155( 1982 2.9 1985 2.3 1988 2.0 })m 800 5675(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 40 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(40)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1631 8367(Ne)m 10(w)k
+2463(South)s 3491(W)s 32(ales)k 4540(road)s 5347(deaths)s
+1717 7887(\(per)m 2460(100)s 3151(million)s 4400(v)s 6(ehicle)k
+5639(km\))s 5103 3402 0 3402 400 480 100 1440 4116 LoutGr2
+grestore
+
+gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def
+/alldata [ [ [ 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0 ] xandy
+{ plus }
+{ ilinesetup dashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+] ] def
+0 [ false ] 0 alldata false false 0
+0.5 cm false false 0.5 ft xset
+0 [ false ] 1 alldata false false 0
+0.5 cm false false 0.5 ft yset
+norset
+rundata framestyle
+grestore
+end
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 41 41
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(41)s 360 fnt35 800 10484(-2p @F)m 10(ont @Gr)k 3(aph)k
+800 10004( style { ax)m 10(es })k 800 9524( xor)m -5(igin { 0 } y)k 7(or)k -5(igin { 0 })k
+800 9044( xtic)m 7(ks { 10@ 50@ 100@ 200@ 500@ })k 800 8564( objects { @NE at { 300 2 } @I { Exponential })m 800 8084( @SE at { ...)m 21( } @I { Unif)k 10(or)k -9(m } })k
+800 7604( belo)m 5(wcaption { @I n })k 800 7124({)m 800 6644( @Data points { \207lledcircle } { ...)m 21( })k
+800 6164( @Data points { \207lledcircle } { ...)m 21( })k 800 5204( @Data pairs { dashed })m 800 4724( { 10 2 500 2 })m 800 3764( @Data pairs { dashed })m
+800 3284( {)m 800 2804( xloop from { 10 } to { 500 } b)m 7(y { 20 } do)k 800 2324( {)m 800 1844( x sqr)m -14(t { pi*x / 4 } + 1)k
+800 1364( })m 800 884( })m 800 404(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 42 42
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(42)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+1440 4671 translate
+360 fnt82 5670 3969 0 3969 360 480 90 LoutGraphic
+gsave
+grestore
+
+gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def
+/alldata [ [ [ 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 ] xandy
+{ filledcircle }
+{ }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 ] xandy
+{ filledcircle }
+{ }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 2 500 2 ] xandy
+{ }
+{ linesetup cdashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 20 500 { /xval exch def xval 3.14159 xval mul 4 div sqrt 1 add } for ] xandy
+{ }
+{ linesetup cdashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+] ] def
+0 [ 10 lgen 50 lgen 100 lgen 200 lgen 500 lgen ] 0 alldata false false 0
+0 false 0 0.5 ft xset
+0 [ false ] 1 alldata false false 0
+0 false 0 0.5 ft yset
+norset
+rundata axesstyle
+grestore
+1953 535 0 535 360 480 90 0 -535 LoutGr2
+300 2 trpoint translate 0 ysize translate gsave
+grestore
+360 fnt83 108 182(Exponential)m
+grestore
+grestore
+1428 533 0 533 360 480 90 0 -533 LoutGr2
+300 3.14159 300 4 div mul sqrt 1 add trpoint translate 0 0 translate gsave
+grestore
+360 fnt83 108 182(Uniform)m grestore
+grestore
+end
+
+grestore
+360 fnt83 4189 3901(n)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Helvetica-Oblique
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutGraphPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 42
+%%EOF
diff --git a/doc/user/README b/doc/user/README
new file mode 100644
index 0000000..fd69ccb
--- /dev/null
+++ b/doc/user/README
@@ -0,0 +1,37 @@
+Directory lout/doc/user
+
+This directory contains the Lout source files for the User's Guide
+to the Lout Document Formatting System. To produce the Guide,
+type the command
+
+ lout all > op
+
+in this directory. This must be done five times to completely
+resolve all cross references, although the PostScript file op is
+printable after the first run. Auxiliary files with .li and .ld
+suffixes will be created in this directory.
+
+The first run will produce a large number of error messages,
+nearly all beginning with "unresolved cross reference". These
+should gradually go away on later runs. The following shows the
+error message output on the fifth run for A4 size printing:
+
+lout file "cpp_tabs" (from "cpp" line 24, from "all" line 38):
+ 53,23: c2lout: C text ended inside a comment
+ 55,35: c2lout: C text ended inside a comment
+
+These two warnings point to two places where a C program text ended
+inside a comment, which in these cases was deliberate so is no problem.
+If you set the document in Letter size paper, you will also get a
+couple of other warning messages pointing to places where Lout had
+to slightly scale a display to fit the smaller page.
+
+Optimal page breaking has been turned off for this document owing to
+repeated failure to converge, caused by footnotes and floating figures
+close to large unbreakable displays.
+
+A copy of the final PostScript output file (A4 paper size) is
+stored at "ftp://ftp.cs.su.oz.au/jeff/lout/lout.3.17.user.ps.gz".
+
+Jeffrey H. Kingston
+17 September 1999
diff --git a/doc/user/all b/doc/user/all
new file mode 100644
index 0000000..1b131f6
--- /dev/null
+++ b/doc/user/all
@@ -0,0 +1,47 @@
+@SysInclude { tab }
+@SysInclude { tbl }
+@SysInclude { eq }
+@SysInclude { fig }
+@SysInclude { graph }
+@SysInclude { pas }
+@SysInclude { diag }
+@SysInclude { cprint }
+@SysInclude { book }
+# @Include { letterbook } # for testing Letter size formatting
+
+@SysDatabase @Reference { loutrefs }
+
+@Book
+ @Title { A User's Guide to the
+
+Lout
+
+Document Formatting System
+}
+ @Author { Jeffrey H. Kingston }
+ @Edition { Version 3.17
+September, 1999 }
+ @Publisher {
+Copyright @CopyRight 1991, 1999 Jeffrey H. Kingston,
+Basser Department of Computer Science,
+The University of Sydney 2006, Australia. ISBN 0 86758 951 5.
+}
+ @InitialLanguage { English }
+ # @OptimizePages { Yes }
+//
+
+@Include { preface }
+@Include { bas }
+@Include { str }
+@Include { typ }
+@Include { fmt }
+@Include { ref }
+@Include { tbl }
+@Include { equ }
+@Include { bgr }
+@Include { dia }
+@Include { gra }
+@Include { cpp }
+@Include { pascal }
+@Include { ap_qck }
+@Include { ap_byp }
diff --git a/doc/user/ap_byp b/doc/user/ap_byp
new file mode 100644
index 0000000..a1c1bd7
--- /dev/null
+++ b/doc/user/ap_byp
@@ -0,0 +1,98 @@
+@Appendix
+ @Title { Bypass Symbols }
+ @Tag { bypass }
+@Begin
+@PP
+The `bypass' symbols described in this appendix are intended to be
+used only in Lout which is generated by computer programs. Their
+purpose is to bypass the Lout cross reference database, and so reduce
+the number of passes needed to finalise a document. These symbols
+should not be used by people, because that would only lead back to the
+consistency problems that prompted the introduction of cross references
+in the first place.
+@PP
+To produce a bypass table of contents, set the @Code "@MakeContents"
+setup file option to @Code "Bypass" and use @Code "@BypassContentsEntry"
+symbols at the outermost level just before the introduction or first
+chapter:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col ! @Col B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@BypassContentsEntry" }
+@Rowa
+ A { " indent { 0f }" }
+ B { the indent, e.g. {@Code "0f"}, {@Code "2f"}, {@Code "4f"} ... }
+@Rowa
+ A { " number {}" }
+ B { the section (etc.) number e.g. {@Code "5.2"} }
+@Rowa
+ A { " title {}" }
+ B { the section (etc.) title e.g. @Code "Azaleas" }
+@Rowa
+ A { " pagenum {}" }
+ B { the page number e.g. @Code "@PageOf azaleas" }
+}
+For major entries such as chapters, use @Code "@BypassMajorContentsEntry"
+with the same options. This increases the vertical spacing and uses
+bold font. When @Code "@MakeContents" is {@Code "Bypass"}, no contents
+entries will be produced automatically.
+@PP
+To bypass Lout's automatic numbering of large-scale structure symbols,
+use the @Code "@BypassNumber" option:
+@ID @Code {
+"@Section"
+" @Title { Azaleas }"
+" @Tag { azaleas }"
+" @BypassNumber { 5.2 }"
+"..."
+}
+Give the full `path number' (5.2, B.3 or whatever) of the symbol. There is
+a @Code "@BypassNumber" option for every symbol that has a @Code "@Title"
+option and is usually assigned a number automatically by Lout, plus
+@Code "@Figure" and {@Code "@Table"}. No changes to the setup file are
+required in order to use {@Code "@BypassNumber"}, and it is permitted
+for some large-scale structure symbols to have this option and others not.
+@PP
+To produce a bypass reference list, set the @Code "@MakeReferences"
+setup file option to @Code "Bypass" and place reference entries at the
+end of the document, after the last chapter or other large-scale structure
+symbol but before any bypass index entries (see below), like this:
+@ID @Code {
+"@BypassReference"
+" label { [Kin94a] }"
+" value { @RefPrint kingston1995lout.expert }"
+}
+The two options are objects which become the label and value of the
+reference entry. The @Code "value" option can be any object, including
+an explicit reference; but @Code "@RefPrint" does not introduce any
+cross-referencing delay if the @Code "@Reference" symbols lie in a
+separate database file. No sorting or removal of duplicate entries
+will be done by Lout. When @Code "@MakeReferences" is {@Code "Bypass"},
+@Code "@Cite" and related symbols are ignored.
+@PP
+There is also @Code "@BypassChapReference" with the same options for
+producing bypass chapter reference lists; these symbols should be
+placed at the outer level immediately after the preface, introduction,
+chapter or appendix that they refer to.
+@PP
+To produce bypass indexes, set the @Code "@MakeIndex" setup file
+option to {@Code Bypass} and use the @Code "@BypassRawIndex" symbol
+repeatedly at the very end of the document, enclosed in
+@Code "@BypassBeginIndex" and @Code "@BypassEndIndex" symbols:
+@ID @Code {
+"@BypassBeginIndex"
+"@BypassRawIndex indent { 0f } { Azaleas, @PageOf azaleas }"
+"..."
+"@BypassEndIndex"
+}
+The @Code "indent" option gives the indent ({@Code "0f"}, @Code {"1f"},
+@Code {2f}, etc.), and the right parameter is as for @Code "@RawIndex". No
+@Code "@PageMark" operations, sorting, merging, or attachment of page
+numbers will be done by Lout. When @Code "@MakeIndex" is {@Code Bypass},
+@Code "@Index" and related symbols are ignored. At present, bypass
+index symbols work only in books, not with ordinary documents or
+technical reports. There are corresponding symbols for creating
+bypass indexes A and B.
+@End @Appendix
diff --git a/doc/user/ap_qck b/doc/user/ap_qck
new file mode 100644
index 0000000..92ea7ad
--- /dev/null
+++ b/doc/user/ap_qck
@@ -0,0 +1,369 @@
+@Appendix
+ @Title { Lout Quick Reference Guide }
+@Begin
+10p @Font 1.15fx @Break @OneCol
+@Tab @Fmta { @Col 20c @Wide A ! @Col 20c @Wide B }
+{
+@Rowa A {
+@Heading { 1. Running Lout }
+@LD @Code {
+"lout filename > postscript.ps"
+}
+
+@LP
+@Heading { 2. Ordinary documents (simple form) }
+@LD @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+
+@LP
+@Heading { 3. Ordinary documents (full form) }
+@LD @Code {
+"@SysInclude { doc }"
+"@Document"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { adjust 1.2fx hyphen }"
+" @InitialLanguage { English }"
+" @PageHeaders { Simple }"
+" @FirstPageNumber { 1 }"
+" @ColumnNumber { 1 }"
+" @PageOrientation { Portrait }"
+"//"
+"@Text @Begin"
+"..."
+"@BeginSections"
+"@Section ... @End @Section"
+"@EndSections"
+"@End @Text"
+}
+
+@LP
+@Heading { 4. Technical reports }
+@LD @Code {
+"@SysInclude { report }"
+"@Report"
+" @Title { ... }"
+" @Author { ... }"
+" @Institution { ... }"
+" @DateLine { No }"
+" @CoverSheet { Yes }"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { adjust 1.2fx hyphen }"
+" @InitialLanguage { English }"
+" @PageHeaders { Simple }"
+" @FirstPageNumber { 1 }"
+" @ColumnNumber { 1 }"
+"//"
+"@Abstract ... @End @Abstract"
+"@Section ... @End @Section"
+"@Appendix ... @End @Appendix"
+}
+}
+
+B {
+@Heading { 5. Large-scale structure symbols }
+@LL
+@LI @Code {
+"@Section"
+" @Title { ... }"
+" @RunningTitle { ... }"
+" @Tag { ... }"
+"@Begin"
+"@PP"
+"..."
+"@End @Section"
+}
+@LI lines @Break {
+@Code "@Section / @SubSection / @SubSubSection"
+@Code "@Appendix / @SubAppendix / @SubSubAppendix"
+@Code "@BeginSubSections" ... @Code "@EndSubSections" if inner.
+}
+@EndList
+
+@LP
+@Heading { 6. Cross references }
+@LD @Tab
+ @Fmta { @Col @Code A ! @Col ! @Col @Code B }
+{
+@Rowa
+ A { "@Tag { foo }" }
+ B { "@PageOf foo" }
+@Rowa
+ A { "@PageMark foo" }
+ B { "@NumberOf foo" }
+}
+
+@LP
+@Heading { 7. Font changes }
+@LL
+@LI @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@B { bold font }" }
+ B { "@I { italic font }" }
+@Rowa
+ A { "@BI { bold-italic font }" }
+ B { "@R { Roman font }" }
+@Rowa
+ A { "@S { small-caps font}" }
+ B { "@F { fixed-width font }" }
+@Rowa
+ B { "@II { italic bold or Roman }" }
+}
+@LI @Code {
+"{ family face size } @Font { ... }"
+}
+@LI @Code {
+"Times Helvetica Courier ..."
+"Base Slope Bold BoldSlope ..."
+"10p 12p +2p -2p 2.0f ..."
+}
+@EndList
+
+@LP
+@Heading { 8. Paragraph breaking styles }
+@LL
+@LI @Code {
+"{ breakstyle linesep hyphen } @Break { ... }"
+}
+@LI @Code {
+"adjust ragged lines clines ..."
+"1.2fx 2vx 0.9vx ..."
+"hyphen nohyphen"
+}
+@EndList
+
+@LP
+@Heading { 9. New paragraph and new page }
+@LD @Tab
+ @Fmta { @Col @Code A ! @Col B }
+ vmargin { 0.5vx }
+{
+@Rowa A { "@PP" } B { Plain paragraph }
+@Rowa A { "@LP" } B { Left paragraph }
+@Rowa A { "@LLP" } B { New line }
+@Rowa A { "@DP" } B { Display paragraph }
+@Rowa A { "@NP" } B { New page }
+@Rowa A { "@CNP" } B { Conditional new page }
+}
+}
+
+} # end first table
+@LP
+10p @Font 1.15fx @Break @OneCol
+@Tab @Fmta { @Col 20c @Wide A ! @Col 20c @Wide B }
+{
+@Rowa A {
+@Heading { 10. Displays and headings }
+@LL
+@LI @Code {
+"@CD @Heading { A centred heading }"
+"@ID { An indented display }"
+}
+@LI @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa A { "@D" } B { "@Display" }
+@Rowa A { "@LD" } B { "@LeftDisplay" }
+@Rowa A { "@ID" } B { "@IndentedDisplay" }
+@Rowa A { "@QD" } B { "@QuotedDisplay" }
+@Rowa A { "@CD" } B { "@CentredDisplay" }
+@Rowa B { "@CenteredDisplay" }
+@Rowa B { "@RightDisplay" }
+}
+@EndList
+
+@LP
+@Heading { 11. Lists}
+@LL
+@LI @Code {
+"@List"
+"@ListItem { A list item }"
+"@ListItem { Another list item }"
+"@EndList"
+}
+@LI @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@L" }
+ B { "@List" }
+@Rowa
+ A { "@LL" }
+ B { "@LeftList" }
+@Rowa
+ A { "@IL" }
+ B { "@IndentedList" }
+@Rowa
+ A { "@QL" }
+ B { "@QuotedList" }
+@Rowa
+ A { "@CL" }
+ B { "@CentredList" }
+@Rowa
+ B { "@CenteredList" }
+@Rowa
+ A { "@NL" }
+ B { "@NumberedList" }
+@Rowa
+ A { "@RL" }
+ B { "@RomanList" }
+@Rowa
+ A { "@UCRL" }
+ B { "@UCRomanList" }
+@Rowa
+ A { "@AL" }
+ B { "@AlphaList" }
+@Rowa
+ A { "@UCAL" }
+ B { "@UCAlphaList" }
+@Rowa
+ A { "@PNL" }
+ B { "@ParenNumberedList" }
+@Rowa
+ A { "@PRL" }
+ B { "@ParenRomanList" }
+@Rowa
+ A { "@PUCRL" }
+ B { "@ParenUCRomanList" }
+@Rowa
+ A { "@PAL" }
+ B { "@ParenAlphaList" }
+@Rowa
+ A { "@PUCAL" }
+ B { "@ParenUCAlphaList" }
+@Rowa
+ A { "@BL" }
+ B { "@BulletList" }
+@Rowa
+ A { "@SL" }
+ B { "@StarList" }
+@Rowa
+ A { "@DL" }
+ B { "@DashList" }
+}
+@LI @Code {
+"@TaggedList"
+"@TagItem { label } { A list item }"
+"@TagItem { label } { Another list item }"
+"@EndList"
+}
+@LI @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@TL" }
+ B { "@TaggedList" }
+@Rowa
+ A { "@WTL" }
+ B { "@WideTaggedList" }
+@Rowa
+ A { "@VWTL" }
+ B { "@VeryWideTaggedList" }
+}
+@EndList
+
+@LP
+@Heading { 12. Footnotes, endnotes, margin notes }
+@LD @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@FootNote { ... }" }
+ B { "@EndNote { ... }" }
+@Rowa
+ A { "@LeftNote { ... }" }
+ B { "@RightNote { ... }" }
+@Rowa
+ A { "@OuterNote { ... }" }
+ B { "@InnerNote { ... }" }
+}
+}
+
+B {
+@Heading { 13. Floating figures and tables }
+@LD @Tab
+ @Fmta { @Col @Code A ! @Col ! @Col ! @Col @Code B }
+{
+@Rowa
+ A {
+"@Figure"
+" @Caption { ... }"
+" @Tag { ... }"
+"@Begin"
+"..."
+"@End @Figure"
+}
+ B {
+"@Table"
+" @Caption { ... }"
+" @Tag { ... }"
+"@Begin"
+"..."
+"@End @Table"
+}
+}
+
+@LP
+@Heading { 14. Tables }
+@LD @Code {
+"@SysInclude { tbl }"
+"@SysInclude { doc }"
+"..."
+"@Tbl"
+" aformat { @Cell A | @Cell B }"
+" marginvertical { 0.5vx }"
+"{"
+"@Rowa"
+" A { ... }"
+" B { ... }"
+"@Rowa"
+" ..."
+"}"
+}
+
+@LP
+@Heading { 15. Equations }
+@LD @Code {
+"@SysInclude { eq }"
+"@SysInclude { doc }"
+"..."
+"@Eq { sum from i=0 to n { r sup i over sqrt pi } }"
+}
+
+@LP
+@Heading { 16. Basic graphics }
+@LD @Code {
+"grey @Colour { ... }"
+"gray @Color { ... }"
+"@Box { ... }"
+"@CurveBox { ... }"
+"@ShadowBox { ... }"
+"60d @Rotate { ... }"
+"0.71 @Scale { ... }"
+"@QuotedDisplay @Scale { ... }"
+"@IncludeGraphic filename.eps"
+}
+
+@LP
+@Heading { 17. Miscellaneous }
+@LD lines @Break {
+@Code "@Underline { will be underlined }"
+@Code "@Date"
+@Code "@Time"
+@Code "German @Language { ... }"
+@Code "\# comment to end of line"
+@Code "\"#&/@^{}|~\"" (enclose these characters in quotes)
+}
+}
+} # end second table
+@End @Appendix
diff --git a/doc/user/bas b/doc/user/bas
new file mode 100644
index 0000000..239d35a
--- /dev/null
+++ b/doc/user/bas
@@ -0,0 +1,31 @@
+@Chapter
+ @Title { The Basics }
+ @Tag { basics }
+@Begin
+@LP
+The Lout document formatting system has been designed with the needs of
+the ordinary user very much in mind. Although the features of Lout are
+virtually endless, and include mathematical equations, diagrams made from
+lines and shapes, bibliographic databases, and so on, the system is very
+simple to use.
+@BeginSections
+@Include { bas_star }
+@Include { bas_objs }
+@Include { bas_spac }
+@Include { bas_char }
+@Include { bas_empt }
+@Include { bas_font }
+@Include { bas_head }
+@Include { bas_par1 }
+@Include { bas_par2 }
+@Include { bas_line }
+@Include { bas_hyph }
+@Include { bas_unde }
+@Include { bas_date }
+@Include { bas_lang }
+@Include { bas_supe }
+@Include { bas_verb }
+@Include { bas_drop }
+@Include { bas_conv }
+@EndSections
+@End @Chapter
diff --git a/doc/user/bas_char b/doc/user/bas_char
new file mode 100644
index 0000000..7efa566
--- /dev/null
+++ b/doc/user/bas_char
@@ -0,0 +1,325 @@
+@Section
+ @Title { Characters }
+ @Tag { characters }
+@Begin
+@PP
+The usual way to get characters into a document is simply to type them as
+characters. @Index characters
+we have been doing all along. However, for some characters this is not
+possible, either because they have some special meaning, as @Code "{"
+and @Code "}" do, or because the keyboard has no button for them. This
+section explains how to get every possible character: every printable
+character in the ISO-LATIN-1 character set, every character in the Adobe
+Systems Symbol font, plus the characters {@Char quotesinglbase},
+{@Char quotedblbase}, {@Char ellipsis}, {@Char OE}, {@Char oe},
+{@Char quotedblleft}, {@Char quotedblright}, {@Char fi},
+{@Char fl}, {@Char endash}, {@Char emdash}, {@Char bullet}, {@Char dagger},
+{@Char daggerdbl}, {@Char florin}, {@Char fraction}, and @Euro. If it
+exists at all, you will find it here. ISO-LATIN-2 and Russian characters
+are available separately. In principle, there is no limit to the characters
+available, but to go beyond those given in this section requires expertise
+in defining encoding vectors and fonts @Cite { $kingston1995lout.expert}.
+@PP
+First up we have the characters that you get simply by typing
+them. The characters themselves are shown at the left, and what you
+type to get them at the right:
+@ID @OneRow @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @CC A ! @Col @Code A ! @Col ! @Col @CC B ! @Col @Code B !
+ @Col ! @Col @CC C ! @Col @Code C ! @Col ! @Col @CC D ! @Col @Code D !
+ @Col ! @Col @CC E ! @Col @Code E ! @Col ! @Col @CC F ! @Col @Code F }
+{
+@Rowa A { ! } B { $ } C { % } D { ' } E { ( } F { ) }
+@Rowa A { * } B { + } C { , } D { - } E { 0 } F { 1 }
+@Rowa A { 2 } B { 3 } C { 4 } D { 5 } E { 6 } F { 7 }
+@Rowa A { 8 } B { 9 } C { : } D { ; } E { < } F { = }
+@Rowa A { > } B { ? } C { A } D { B } E { C } F { D }
+@Rowa A { E } B { F } C { G } D { H } E { I } F { J }
+@Rowa A { K } B { L } C { M } D { N } E { O } F { P }
+@Rowa A { Q } B { R } C { S } D { T } E { U } F { V }
+@Rowa A { W } B { X } C { Y } D { Z } E { [ } F { ] }
+@Rowa A { _ } B { ` } C { a } D { b } E { c } F { d }
+@Rowa A { e } B { f } C { g } D { h } E { i } F { j }
+@Rowa A { k } B { l } C { m } D { n } E { o } F { p }
+@Rowa A { q } B { r } C { s } D { t } E { u } F { v }
+@Rowa A { w } B { x } C { y } D { z } E { } F { }
+}
+Next come characters that have buttons but have a special meaning if
+they are typed directly, and consequently have to be enclosed in double
+quotes to turn off this meaning:
+quote.chars @Index { quote characters }
+@ID @OneRow @Tab
+ @Fmta { @Col @CC A ! @Col @Code B ! @Col !
+ @Col @CC C ! @Col @Code D ! @Col !
+ @Col @CC E ! @Col @Code F ! @Col !
+ @Col @CC G ! @Col @Code H ! @Col I
+ }
+{
+@Rowa
+ A { "\"" } B { "\"\\\"\"" }
+ C { "#" } D { "\"#\"" }
+ E { "&" } F { "\"&\"" }
+ G { "/" } H { "\"/\"" }
+@Rowa
+ A { "@" } B { "\"@\"" }
+ C { "\\" } D { "\"\\\\\"" }
+ E { "^" } F { "\"^\"" }
+ G { "{" } H { "\"{\"" }
+@Rowa
+ A { "|" } B { "\"|\"" }
+ C { "}" } D { "\"}\"" }
+ E { "~" } F { "\"~\"" }
+ G { } H { "\" \"" }
+ I { (space character) }
+}
+If you think you want {@Code "\""}, you probably really want `` and '',
+for which see below. You can place whole sequences of characters, special
+or not, inside one pair of double quotes:
+@ID @OneRow @Tab
+ @Fmta { @Col A ! @Col ! @Col @Code B }
+{
+@Rowa
+ A { "jeff/includes/su_crest.eps" }
+ B { "\"jeff/includes/su_crest.eps\"" }
+@Rowa
+ A { "\"@PP\"" }
+ B { "\"\\\"@PP\\\"\"" }
+}
+Next we have some miscellaneous characters which have been deemed
+sufficiently important to deserve their own symbols:
+@ID @OneRow @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col @Code B ! @Col ! @Col C ! @Col @Code D !
+ @Col ! @Col E ! @Col @Code F }
+{
+ @Rowa
+ A { `` }
+ B { "``" }
+ C { ,, }
+ D { ",," }
+ E { -- }
+ F { "--" }
+ @Rowa
+ A { '' }
+ B { "''" }
+ C { ... }
+ D { "..." }
+ E { --- }
+ F { "---" }
+ @Rowa
+ A { @Bullet bullet @Index @Code "@Bullet" }
+ B { "@Bullet" }
+ C { @Star star @Index @Code "@Star" }
+ D { "@Star" }
+ E { @ParSym parsym @Index @Code "@ParSym" }
+ F { "@ParSym" }
+ @Rowa
+ A { @SectSym sectsym @Index @Code "@SectSym" }
+ B { "@SectSym" }
+ C { @Dagger dagger @Index @Code "@Dagger" }
+ D { "@Dagger" }
+ E { @DaggerDbl daggerdbl @Index @Code "@DaggerDbl" }
+ F { "@DaggerDbl"}
+ @Rowa
+ A { @CDot cdot @Index @Code "@CDot" }
+ B { "@CDot" }
+ C { @Sterling sterling @Index @Code "@Sterling" }
+ D { "@Sterling" }
+ E { @Yen yen @Index @Code "@Yen" }
+ F { "@Yen" }
+ @Rowa
+ A { @Florin florin @Index @Code "@Florin" }
+ B { "@Florin" }
+ C { @Degree degree @Index @Code "@Degree" }
+ D { "@Degree" }
+ E { @Minute minute @Index @Code "@Minute" }
+ F { "@Minute" }
+ @Rowa
+ A { @Second second @Index @Code "@Second" }
+ B { "@Second" }
+ C { @Lozenge lozenge @Index @Code "@Lozenge" }
+ D { "@Lozenge" }
+ E { @Multiply multiply @Index @Code "@Multiply"}
+ F { "@Multiply" }
+ @Rowa
+ A { @Divide divide @Index @Code "@Divide" }
+ B { "@Divide" }
+ C { @CopyRight copyright @Index @Code "@CopyRight" }
+ D { "@CopyRight"}
+ E { @Register register @Index @Code "@Register" }
+ F { "@Register" }
+ @Rowa
+ A { @TradeMark trademark @Index @Code "@TradeMark" }
+ B { "@TradeMark"}
+ C { @Euro euro @Index @Code "@Euro" }
+ D { "@Euro"}
+}
+Next we have the complete ISO-LATIN-1 character set, whose members you
+iso.latin.1 @Index { ISO-LATIN-1 character set }
+char. @Index { @Code "@Char" symbol }
+get with the @Code "@Char" symbol followed by the name of the character
+you want:
+@ID @OneRow -3p @Font @Tab
+ hmargin { 0.1c }
+ vmargin { 0.4vo }
+ @Fmta { @Col @CC @Char A ! @Col @Code { "@Char" A } ! @Col !
+ @Col @CC @Char B ! @Col @Code { "@Char" B } ! @Col !
+ @Col @CC @Char C ! @Col @Code { "@Char" C } ! @Col !
+ @Col @CC @Char D ! @Col @Code { "@Char" D } }
+ @Fmtb { @Col @CC @Char A ! @Col @Code { "@Char" A } ! @Col !
+ @Col ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col }
+{
+@Rowa A { space } B { exclam } C { quotedbl } D { numbersign }
+@Rowa A { dollar } B { percent } C { ampersand } D { quoteright }
+@Rowa A { parenleft } B { parenright } C { asterisk } D { plus }
+@Rowa A { comma } B { hyphen } C { period } D { slash }
+@Rowa A { zero } B { one } C { two } D { three }
+@Rowa A { four } B { five } C { six } D { seven }
+@Rowa A { eight } B { nine } C { colon } D { semicolon }
+@Rowa A { less } B { equal } C { greater } D { question }
+@Rowa A { at } B { A } C { B } D { C }
+@Rowa A { D } B { E } C { F } D { G }
+@Rowa A { H } B { I } C { J } D { K }
+@Rowa A { L } B { M } C { N } D { O }
+@Rowa A { P } B { Q } C { R } D { S }
+@Rowa A { T } B { U } C { V } D { W }
+@Rowa A { X } B { Y } C { Z } D { bracketleft }
+@Rowa A { backslash } B { bracketright } C { asciicircum } D { underscore }
+@Rowa A { quoteleft } B { a } C { b } D { c }
+@Rowa A { d } B { e } C { f } D { g }
+@Rowa A { h } B { i } C { j } D { k }
+@Rowa A { l } B { m } C { n } D { o }
+@Rowa A { p } B { q } C { r } D { s }
+@Rowa A { t } B { u } C { v } D { w }
+@Rowa A { x } B { y } C { z } D { braceleft }
+@Rowa A { bar } B { braceright } C { asciitilde } D { dotlessi }
+@Rowa A { grave } B { acute } C { circumflex } D { tilde }
+@Rowa A { macron } B { breve } C { dotaccent } D { dieresis }
+@Rowa A { ring } B { cedilla } C { hungarumlaut } D { ogonek }
+@Rowa A { caron } B { space } C { exclamdown } D { cent }
+@Rowa A { sterling } B { currency } C { yen } D { brokenbar }
+@Rowa A { section } B { dieresis } C { copyright } D { ordfeminine }
+@Rowa A { guillemotleft } B { logicalnot } C { hyphen } D { registered }
+@Rowa A { macron } B { degree } C { plusminus } D { twosuperior }
+@Rowa A { threesuperior } B { acute } C { mu } D { paragraph }
+@Rowa A { periodcentered } B { cedilla } C { onesuperior } D { ordmasculine }
+@Rowa A { guillemotright } B { onequarter } C { onehalf } D { threequarters }
+@Rowa A { questiondown } B { Agrave } C { Aacute } D { Acircumflex }
+@Rowa A { Atilde } B { Adieresis } C { Aring } D { AE }
+@Rowa A { Ccedilla } B { Egrave } C { Eacute } D { Ecircumflex }
+@Rowa A { Edieresis } B { Igrave } C { Iacute } D { Icircumflex }
+@Rowa A { Idieresis } B { Eth } C { Ntilde } D { Ograve }
+@Rowa A { Oacute } B { Ocircumflex } C { Otilde } D { Odieresis }
+@Rowa A { multiply } B { Oslash } C { Ugrave } D { Uacute }
+@Rowa A { Ucircumflex } B { Udieresis } C { Yacute } D { Thorn }
+@Rowa A { germandbls } B { agrave } C { aacute } D { acircumflex }
+@Rowa A { atilde } B { adieresis } C { aring } D { ae }
+@Rowa A { ccedilla } B { egrave } C { eacute } D { ecircumflex }
+@Rowa A { edieresis } B { igrave } C { iacute } D { icircumflex }
+@Rowa A { idieresis } B { eth } C { ntilde } D { ograve }
+@Rowa A { oacute } B { ocircumflex } C { otilde } D { odieresis }
+@Rowa A { divide } B { oslash } C { ugrave } D { uacute }
+@Rowa A { ucircumflex } B { udieresis } C { yacute } D { thorn }
+@Rowb A { ydieresis }
+}
+Of course, many of these characters can also be typed directly, or with the
+aid of double quotes, as we have seen. If your keyboard has accented
+accented @Index { accented characters }
+characters on it, you can type them directly too; if not, you need to
+use the @Code "@Char" symbol, in which case you will probably need
+braces as well:
+@ID @Code "gar{@Char ccedilla}on"
+to distinguish the @Code "@Char" symbol and the character name from
+adjacent letters.
+@PP
+Next we have the Adobe Systems Symbol font, a treasure trove of
+symbol. @Index { Symbol font }
+sym. @Index { @Code "@Sym" symbol }
+exotic characters obtained with the @Code "@Sym" symbol:
+@ID @OneRow -3p @Font @Tab
+ hmargin { 0.1c }
+ vmargin { 0.4vo }
+ @Fmta { @Col @CC @Sym A ! @Col @Code { "@Sym" A } ! @Col !
+ @Col @CC @Sym B ! @Col @Code { "@Sym" B } ! @Col !
+ @Col @CC @Sym C ! @Col @Code { "@Sym" C } ! @Col !
+ @Col @CC @Sym D ! @Col @Code { "@Sym" D } }
+{
+@Rowa A { space } B { exclam } C { universal } D { numbersign }
+@Rowa A { existential } B { percent } C { ampersand } D { suchthat }
+@Rowa A { parenleft } B { parenright } C { asteriskmath } D { plus }
+@Rowa A { comma } B { minus } C { period } D { slash }
+@Rowa A { zero } B { one } C { two } D { three }
+@Rowa A { four } B { five } C { six } D { seven }
+@Rowa A { eight } B { nine } C { colon } D { semicolon }
+@Rowa A { less } B { equal } C { greater } D { question }
+@Rowa A { congruent } B { Alpha } C { Beta } D { Chi }
+@Rowa A { Delta } B { Epsilon } C { Phi } D { Gamma }
+@Rowa A { Eta } B { Iota } C { theta1 } D { Kappa }
+@Rowa A { Lambda } B { Mu } C { Nu } D { Omicron }
+@Rowa A { Pi } B { Theta } C { Rho } D { Sigma }
+@Rowa A { Tau } B { Upsilon } C { sigma1 } D { Omega }
+@Rowa A { Xi } B { Psi } C { Zeta } D { bracketleft }
+@Rowa A { therefore } B { bracketright } C { perpendicular } D { underscore }
+@Rowa A { radicalex } B { alpha } C { beta } D { chi }
+@Rowa A { delta } B { epsilon } C { phi } D { gamma }
+@Rowa A { eta } B { iota } C { phi1 } D { kappa }
+@Rowa A { lambda } B { mu } C { nu } D { omicron }
+@Rowa A { pi } B { theta } C { rho } D { sigma }
+@Rowa A { tau } B { upsilon } C { omega1 } D { omega }
+@Rowa A { xi } B { psi } C { zeta } D { braceleft }
+@Rowa A { bar } B { braceright } C { similar } D { Upsilon1 }
+@Rowa A { minute } B { lessequal } C { fraction } D { infinity }
+@Rowa A { florin } B { club } C { diamond } D { heart }
+@Rowa A { spade } B { arrowboth } C { arrowleft } D { arrowup }
+@Rowa A { arrowright } B { arrowdown } C { degree } D { plusminus }
+@Rowa A { second } B { greaterequal } C { multiply } D { proportional }
+@Rowa A { partialdiff } B { bullet } C { divide } D { notequal }
+@Rowa A { equivalence } B { approxequal } C { ellipsis } D { arrowvertex }
+@Rowa A { arrowhorizex } B { carriagereturn } C { aleph } D { Ifraktur }
+@Rowa A { Rfraktur } B { weierstrass } C { circlemultiply } D { circleplus }
+@Rowa A { emptyset } B { intersection } C { union } D { propersuperset }
+@Rowa A { reflexsuperset } B { notsubset } C {propersubset} D {reflexsubset}
+@Rowa A { element } B { notelement } C { angle } D { gradient }
+@Rowa A { registerserif } B { copyrightserif } C {trademarkserif} D {product}
+@Rowa A { radical } B { dotmath } C { logicalnot } D { logicaland }
+@Rowa A { logicalor } B { arrowdblboth } C { arrowdblleft } D { arrowdblup }
+@Rowa A { arrowdblright } B { arrowdbldown } C { lozenge } D { angleleft }
+@Rowa A { registersans } B { copyrightsans } C {trademarksans} D {summation}
+@Rowa A { parenlefttp } B { parenleftex } C { parenleftbt } D {bracketlefttp}
+ vmargin { 0.5vx }
+@Rowa A { bracketleftex } B { bracketleftbt } C {bracelefttp} D {braceleftmid}
+ vmargin { 0.5vx }
+@Rowa A { braceleftbt } B { braceex } C { angleright } D { integral }
+ vmargin { 0.5vx }
+@Rowa A { integraltp } B { integralex } C { integralbt } D { parenrighttp }
+ vmargin { 0.5vx }
+@Rowa A {parenrightex} B {parenrightbt} C {bracketrighttp} D {bracketrightex}
+ vmargin { 0.5vx }
+@Rowa A { bracketrightbt } B {bracerighttp} C {bracerightmid} D {bracerightbt}
+ vmargin { 0.5vx }
+}
+There is only one Symbol font; it does not come in bold or italic faces
+like the other fonts. Typing @Code "@B @Sym alpha" is therefore useless,
+and anyway there is no bold @Sym alpha character in any font distributed
+with Lout (except see Section {@NumberOf teq}).
+@PP
+Finally we have a few more characters that you get with the @Code "@Char"
+symbol, although they aren't ISO-LATIN-1 characters.
+@ID @OneRow -3p @Font @Tab
+ hmargin { 0.1c }
+ vmargin { 0.4vo }
+ @Fmta { @Col @CC @Char A ! @Col @Code { "@Char" A } ! @Col !
+ @Col @CC @Char B ! @Col @Code { "@Char" B } ! @Col !
+ @Col @CC @Char C ! @Col @Code { "@Char" C } ! @Col !
+ @Col @CC @Char D ! @Col @Code { "@Char" D } }
+ @Fmtb { @Col @CC @Char A ! @Col @Code { "@Char" A } ! @Col !
+ @Col ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col }
+{
+@Rowa A { quotesinglbase } B { quotedblbase } C { ellipsis } D { OE }
+@Rowa A { oe } B { quotedblleft } C { quotedblright } D { fi }
+@Rowa A { fl } B { endash } C { emdash } D { bullet }
+@Rowa A { dagger } B { daggerdbl } C { florin } D { fraction }
+}
+Most of these characters are also in the list of `characters important
+enough to deserve their own symbols' given above.
+@End @Section
diff --git a/doc/user/bas_conv b/doc/user/bas_conv
new file mode 100644
index 0000000..cd971b0
--- /dev/null
+++ b/doc/user/bas_conv
@@ -0,0 +1,75 @@
+@Section
+ @Title { Alternative conventions for white space }
+ @Tag { white }
+@Begin
+@PP
+As Section {@NumberOf spaces} explains, when two objects are separated
+by one or more white space characters (spaces, tabs, and newlines), this
+same amount of white space will separate the two objects in the output.
+@PP
+Two other conventions for interpreting these white spaces have been
+used in other document formatting systems. Roughly, they are:
+@ID @Tab
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { troff }
+ B { Like Lout, except that at every point where a sentence ends at
+the end of an input line, add one extra space in the output. }
+@Rowa
+ A { @TeX }
+ B { Replace all sequences of two or more white spaces by one. Then,
+at every point where a sentence ends, whether or not it is at the end
+of a line, add one extra space in the output. }
+}
+Lout offers these two alternative conventions by means of the
+initialspace. @Index { @Code "@InitialSpace" option }
+@Code "@InitialSpace" option. This is similar to the
+@Code "@InitialFont" option described at the end of Section
+{@NumberOf fonts}, in that you can set it at the beginning of your
+document, like this:
+@ID @Code {
+"@SysInclude { doc }"
+"@Document"
+" @InitialSpace { lout }"
+"//"
+"@Text @Begin"
+"..."
+"@End @Text"
+}
+or you can set it in the setup file. The above example shows the
+default value, {@Code lout}, which produces Lout's usual spacing;
+lout.space @Index { @Code lout spacing }
+troff.space @Index { @Code troff spacing }
+tex.space @Index { @Code tex (@LaTeX) spacing }
+the alternative values are @Code "troff" and {@Code "tex"}.
+@PP
+How to tell whether a sentence has ended is a vexed question. For
+the @Code "troff" method, Lout looks for a word at the end of a line
+ending in one of `.', `:', `?', or `!' optionally followed by either
+a right quote character or a right parenthesis. Actually, this depends
+on the current language (Section {@NumberOf languages}); the rule just
+given is for English, and other languages may differ.
+@PP
+The @Code "tex" rule for where a sentence ends is slightly more
+complicated. Lout looks for a word, not necessarily at the end
+of an input line, which ends as described for @Code "troff" but
+in addition has a lower-case letter preceding that.
+@PP
+In all cases you must use a paragraph symbol, such as @Code "@PP" or
+{@Code "@LP"}, to separate your paragraphs. The common convention of
+other systems, that a blank line marks a paragraph, is never true of Lout.
+@PP
+Whatever rule is adopted, there are occasional exceptions where you
+will have to indicate explicitly whether you want an ordinary space
+or a between-sentences space. For this there are two symbols,
+@Code "~" (ordinary space) and {@Code "~~"} (between-sentences
+space). For example,
+@ID @Code "Dr.~Kingston"
+will produce an ordinary space between the two words, even with
+@Code "tex" which would otherwise consider that spot to be the end
+of a sentence. Spaces adjacent to these two symbols have no effect on
+the result. Please note however that @Code "~" produces an
+unbreakable space (that is, one that will never be replaced by the end of
+a line) in contrast to just leaving a space, which is breakable.
+@End @Section
diff --git a/doc/user/bas_date b/doc/user/bas_date
new file mode 100644
index 0000000..16ee433
--- /dev/null
+++ b/doc/user/bas_date
@@ -0,0 +1,84 @@
+@Section
+ @Title { The current date and time }
+ @Tag { date }
+@Begin
+@PP
+The @Code "@Date" and @Code "@Time" symbols produce the current date
+date. @Index @Code "@Date"
+time. @Index @Code "@Time"
+and time:
+@ID @Code "It is now @Time on @Date."
+produces something like
+@ID { It is now @Time on @Date. }
+The result depends on the current language.
+@PP
+Both symbols have a @Code "@Format" option that changes the format of
+the result:
+@ID @Code "@Date @Format { @DayNum\"/\"@MonthNum\"/\"@ShortYear }"
+The result is the @Code "@Format" option with the symbols replaced by
+the appropriate values:
+@ID { @Date @Format { @DayNum"/"@MonthNum"/"@ShortYear } }
+The @Code "/" characters have been enclosed in double quotes for the
+usual reason (Section {@NumberOf characters}).
+@PP
+Here is the full list of symbols that you can use within both
+@Code "@Format" options:
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@Year" }
+ B { The year, e.g. @Code "1994" }
+@Rowa
+ A { "@ShortYear" }
+ B { The last two digits of the year, e.g. @Code "94" }
+@Rowa
+ A { "@Month" }
+ B { The month, e.g. @Code "December" }
+@Rowa
+ A { "@ShortMonth" }
+ B { The month abbreviated, e.g. @Code "Dec" }
+@Rowa
+ A { "@MonthNum" }
+ B { The number of the month, between @Code "1" and @Code "12" }
+@Rowa
+ A { "@Day" }
+ B { The day of the week, e.g. @Code "Saturday" }
+@Rowa
+ A { "@ShortDay" }
+ B { The day abbreviated, e.g. @Code "Sat" }
+@Rowa
+ A { "@DayNum" }
+ B { The day of the month, between @Code "1" and @Code "31" }
+@Rowa
+ A { "@MeriDiem" }
+ B { @Code "a.m." or @Code "p.m." }
+@Rowa
+ A { "@ShortMeriDiem" }
+ B { @Code "am" or @Code "pm" }
+@Rowa
+ A { "@Hour" }
+ B { The hour, between @Code "00" and @Code "23" }
+@Rowa
+ A { "@ShortHour" }
+ B { The hour, between @Code "0" and @Code "23" }
+@Rowa
+ A { "@TwelveHour" }
+ B { The hour, between @Code "1" and @Code "12" }
+@Rowa
+ A { "@Minute" }
+ B { The minute, between @Code "00" and @Code "59" }
+@Rowa
+ A { "@Second" }
+ B { The second, almost always between @Code "00" and @Code "59" }
+}
+The default format for @Code "@Date" in English is
+@ID @Code "@Date @Format { @DayNum @Month, @Year }"
+and the default format for @Code "@Time" in English is
+@ID @Code "@Time @Format { @TwelveHour.@Minute @MeriDiem }"
+Both default formats depend on the current language, and
+so do {@Code "@Month"}, {@Code "@ShortMonth"},
+{@Code "@Day"}, and {@Code "@ShortDay"},{@Code "@MeriDiem" }
+and {@Code "@ShortMeriDiem" }.
+@End @Section
diff --git a/doc/user/bas_drop b/doc/user/bas_drop
new file mode 100644
index 0000000..0978123
--- /dev/null
+++ b/doc/user/bas_drop
@@ -0,0 +1,44 @@
+@Section
+ @Title { Drop capitals }
+ @Tag { dropcaps }
+@Begin
+@PP
+There are two symbols for producing drop capitals, {@Code "@DropCapTwo"}
+drop.cap.two.sym @Index @Code "@DropCapTwo"
+drop.cap.three.sym @Index @Code "@DropCapThree"
+and {@Code "@DropCapThree"}. Place the capital to be dropped just
+before the symbol, and the rest of the paragraph after it:
+@ID @OneRow @Code {
+"I @DropCapTwo {"
+"t is a truth universally acknowledged, that a single man"
+"in possession of a good fortune, must be in want of a wife."
+"}"
+}
+produces the object
+@ID 3i @Wide {
+I @DropCapTwo {
+t is a truth universally acknowledged, that a single man
+in possession of a good fortune, must be in want of a wife.
+}
+}
+@Code "@DropCapThree" is the same except that the capital is larger
+and spreads over three lines.
+@PP
+Because Lout occasionally gets the height of the enlarged capital
+slightly wrong, there is a @Code "height" option which allows you
+to change the height if you need to:
+@ID @OneRow @Code {
+"H @DropCapTwo height { 1.5v }"
+"{"
+" ..."
+"}"
+}
+This shows the default value for the height of the capital in
+{@Code "@DropCapTwo"}: 1.5 times the current inter-line
+spacing. The default height in @Code "@DropCapThree" is {@Code "2.5v"}.
+@PP
+These symbols produce an object which may appear anywhere in the
+usual way. A paragraph symbol will be needed after the paragraph. The
+paragraph breaking style of the body of the paragraph will be
+{@Code "adjust nohyphen"}; this cannot be changed at present.
+@End @Section
diff --git a/doc/user/bas_empt b/doc/user/bas_empt
new file mode 100644
index 0000000..c9f615d
--- /dev/null
+++ b/doc/user/bas_empt
@@ -0,0 +1,26 @@
+@Section
+ @Title { The empty object }
+ @Tag { empty }
+@Begin
+@PP
+It is possible to produce examples in which an object is clearly
+empty. @Index { empty object }
+missing:
+@ID @Code "{ @I }"
+The @Code "@I" symbol is supposed to italicize the following object,
+but in this example there isn't one. A more plausible example is
+@ID @OneRow @Code {
+"@PP"
+"@PP"
+}
+There are supposed to be paragraph objects between paragraph symbols,
+but here there aren't.
+@PP
+Wherever an object is clearly missing, Lout inserts an @I { empty object },
+which is a rectangle of size zero by zero that prints as nothing. Here
+are two other ways to get an empty object:
+@ID @Code "{} \"\""
+Braces always enclose an object, so Lout is obliged to insert an empty
+object between them; the two double quotes make a word with no characters
+in it, which is taken to be an empty object.
+@End @Section
diff --git a/doc/user/bas_font b/doc/user/bas_font
new file mode 100644
index 0000000..65d711e
--- /dev/null
+++ b/doc/user/bas_font
@@ -0,0 +1,629 @@
+@Section
+ @Title { Fonts and font sizes }
+ @Tag { fonts }
+@Begin
+@PP
+A @I font is a collection of characters that may be printed. For
+font. @Index { font }
+example, here is the Times Roman font:
+@ID @OneRow { Times Base } @Font 0.05c @Space {
+{ @Char space }
+{ @Char exclam }
+{ @Char quotedbl }
+{ @Char numbersign }
+{ @Char dollar }
+{ @Char percent }
+{ @Char ampersand }
+{ @Char quoteright }
+{ @Char parenleft }
+{ @Char parenright }
+{ @Char asterisk }
+{ @Char plus }
+{ @Char comma }
+{ @Char hyphen }
+{ @Char period }
+{ @Char slash }
+{ @Char zero }
+{ @Char one }
+{ @Char two }
+{ @Char three }
+{ @Char four }
+{ @Char five }
+{ @Char six }
+{ @Char seven }
+{ @Char eight }
+{ @Char nine }
+{ @Char colon }
+{ @Char semicolon }
+{ @Char less }
+{ @Char equal }
+{ @Char greater }
+{ @Char question }
+{ @Char at }
+{ @Char bracketleft }
+{ @Char backslash }
+{ @Char bracketright }
+{ @Char asciicircum }
+{ @Char underscore }
+{ @Char quoteleft }
+//1vx
+{ @Char A }
+{ @Char B }
+{ @Char C }
+{ @Char D }
+{ @Char E }
+{ @Char F }
+{ @Char G }
+{ @Char H }
+{ @Char I }
+{ @Char J }
+{ @Char K }
+{ @Char L }
+{ @Char M }
+{ @Char N }
+{ @Char O }
+{ @Char P }
+{ @Char Q }
+{ @Char R }
+{ @Char S }
+{ @Char T }
+{ @Char U }
+{ @Char V }
+{ @Char W }
+{ @Char X }
+{ @Char Y }
+{ @Char Z }
+//1vx
+{ @Char a }
+{ @Char b }
+{ @Char c }
+{ @Char d }
+{ @Char e }
+{ @Char f }
+{ @Char g }
+{ @Char h }
+{ @Char i }
+{ @Char j }
+{ @Char k }
+{ @Char l }
+{ @Char m }
+{ @Char n }
+{ @Char o }
+{ @Char p }
+{ @Char q }
+{ @Char r }
+{ @Char s }
+{ @Char t }
+{ @Char u }
+{ @Char v }
+{ @Char w }
+{ @Char x }
+{ @Char y }
+{ @Char z }
+//1vx
+{ @Char braceleft }
+{ @Char bar }
+{ @Char braceright }
+{ @Char asciitilde }
+{ @Char dotlessi }
+{ @Char grave }
+{ @Char acute }
+{ @Char circumflex }
+{ @Char tilde }
+{ @Char macron }
+{ @Char breve }
+{ @Char dotaccent }
+{ @Char dieresis }
+{ @Char ring }
+{ @Char cedilla }
+{ @Char hungarumlaut }
+{ @Char ogonek }
+{ @Char caron }
+{ @Char space }
+{ @Char exclamdown }
+{ @Char cent }
+{ @Char sterling }
+{ @Char currency }
+{ @Char yen }
+{ @Char brokenbar }
+{ @Char section }
+{ @Char dieresis }
+{ @Char copyright }
+{ @Char ordfeminine }
+{ @Char guillemotleft }
+{ @Char logicalnot }
+{ @Char hyphen }
+{ @Char registered }
+{ @Char macron }
+{ @Char degree }
+{ @Char plusminus }
+{ @Char twosuperior }
+{ @Char threesuperior }
+{ @Char acute }
+{ @Char mu }
+{ @Char paragraph }
+{ @Char periodcentered }
+{ @Char cedilla }
+{ @Char onesuperior }
+{ @Char ordmasculine }
+{ @Char guillemotright }
+{ @Char onequarter }
+{ @Char onehalf }
+{ @Char threequarters }
+{ @Char questiondown }
+//1vx
+{ @Char Agrave }
+{ @Char Aacute }
+{ @Char Acircumflex }
+{ @Char Atilde }
+{ @Char Adieresis }
+{ @Char Aring }
+{ @Char AE }
+{ @Char Ccedilla }
+{ @Char Egrave }
+{ @Char Eacute }
+{ @Char Ecircumflex }
+{ @Char Edieresis }
+{ @Char Igrave }
+{ @Char Iacute }
+{ @Char Icircumflex }
+{ @Char Idieresis }
+{ @Char Eth }
+{ @Char Ntilde }
+{ @Char Ograve }
+{ @Char Oacute }
+{ @Char Ocircumflex }
+{ @Char Otilde }
+{ @Char Odieresis }
+{ @Char multiply }
+{ @Char Oslash }
+{ @Char Ugrave }
+{ @Char Uacute }
+{ @Char Ucircumflex }
+{ @Char Udieresis }
+{ @Char Yacute }
+{ @Char Thorn }
+//1vx
+{ @Char germandbls }
+{ @Char agrave }
+{ @Char aacute }
+{ @Char acircumflex }
+{ @Char atilde }
+{ @Char adieresis }
+{ @Char aring }
+{ @Char ae }
+{ @Char ccedilla }
+{ @Char egrave }
+{ @Char eacute }
+{ @Char ecircumflex }
+{ @Char edieresis }
+{ @Char igrave }
+{ @Char iacute }
+{ @Char icircumflex }
+{ @Char idieresis }
+{ @Char eth }
+{ @Char ntilde }
+{ @Char ograve }
+{ @Char oacute }
+{ @Char ocircumflex }
+{ @Char otilde }
+{ @Char odieresis }
+{ @Char divide }
+{ @Char oslash }
+{ @Char ugrave }
+{ @Char uacute }
+{ @Char ucircumflex }
+{ @Char udieresis }
+{ @Char yacute }
+{ @Char thorn }
+{ @Char ydieresis }
+}
+and here is the Times Italic font:
+@ID @OneRow { Times Slope } @Font 0.05c @Space {
+{ @Char space }
+{ @Char exclam }
+{ @Char quotedbl }
+{ @Char numbersign }
+{ @Char dollar }
+{ @Char percent }
+{ @Char ampersand }
+{ @Char quoteright }
+{ @Char parenleft }
+{ @Char parenright }
+{ @Char asterisk }
+{ @Char plus }
+{ @Char comma }
+{ @Char hyphen }
+{ @Char period }
+{ @Char slash }
+{ @Char zero }
+{ @Char one }
+{ @Char two }
+{ @Char three }
+{ @Char four }
+{ @Char five }
+{ @Char six }
+{ @Char seven }
+{ @Char eight }
+{ @Char nine }
+{ @Char colon }
+{ @Char semicolon }
+{ @Char less }
+{ @Char equal }
+{ @Char greater }
+{ @Char question }
+{ @Char at }
+{ @Char bracketleft }
+{ @Char backslash }
+{ @Char bracketright }
+{ @Char asciicircum }
+{ @Char underscore }
+{ @Char quoteleft }
+//1vx
+{ @Char A }
+{ @Char B }
+{ @Char C }
+{ @Char D }
+{ @Char E }
+{ @Char F }
+{ @Char G }
+{ @Char H }
+{ @Char I }
+{ @Char J }
+{ @Char K }
+{ @Char L }
+{ @Char M }
+{ @Char N }
+{ @Char O }
+{ @Char P }
+{ @Char Q }
+{ @Char R }
+{ @Char S }
+{ @Char T }
+{ @Char U }
+{ @Char V }
+{ @Char W }
+{ @Char X }
+{ @Char Y }
+{ @Char Z }
+//1vx
+{ @Char a }
+{ @Char b }
+{ @Char c }
+{ @Char d }
+{ @Char e }
+{ @Char f }
+{ @Char g }
+{ @Char h }
+{ @Char i }
+{ @Char j }
+{ @Char k }
+{ @Char l }
+{ @Char m }
+{ @Char n }
+{ @Char o }
+{ @Char p }
+{ @Char q }
+{ @Char r }
+{ @Char s }
+{ @Char t }
+{ @Char u }
+{ @Char v }
+{ @Char w }
+{ @Char x }
+{ @Char y }
+{ @Char z }
+//1vx
+{ @Char braceleft }
+{ @Char bar }
+{ @Char braceright }
+{ @Char asciitilde }
+{ @Char dotlessi }
+{ @Char grave }
+{ @Char acute }
+{ @Char circumflex }
+{ @Char tilde }
+{ @Char macron }
+{ @Char breve }
+{ @Char dotaccent }
+{ @Char dieresis }
+{ @Char ring }
+{ @Char cedilla }
+{ @Char hungarumlaut }
+{ @Char ogonek }
+{ @Char caron }
+{ @Char space }
+{ @Char exclamdown }
+{ @Char cent }
+{ @Char sterling }
+{ @Char currency }
+{ @Char yen }
+{ @Char brokenbar }
+{ @Char section }
+{ @Char dieresis }
+{ @Char copyright }
+{ @Char ordfeminine }
+{ @Char guillemotleft }
+{ @Char logicalnot }
+{ @Char hyphen }
+{ @Char registered }
+{ @Char macron }
+{ @Char degree }
+{ @Char plusminus }
+{ @Char twosuperior }
+{ @Char threesuperior }
+{ @Char acute }
+{ @Char mu }
+{ @Char paragraph }
+{ @Char periodcentered }
+{ @Char cedilla }
+{ @Char onesuperior }
+{ @Char ordmasculine }
+{ @Char guillemotright }
+{ @Char onequarter }
+{ @Char onehalf }
+{ @Char threequarters }
+{ @Char questiondown }
+//1vx
+{ @Char Agrave }
+{ @Char Aacute }
+{ @Char Acircumflex }
+{ @Char Atilde }
+{ @Char Adieresis }
+{ @Char Aring }
+{ @Char AE }
+{ @Char Ccedilla }
+{ @Char Egrave }
+{ @Char Eacute }
+{ @Char Ecircumflex }
+{ @Char Edieresis }
+{ @Char Igrave }
+{ @Char Iacute }
+{ @Char Icircumflex }
+{ @Char Idieresis }
+{ @Char Eth }
+{ @Char Ntilde }
+{ @Char Ograve }
+{ @Char Oacute }
+{ @Char Ocircumflex }
+{ @Char Otilde }
+{ @Char Odieresis }
+{ @Char multiply }
+{ @Char Oslash }
+{ @Char Ugrave }
+{ @Char Uacute }
+{ @Char Ucircumflex }
+{ @Char Udieresis }
+{ @Char Yacute }
+{ @Char Thorn }
+//1vx
+{ @Char germandbls }
+{ @Char agrave }
+{ @Char aacute }
+{ @Char acircumflex }
+{ @Char atilde }
+{ @Char adieresis }
+{ @Char aring }
+{ @Char ae }
+{ @Char ccedilla }
+{ @Char egrave }
+{ @Char eacute }
+{ @Char ecircumflex }
+{ @Char edieresis }
+{ @Char igrave }
+{ @Char iacute }
+{ @Char icircumflex }
+{ @Char idieresis }
+{ @Char eth }
+{ @Char ntilde }
+{ @Char ograve }
+{ @Char oacute }
+{ @Char ocircumflex }
+{ @Char otilde }
+{ @Char odieresis }
+{ @Char divide }
+{ @Char oslash }
+{ @Char ugrave }
+{ @Char uacute }
+{ @Char ucircumflex }
+{ @Char udieresis }
+{ @Char yacute }
+{ @Char thorn }
+{ @Char ydieresis }
+}
+As their names imply, these two fonts belong to the @I { Times family },
+a collection of fonts designed to go well together. Every font has a
+@I { family name }, such as Times, Helvetica, or Courier, and a
+family.name @Index { family name of font }
+face.name @Index { face name of font }
+@I { face name }, such as Roman or Italic. To find out how to
+get the unusual characters, see Section {@NumberOf characters}.
+@PP
+Documents look best when they use just one font family, so the most
+common need is to change to a different face within the current
+family. We have already seen {@Code "@I"}, which changes to the Italic
+face of the current family; there are six such symbols:
+b. @Index @Code "@B"
+i. @Index @Code "@I"
+bi. @Index @Code "@BI"
+ii. @Index @Code "@II"
+s. @Index @Code "@S"
+r. @Index @Code "@R"
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "@B { Hello World }" }
+ B { @B { Hello World } }
+@Rowa
+ A { "@I { Hello World }" }
+ B { @I { Hello World } }
+@Rowa
+ A { "@BI { Hello World }" }
+ B { @BI { Hello World } }
+@Rowa
+ A { "@II { Hello World }" }
+ B { @II { Hello World } }
+@Rowa
+ A { "@S { Hello World }" }
+ B { @S { Hello World } }
+@Rowa
+ A { "@R { Hello World }" }
+ B { @R { Hello World } }
+}
+The symbols' names stand for Bold, Italic, Bold-Italic, Italic-Italic
+(see below), Small capitals, and Roman. It is conventional to use Bold
+for headings; Italic for emphasis, terms being defined, and subsidiary
+headings; and Roman for the rest. Small capitals are not really a
+different font; they are
+small.caps @Index { small capitals }
+made on demand from the current font. So you can write, for example,
+@ID @Code "@I @S { Hello World }"
+and get @I @S { Hello World }.
+@PP
+The @Code "@R" symbol is almost unnecessary, since the document as a
+whole is set in a Roman face; but it is occasionally useful:
+@ID @Code "@I { An Italic sentence with one @R Roman word }"
+produces
+@ID @I { An Italic sentence with one @R Roman word }
+This illustrates the general principle that the effect of a font symbol
+on the following object is subject to font symbols within that object.
+@PP
+When part of a title is to be set in italic font, neither @Code "@I"
+nor @Code "@BI" is suitable because the part should appear in bold
+italics in the title itself, but in ordinary italics in running headers
+and the table of contents. The @Code "@II" symbol is the one for this
+situation: it produces bold italics when the current font is bold,
+and ordinary italics otherwise.
+@PP
+Changing families is a little more complicated. Here is the complete
+list of font families and their faces available with Basser Lout Version 3:
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col { ragged nohyphen } @Break @Code B }
+{
+@Rowa
+ A { AvantGarde }
+ B { Base Slope Bold BoldSlope BoldObl Book BookOblique
+CondBold CondBook CondDemi CondMedium Demi DemiOblique
+ExtraLight ExtraLightObl Medium MediumObl }
+@Rowa
+ A { Bookman }
+ B { Base Slope Bold BoldSlope BoldItalic Demi DemiItalic
+Light LightItalic Medium MediumItalic }
+@Rowa
+ A { Chancery }
+ B { Base Slope Bold BoldSlope
+Roman Bold Italic Light Demi LightItalic MediumItalic
+}
+@Rowa
+ A { Courier }
+ B { Base Slope Bold BoldSlope BoldOblique Oblique }
+@Rowa
+ A { Helvetica }
+ B { Base Slope Bold BoldSlope Black BlackOblique
+BoldOblique Compressed Cond CondBlack CondBlackObl
+CondBold CondBoldObl CondLight CondLightObl
+CondOblique ExtraCompressed
+Light LightOblique Narrow NarrowBold NarrowBoldObl
+NarrowObl Oblique UltraCompressed }
+@Rowa
+ A { Schoolbook }
+ B { Base Slope Bold BoldSlope BoldItalic Italic Roman }
+@Rowa
+ A { Palatino }
+ B { Base Slope Bold BoldSlope BoldItalic
+BoldItalicOsF BoldOsF Italic ItalicOsF Roman SC }
+@Rowa
+ A { Symbol }
+ B { Base Slope Bold BoldSlope }
+@Rowa
+ A { Times }
+ B { Base Slope Bold BoldSlope BoldItalic
+BoldItalicOsF BoldSC ExtraBold Italic ItalicOsF
+Roman RomanSC Semibold SemiboldItalic }
+@Rowa
+ A { Dingbats }
+ B { Base Slope Bold BoldSlope }
+}
+Lout understands all these fonts, but your printing device may not. Times,
+Helvetica, Courier, and Symbol at least seem to be ubiquitous, although
+not in every face. These fonts work only with languages that use the
+Latin1 character set; consult Section {@NumberOf languages} for more
+information about this. It is not difficult for a Lout expert to extend this
+list @Cite { $kingston1995lout.expert }.
+@PP
+It is a convention in Lout that every font family should at least
+base. @Index { @Code Base font }
+slope. @Index { @Code Slope font }
+bold. @Index { @Code Bold font }
+boldslope. @Index { @Code BoldSlope font }
+contain faces called @Code { Base }, @Code { Slope }, @Code { Bold },
+and @Code { BoldSlope }, and these faces are what the @Code { "@R" },
+@Code { "@I" }, @Code { "@B" }, and @Code { "@BI" } symbols give you. But
+this convention is something of a fiction for two reasons. First,
+some font families don't have faces that could reasonably be described as
+bold or whatever. In particular, the @Code Symbol family contains just
+one face, and all four conventional face names produce that face. Second,
+the four conventional face names are not names that typographers actually
+use, @Code { Bold } excepted. @Code { Slope } produces an italic face
+in some families and an oblique one in others. As the table shows, the
+true names are available if you want to use them, but it is very convenient
+to have a @Code { Slope } face that is guaranteed to exist no matter which
+family is used.
+@PP
+The @Code "@Font" symbol changes the font of the following object. For
+font.sym @Index @Code "@Font"
+example,
+@ID @Code "{ Helvetica Slope } @Font { Hello World }"
+produces
+@ID { Helvetica Slope } @Font { Hello World }
+When changing to a different family, a face name must follow the family
+name; but when changing face within a family, just the face name is
+sufficient.
+@PP
+To make the characters larger or smaller, you need to change the
+font.size @Index { font size }
+@I { font size }, which can also be done with the @Code "@Font"
+symbol. Font sizes are traditionally measured in {@I points}: there
+are 72 points to one inch, and the most common font sizes are 12 point
+and 10 point. However, as Section {@NumberOf objects} explains in
+detail, any length including fractional lengths is acceptable:
+@ID @Code "24p @Font { Hello World }"
+changes to 24 point size, producing
+@ID 24p @Font { Hello World }
+It is also possible to specify a font size relative to the current
+size: @Code "+2p" means two points larger, @Code "-2p" means two
+points smaller, and @Code "1.5f" means 1.5 times the current font
+size.
+@PP
+For the convenience of people who use fixed width fonts such as
+Courier, there is an @Code "@F" symbol which switches to a
+fixed width font family:
+@ID @Code "@F { Hello world }"
+produces
+@ID @F { Hello world }
+It is the same as writing @Code "{ Courier Base -1p } @Font ..."
+with the @Code "-1p" included to compensate for the relatively
+large appearance of the Courier font.
+@PP
+The document as a whole will be set in @Code { Times Base 12p }. To
+change this you need to change the @Code "@InitialFont" option, for
+initialfont. @Index @Code "@InitialFont"
+example to
+@ID @Code "@InitialFont { Helvetica Base 10p }"
+to get Helvetica 10 point. You must give all three parts in
+{@Code "@InitialFont"}: family, face, size. If you are using your own
+setup file, as explained in Section {@NumberOf setup}, you can find the
+@Code "@InitialFont" option there. If not, you can set it at the
+beginning of your document as explained in Section {@NumberOf ordinary}.
+@PP
+There are two features that make fonts look better on the
+page. @I Ligatures are pairs of letters run together; the most
+ligatures. @Index { ligatures }
+common ligatures are `fi' and `fl.' @I Kerning is moving adjacent
+kerning. @Index { kerning }
+letters closer together, for example in `VA.' Lout considers
+ligatures and kerning to be integral parts of each font; you can prevent
+them from happening only by enclosing one of the letters in a
+@Code "@OneCol" symbol, as in {@Code "@OneCol { V }A" }.
+@End @Section
diff --git a/doc/user/bas_head b/doc/user/bas_head
new file mode 100644
index 0000000..4410c08
--- /dev/null
+++ b/doc/user/bas_head
@@ -0,0 +1,32 @@
+@Section
+ @Title { Headings }
+ @Tag { headings }
+@Begin
+@PP
+The @Code "@Heading" symbol makes the following object into a
+heading. @Index @Code "@Heading"
+heading. Actually, all it does is change the font, so if you want a
+centred heading you have to display it as well:
+@ID @OneRow @Code {
+"@Display @Heading { A Centred Heading }"
+"Following text"
+}
+If you want a left-justified heading, use @Code "@LeftDisplay" instead
+of @Code {"@Display"}. Alternatively, you can use no display symbol at
+all, but then you will need paragraph symbols before and after:
+@ID @OneRow @Code {
+"@DP"
+"@Heading { A Left-Justified Heading }"
+"@PP"
+"Following text"
+}
+The font used is @Code Bold in the current family, although you can
+change this by changing the @Code "@HeadingFont" option in the setup
+headingfont. @Index @Code "@HeadingFont"
+file (Section {@NumberOf setup}).
+@PP
+The @Code "@Heading" symbol may be used with any type of document, but it
+is really intended only for simple ones. In complex documents, large-scale
+structure symbols (Section {@NumberOf largescale}) are usually more
+appropriate.
+@End @Section
diff --git a/doc/user/bas_hyph b/doc/user/bas_hyph
new file mode 100644
index 0000000..6997f41
--- /dev/null
+++ b/doc/user/bas_hyph
@@ -0,0 +1,37 @@
+@Section
+ @Title { Hyphenation }
+ @Tag { hyph }
+@Begin
+@PP
+The @Code "@Break" symbol also controls hyphenation: @Code "hyphen"
+hyphenation. @Index hyphenation
+@Code "@Break" turns it on, @Code "nohyphen" @Code "@Break" turns it
+off. For example, ragged breaking is often done without hyphenation:
+@ID @OneRow @Code {
+"@IndentedDisplay { ragged nohyphen } @Break {"
+"This little paragraph will appear with"
+"ragged ends to its lines."
+"}"
+}
+Lout's method of choosing hyphenation points is copied from the @TeX
+tex.hyph @SubIndex { hyphenation }
+system, except that Lout will never place a hyphen within a sequence
+of characters that form a ligature (fl and
+ligatures.hyph @SubIndex { and hyphenation }
+fi are the most common ligatures).
+@PP
+Hyphenation usually works well by itself; you should never need to
+interfere with its ideas of what to do. However, if you do want
+to tell Lout where you think a hyphen could be inserted, you can
+use the @Code "&-" symbol:
+@IndentedDisplay @Code {
+"after&-math"
+}
+If @Code "&-" occurs directly after a hyphen character, hyphenation
+will be permitted but no extra hyphen will be inserted. To prevent
+hyphenation of a word, enclose the word in a @Code "@OneCol" symbol.
+@PP
+To turn hyphenation off throughout the document, you need to set the
+@Code "@InitialBreak" option to {@Code "nohyphen"}, as described at the
+end of Section {@NumberOf linespace}.
+@End @Section
diff --git a/doc/user/bas_lang b/doc/user/bas_lang
new file mode 100644
index 0000000..3b32a94
--- /dev/null
+++ b/doc/user/bas_lang
@@ -0,0 +1,85 @@
+@Section
+ @Title { Languages other than English }
+ @Tag { languages }
+@Begin
+@PP
+When part of a document is written in a language other than English,
+languages. @Index { languages other than English }
+Lout should be informed of this using the @Code "@Language" symbol:
+language. @Index @Code "@Language"
+@ID @OneRow @Code {
+"... the garter, he said: French @Language { `Honi soit qui mal y"
+"pense' }, and this saying ..."
+}
+Changing language is quite analogous to changing font using the
+@Code "@Font" symbol.
+@PP
+Since accented characters (Section {@NumberOf characters}) are always
+available irrespective of the language, at first sight it might seem
+that there is no need to bother informing Lout what language you are
+writing in. However, words are hyphenated differently depending on the
+hyphenation.languages @SubIndex { in languages other than English }
+language, and some symbols have different results in different
+languages. For example,
+@ID @Code "Danish @Language @Date"
+produces
+@ID { Danish @Language @Date }
+date.languages @SubIndex { in languages other than English }
+time.languages @SubIndex { in languages other than English }
+lists.languages @SubIndex { in languages other than English }
+and the alphabetic list symbols of Section {@NumberOf lists} also
+vary with the current language. So it's worth doing for the sake of
+knowing that non-English parts will appear as they should.
+@PP
+At the time of writing, the following languages were available:
+@ID @OneRow @Code {
+Czech Cesky Cestina
+Danish Dansk
+Dutch Nederlands
+English
+EnglishUK
+Finnish Suomi
+French Francais Fran{@Char ccedilla}ais
+German Deutsch
+Hungarian Magyar
+Italian Italiano
+Norwegian Norsk
+Polish Polski
+Russian
+Slovenian Slovenia Slovenija
+Spanish Espa{@Char ntilde}ol
+Swedish Svenska
+}
+As shown, most languages have alternative names, all equally acceptable
+to the @Code "@Language" symbol. @Code "EnglishUK" differs from
+@Code "English" only by applying hyphenation rules said to be more
+appropriate for British English. Hungarian does not yet allow
+hyphenation.
+@PP
+If your entire document is in a language other than English, you need
+to change the @Code "@InitialLanguage" option:
+initiallanguage. @Index @Code "@InitialLanguage"
+@ID @Code "@InitialLanguage { Deutsch }"
+If you are using your own setup file (Section {@NumberOf setup}), you
+can change it there. If not, you can change it at the start of your
+document, as explained in Section {@NumberOf ordinary}.
+@PP
+Czech, Polish, and Slovenian use the ISO-LATIN-2 character set, and
+users of these languages have to place
+@ID @Code "@SysInclude { latin2 }"
+at the very start of their documents in order to get access to the
+ISO-LATIN-2 versions of the fonts. These have family names such as
+TimesCE, CourierCE, HelveticaCE, and so on, to distinguish them
+from the same fonts encoded in ISO-LATIN-1. The face names are
+unchanged. Consult file @Code "latin2.fd" in the standard include
+directory for a complete list of these fonts.
+@PP
+Russian uses Cyrillic characters. In principle, users of Russian
+have to place
+@ID @Code "@SysInclude { russian }"
+at the very start of their documents in order to get access to
+Cyrillic fonts. However no such fonts are distributed
+with the current version of Lout, so this line does nothing at
+present. Other left-to-right languages are easily added, so
+consult the author if your language is not listed.
+@End @Section
diff --git a/doc/user/bas_line b/doc/user/bas_line
new file mode 100644
index 0000000..3210cdc
--- /dev/null
+++ b/doc/user/bas_line
@@ -0,0 +1,43 @@
+@Section
+ @Title { Line spacing }
+ @Tag { linespace }
+@Begin
+@PP
+The @Code "@Break" symbol also controls the amount of space placed
+line.spacing @Index { line spacing }
+between the lines of paragraphs. This distance is best given using the
+@Code "v" unit of measurement: @Code "1v" is the current line
+separation (see Section {@NumberOf objects} for a description of
+lengths in general). For example,
+@ID @Code "2vx @Break ..."
+produces double spacing in the paragraphs of the following object, and
+double.spacing @Index { double spacing }
+@ID @Code "0.9vx @Break ..."
+produces cramped spacing, which can be useful in large tables that don't
+quite fit on one page. The @Code "x" following the @Code "v" is required,
+but its meaning is beyond our scope @Cite { $kingston1995lout.expert }.
+@PP
+To set the entire document in a different line spacing from the
+initialbreak @Index @Code "@InitialBreak"
+default, you need to change the @Code "@InitialBreak" option. If you
+are using your own setup file (Section {@NumberOf setup}),
+change it there. If not, you can change it at the beginning of your
+document, as described in Section {@NumberOf ordinary}.
+@PP
+The default value of the @Code "@InitialBreak" option produces the
+@Code "adjust" paragraph breaking style with a line spacing of 1.20
+times the current (that is, the initial) font size, and hyphenation
+on:
+@ID @Code "@InitialBreak { adjust 1.20fx hyphen }"
+To get double spacing, change it to
+@ID @Code "@InitialBreak { adjust 2.40fx hyphen }"
+To get ragged paragraphs with hyphenation off, change it to
+@ID @Code "@InitialBreak { ragged 1.20fx nohyphen }"
+and so on. It is a good idea to define the initial line spacing using
+the @Code "f" unit, since then if you change the initial font size the
+line spacing will change with it. However, any length (Section
+{@NumberOf objects}) with an @Code "x" appended will do: @Code "14px"
+for 14 point, @Code "0.5cx" for 0.5 centimetres, etc. Don't use the
+@Code "v" unit though, because it refers to some @I previous line
+spacing, whereas here we are defining the line spacing for the first time.
+@End @Section
diff --git a/doc/user/bas_objs b/doc/user/bas_objs
new file mode 100644
index 0000000..f6a2f78
--- /dev/null
+++ b/doc/user/bas_objs
@@ -0,0 +1,141 @@
+@Section
+ @Title { Objects, symbols, options, and lengths }
+ @Tag { objects }
+@Begin
+@PP
+Lout is not concerned with the exact shapes of individual characters,
+only with the rectangular areas they occupy:
+@ID {
+@Box margin { 0c } B &
+@Box margin { 0c } i &
+@Box margin { 0c } o &
+@Box margin { 0c } l &
+@Box margin { 0c } o &
+@Box margin { 0c } g &
+@Box margin { 0c } y
+}
+When letters join together into a word, the result is a larger rectangle
+enclosing them all:
+@ID @Box margin { 0c } Biology
+When words join into lines we get even larger rectangles:
+@ID @Box margin { 0c } { Biology is the study of living things. }
+and so on up through paragraphs and columns to the largest rectangles,
+which are pages. We call any such rectangle, whether made up of one
+character, one word, one line, one paragraph, one page, or anything
+object. @Index { object }
+else, an @I { object }.
+@PP
+We also often say, for example, `the object
+{@Code "@I { Hello world }"},' referring to a piece of Lout's input as
+an object. This makes sense because we are anticipating the result
+produced, in this case the object @I { Hello world }. It's true that if
+a line break happens to fall between @I Hello and @I { world }, the
+result of @Code "@I { Hello world }" is not a single rectangle. We
+answer this by thinking of objects as existing before paragraph breaking
+rearranges them.
+@PP
+Not everything is an object, however. @Code "@I" alone is not an object,
+merely a symbol with the potential of producing an object when given an
+object to work on. To understand this, ask yourself what rectangle
+@Code "@I" alone could possibly represent: there is no such rectangle.
+@PP
+It helps to imagine the assembly of objects taking place before your
+eyes. Look at @Code Hello and imagine the objects H, e, l, l, o being
+assembled into the larger object Hello; look at @Code "Hello world"
+and imagine Hello and world being assembled into Hello world. When
+looking at
+@ID @Code "@I { Hello world }"
+you need to imagine the @Code "@I" symbol consuming the following object,
+Hello world, and replacing it with the object @I { Hello world }. Here
+is another example:
+@ID @Code "@CurveBox { Hello world }"
+The @Code "@CurveBox" symbol (Section {@NumberOf boxes}) consumes
+Hello world and replaces it with the object
+@ID @CurveBox { Hello world }
+This brings us to a basic principle of Lout: @I { Where you can put
+one object, you can put any object }. A few examples will show the
+vast range of possibilities opened up by this:
+@ID @Code "@CurveBox { @I Hello world }"
+produces
+@ID @CurveBox { @I Hello world }
+It doesn't bother @Code "@CurveBox" if one of the words inside
+it is in italics. Next:
+@ID @Code "@I @CurveBox { Hello world }"
+produces
+@ID @I @CurveBox { Hello world }
+The object following @Code "@I" cannot be just @Code {"@CurveBox"},
+since that is not an object by itself (it needs to be applied to some
+object first). So the object following @Code "@I" is
+@Code {"@CurveBox { Hello world }"}, and it is this that is consumed by
+@Code "@I" and modified. The @Code "@I" symbol is happy to hunt
+through the object looking for words to italicize. We could go on
+indefinitely in this way, producing
+@ID @CurveBox { @CurveBox Hello @CurveBox world }
+for example by {@Code "@CurveBox { @CurveBox Hello @CurveBox world }"}.
+@PP
+Symbols like @Code "@CurveBox" often have @I { options }, which are
+option. @Index { option }
+subsidiary symbols that modify the result. For example, @Code "@CurveBox"
+has @Code "margin" and @Code "paint" options:
+@ID @OneRow @Code {
+"@CurveBox"
+" margin { 0.5c }"
+" paint { lightgrey }"
+"{ Hello world }"
+}
+Options come immediately after the main symbol, before any following
+object. Each consists of the option name followed by the value we want
+the option to have, always enclosed in braces. Setting out options on
+separate lines as we have done above makes them easy to see but is not
+compulsory (end of line and space are the same to Lout). The result,
+naturally enough, is a curved box with a 0.5 centimetre margin around
+its contents, painted light grey:
+@ID @CurveBox
+ margin { 0.5c }
+ paint { lightgrey }
+{ Hello world }
+Options are optional: if you leave out an option, Lout supplies a
+sensible @I default value for it. Options may be given in any
+order. They are a very useful way of adding flexibility to symbols
+without cluttering things up when they aren't needed. They also help
+with learning: you can learn the basic symbol first and worry about
+the options later.
+@PP
+Whenever a length is required, as in the @Code margin option above, it
+length. @Index { length }
+centimetres. @Index { centimetres }
+inches. @Index { inches }
+point.unit @Index { point (unit of measurement) }
+em.unit @Index { em (unit of measurement) }
+f.unit @Index { @Code f unit of measurement }
+s.unit @Index { @Code s unit of measurement }
+v.unit @Index { @Code v unit of measurement }
+units.of @Index { units of measurement }
+may be given using any one of the following seven units of measurement:
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col B }
+ vmargin { 0.5vx }
+{
+@Rowa A { c } B { Centimetres }
+@Rowa A { i } B { Inches ({@Code "1i"} = {@Code "2.54c"}) }
+@Rowa A { p } B { Points ({@Code "72p"} = {@Code "1i"}) }
+@Rowa A { m } B { Ems ({@Code "12m"} = {@Code "1i"}) }
+@Rowa A { f } B { @Code "1f" is the current font size }
+@Rowa A { s } B { @Code "1s" is the current width of a space character }
+@Rowa A { v } B { @Code "1v" is the current inter-line spacing }
+}
+The first four all define absolute distances and are strictly
+interchangeable. It is traditional to measure font sizes in points; typical
+sizes are @Code "12p" and {@Code "10p"}, but fractional sizes are allowed.
+@PP
+If you use the @Code "f" unit, the length will depend on the current
+font size. This can be very useful. For example, the default value of
+the @Code "margin" option of @Code "@CurveBox" is @Code "0.3f" (0.3
+times the current font size). If you use a large font, for example in
+an overhead transparency, you get a correspondingly large margin without
+having to ask for it.
+@PP
+The @Code "s" and @Code "v" units are less useful. The @Code "v" unit
+is used within paragraph symbols (Section {@NumberOf paragraphs}) to
+ensure that the space between paragraphs widens with the inter-line spacing.
+@End @Section
diff --git a/doc/user/bas_par1 b/doc/user/bas_par1
new file mode 100644
index 0000000..de3da37
--- /dev/null
+++ b/doc/user/bas_par1
@@ -0,0 +1,105 @@
+@Section
+ @Title { Starting a new line, paragraph, or page }
+ @Tag { paragraphs }
+@Begin
+@PP
+The usual way to start a new paragraph is with the @Code "@PP" `plain
+pp. @Index @Code "@PP"
+paragraphs. @Index { paragraph symbols }
+paragraph' symbol. It produces a small vertical space and indents the
+first line of the new paragraph. Some document formatting systems
+interpret a blank line as a request to start a new paragraph. This is
+not the case with Lout: a blank line is two line-endings, equivalent to
+two spaces.
+@PP
+The @Code "@LP" `left paragraph' symbol produces the same
+lp. @Index @Code "@LP"
+vertical space as {@Code "@PP"}, but omits the indent. The @Code "@LLP"
+`left line paragraph' symbol starts a new paragraph using
+llp. @Index @Code "@LLP"
+the usual inter-line spacing and no indent, or in other words it starts a
+new line. If you are using it to create single lines, you need the
+@Code "lines" paragraph breaking style instead (Section {@NumberOf paras}).
+@PP
+The @Code "@DP" `display paragraph' symbol produces a somewhat larger
+dp. @Index @Code "@DP"
+vertical space, equal to the amount used before and after displays
+(Section {@NumberOf displays}), with no indent. To get even larger
+vertical spaces, use @Code "@DP" repeatedly. Another symbol,
+{@Code "@LOP"}, leaves a paragraph break the size of the gap left
+lop. @Index @Code "@LOP"
+outside (that is, before and after) lists (Section {@NumberOf lists}). This
+is usually equal to {@Code "@DP"}.
+@PP
+The {@Code "@NP"} `new page' symbol causes the following paragraph to
+page. @Index { page, skipping to next }
+new.page @Index { new page }
+np. @Index @Code "@NP"
+begin on a new page or column. Of course, Lout starts a new page or
+column automatically when the old one is full, so @Code "@NP" is needed
+only rarely.
+@PP
+To make each section begin on a new page you must set the @Code "@SectionGap"
+sectiongap. @Index @Code "@SectionGap"
+setup file option (Section {@NumberOf largescale}). To make one particular
+section start on a new page or column, place @Code "@NP" within the previous
+section, at the end. Placing @Code "@NP" between sections will not work.
+@PP
+Occasionally Lout will start a new page or column directly after a heading,
+which looks very poor. The obvious answer is to place an @Code "@NP"
+just before the heading, but when the document is later revised and the
+heading no longer falls near the page or column ending, this @Code "@NP"
+will have to be taken away again.
+A better answer is to precede the heading with a @Code "@CNP" `conditional
+cnp. @Index @Code "@CNP"
+new page' symbol, which checks whether enough space remains in the page or
+column for a heading and at least two lines of text. If so, @Code "@CNP"
+does nothing; if not, @Code "@CNP" causes a new page or column to be begun,
+like {@Code "@NP"}. The recommended arrangement is
+@ID @OneRow @Code {
+"end of previous part."
+"@DP"
+"@CNP"
+"@Heading { A Heading }"
+"@PP"
+"First paragraph of next part ..."
+}
+The @Code "@CNP" symbol should be preceded by either @Code "@DP" or
+@Code "@LP", preferably {@Code "@DP"}, and this determines the amount of
+space when the @Code "@NP" action does not occur.
+@PP
+The ultimate answer to the conditional new page problem is to recognise
+that the heading is the beginning of a new section of the document, and
+to use a large-scale structure symbol like @Code "@Section" (Section
+{@NumberOf largescale}). Conditional new page is just one of many
+services provided automatically by these symbols.
+@PP
+Some people do not like to see the first line of a paragraph alone at
+the bottom of a page, or the last line of a paragraph alone at the
+top (these blemishes are sometimes called widows and orphans). You
+can instruct Lout not to allow these; see the next section for details.
+@PP
+You can modify the effect of the paragraph symbols by changing options
+in the setup file. For general information about setup files and their
+options, consult Section {@NumberOf setup}; here we just explain how
+the relevant options work. The options and their default values are
+paragap @Index @Code "@ParaGap"
+paraindent @Index @Code "@ParaIndent"
+@ID @OneRow @Code {
+"@ParaGap { 1.30vx }"
+"@ParaIndent { 2.00f }"
+"@DisplayGap { 1.00v }"
+}
+The values are lengths (Section {@NumberOf objects}), except that
+for reasons beyond our scope @Code "@ParaGap" must be a length with
+an @Code "x" appended, as shown. The @Code "@ParaGap" option determines
+how much vertical space will be
+inserted by @Code "@PP" and {@Code "@LP"}. The default value,
+{@Code "1.30vx"}, is 30% more than the normal inter-line spacing;
+to get no extra spacing, change it to {@Code "1.00vx"}. The
+@Code "@ParaIndent" option determines the width of the indent produced
+by {@Code "@PP"}, and its default value is twice the current font
+size. The @Code "@DisplayGap" option determines the amount of vertical
+space inserted by {@Code "@DP"}, as well as the vertical space before
+and after displays.
+@End @Section
diff --git a/doc/user/bas_par2 b/doc/user/bas_par2
new file mode 100644
index 0000000..51f674c
--- /dev/null
+++ b/doc/user/bas_par2
@@ -0,0 +1,261 @@
+@Section
+ @Title { Paragraph breaking }
+ @Tag { paras }
+@Begin
+@PP
+@I { Paragraph breaking } is the process of
+paragraph.breaking @Index { paragraph breaking }
+inserting line breaks into praragraphs at places appropriate to the column
+width. Lout works out suitable column widths and performs paragraph
+breaking automatically, finding an `optimal' break with the method
+used by the @TeX
+tex.paragraph @SubIndex { paragraph breaking }
+system. It offers nine styles of paragraph breaking,
+which we will explore with the aid of this example:
+@ID @OneRow @Code {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}
+Changing the paragraph breaking style is similar to changing the font,
+colour, or language, and is done using the @Code "@Break" symbol:
+break. @Index @Code "@Break"
+@ID @Code "ragged @Break ..."
+This example causes every paragraph in the following object to be
+broken using the @Code ragged style, of which more below.
+@PP
+The first two of the nine styles perform @I { line adjustment }, which
+line.adjustment @Index { line adjustment }
+means that they enlarge the spaces between the objects making up each
+line so as to fill the lines completely:
+@IndentedList
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "adjust @Break ..." }
+ B { adjust @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "outdent @Break ..." }
+ B { outdent @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@EndList
+The @Code adjust style is frequently used, so it has been chosen as the
+default style. Outdenting adds a small space at the start of each line
+outdent. @Index { outdented paragraphs }
+except the first, and is much less common.
+@PP
+The next four styles do not adjust lines, leaving the paragraph
+ragged. @Index { @Code ragged paragraph breaking style }
+cragged. @Index { @Code cragged paragraph breaking style }
+rragged. @Index { @Code rragged paragraph breaking style }
+oragged. @Index { @Code oragged paragraph breaking style }
+{@I ragged}:
+@IndentedList
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "ragged @Break ..." }
+ B { ragged @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "cragged @Break ..." }
+ B { cragged @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "rragged @Break ..." }
+ B { rragged @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "oragged @Break ..." }
+ B { oragged @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@EndList
+The paragraph is broken in the same places as @Code adjust breaks it,
+but the resulting lines are left-justified, centred, or right-justified
+with respect to each other, rather than adjusted; @Code "oragged"
+is like @Code "outdent" except the resulting lines are not adjusted.
+@PP
+If you have a few words that must be kept together on one line, the
+preventing. @Index { preventing line breaks }
+keeping. @Index { keeping things on one line }
+recommended way is to separate them by an @Code "~" symbol:
+@ID @Code "According to Prof.~Jones, the effect of ..."
+It's best not to bother about this until you actually get a bad line
+break, since chances are good that the words will fall on one line anyway.
+@PP
+The last three styles differ from the first five in breaking the
+paragraph at the points where it is broken in the original input:
+lines. @Index { @Code lines paragraph breaking style }
+clines. @Index { @Code clines paragraph breaking style }
+rlines. @Index { @Code rlines paragraph breaking style }
+@IndentedList
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "lines @Break ..." }
+ B { lines @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "clines @Break ..." }
+ B { clines @Break {
+It @PageMark clines is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@LI @Tab
+ @Fmta { @Col 6c @Wide @Code A ! @Col 7c @Wide B }
+{
+@Rowa
+ A { "rlines @Break ..." }
+ B { rlines @Break {
+It is a truth universally
+acknowledged, that a single man
+in possession of a good fortune,
+must be in want of a wife.
+}}
+}
+@EndList
+The lines are left-justified, centred, or right-justified with respect
+to each other in the same way as for the ragged styles.
+@PP
+When using the @Code lines style, there are some fine points concerning
+the proper use of white space. Consider this example:
+@ID @OneRow @Code {
+"@IndentedDisplay lines @Break @I {"
+"Teach me to hear Mermaides singing,"
+"Or to keep off envies stinging,"
+" And finde"
+" What winde"
+"Serves to'advance an honest minde."
+"}"
+}
+The result is the indented display
+@IndentedDisplay lines @Break @I {
+Teach me to hear Mermaides singing,
+Or to keep off envies stinging,
+ And finde
+ What winde
+Serves to'advance an honest minde.
+}
+This style is the only one for which it is useful to indent individual
+lines in the input; as the result shows, such indents will be
+respected, as will blank lines. However, Lout's rule that only white
+space separating objects affects the result (Section {@NumberOf spaces})
+still holds, which means that indenting the first line is not
+effective:
+@ID @OneRow @Code {
+"@IndentedDisplay lines @Break @I {"
+" And finde"
+" What winde"
+"Serves to'advance an honest minde."
+"}"
+}
+produces
+@IndentedDisplay lines @Break @I {
+ And finde
+ What winde
+Serves to'advance an honest minde.
+}
+This may seem awkward at first, but actually it is extremely convenient
+because you don't have to worry about whether the first line of the
+paragraph should appear on a new line as above, or immediately after
+the opening brace: space at that point does not separate two objects,
+so it has no effect. The indent can be obtained by
+starting the first line with an empty object (Section {@NumberOf empty}):
+@ID @OneRow @Code {
+"@IndentedDisplay lines @Break @I {"
+"{} And finde"
+" What winde"
+"Serves to'advance an honest minde."
+"}"
+}
+The result is
+@IndentedDisplay lines @Break @I {
+{} And finde
+ What winde
+Serves to'advance an honest minde.
+}
+as desired. To set the entire document in a paragraph breaking style other
+than {@Code "adjust"}, you need to change the @Code "@InitialBreak" option,
+as explained at the end of Section {@NumberOf linespace}.
+@PP
+Some people don't like to see the first line of a paragraph alone at the
+widows @Index { widow lines }
+orphans @Index { orphan lines }
+unbreakablefirst. @Index { @Code unbreakablefirst }
+unbreakablelast. @Index { @Code unbreakablelast }
+foot of a page or column (the rest appearing on the next page). You can
+instruct Lout not to allow this with
+@ID @Code "unbreakablefirst @Break ..."
+meaning that the first line cannot be broken off from the rest of the
+paragraph. Similarly,
+@ID @Code "unbreakablelast @Break ..."
+instructs Lout to prevent the last line of a paragraph from appearing
+alone at the top of a page or column. These features would probably be
+invoked in the @Code "@InitialBreak" option, like this:
+@ID
+@Code "@InitialBreak { unbreakablefirst unbreakablelast hyphen adjust 1.2fx }"
+You can turn them off with @Code "breakablefirst @Break"
+and @Code "breakablelast @Break". In both cases Lout makes it happen by
+breaking at the previous place, either between paragraphs or two lines from
+the end of a paragraph. Alternatively, both features are compatible with
+Lout's @Code "@OptimizePages" option, which will optimize the overall page
+layout of the document subject to these requirements.
+@End @Section
diff --git a/doc/user/bas_spac b/doc/user/bas_spac
new file mode 100644
index 0000000..b7546c2
--- /dev/null
+++ b/doc/user/bas_spac
@@ -0,0 +1,103 @@
+@Section
+ @Title { Spaces and braces }
+ @Tag { spaces }
+@Begin
+@PP
+Every symbol in Lout either consists entirely of letters ({@Code "@"}
+symbols. @Index { symbols, makeup of }
+is considered to be a letter) or entirely of punctuation characters. Here
+are some examples of each type:
+@ID @OneRow @Tab
+ @Fmta { @Col @I @CC A ! @Col @I @CC B }
+ @Fmtb { @Col @Code @CC A ! @Col @Code @CC B }
+{
+@Rowa A { From letters } B { From punctuation }
+@Rowb A { "@PP" } B { "{" }
+@Rowb A { "margin" } B { "}" }
+}
+Now if two symbols made from letters are run together like this:
+@ID {
+@Code "@CurveBox@I Hello" &8ct @I (wrong!)
+}
+Lout will take this to mean one word or symbol called {@Code "@CurveBox@I"},
+which is wrong. In the same way, a letter-type symbol cannot be run
+together with a word. However, punctuation-type symbols can be run together
+with anything. For example, in
+@ID @Code "@CurveBox{ Hello @I { world }}."
+Lout understands that @Code "@CurveBox" and @Code "{"
+# }
+are separate, and it also sorts out
+# {{
+@Code "}}." into two right brace symbols and a full stop. It might
+seem strange to treat punctuation and letters so differently,
+but computer programming languages have done it like this for
+many years, and it works well. This is the first use for
+spaces. @Index { spaces, significance of }
+spaces: to separate letter-type symbols from each other and from words.
+@PP
+To see the second use for spaces, consider two words side by side:
+@ID @Code "Hello world"
+We want this to produce Hello world, so a space between two words in
+the input must mean a space between them in the result. Apply the
+golden rule (where you can put one object, you can put any object) and
+you get this: @I { a space between two objects in the input produces
+a space between them in the result }. For example,
+@ID @Code "@CurveBox Hello @CurveBox world"
+produces
+@ID { @CurveBox Hello @CurveBox world }
+The space between the two objects @Code "@CurveBox Hello" and
+@Code "@CurveBox world" appears between them in the result; the other
+two spaces do not separate objects so do not appear in the result.
+@PP
+Two objects may be separated by a number of spaces other than one. If
+they are separated by no spaces, they will appear immediately adjacent
+in the result; if separated by two spaces, they will appear two spaces
+apart; and so on. In English it is correct to leave two spaces between
+the end of one sentence and the beginning of the next, for example. See
+Section {@NumberOf white} for two alternative ways to interpret white
+space in Lout.
+@PP
+Occasionally the two uses for spaces conflict. For example, to produce
+@ID { { @CurveBox Hello }{ @CurveBox world } }
+we need to have no spaces between the two objects, but then @Code "Hello"
+and the following @Code "@CurveBox" would be run together, which will
+not work. The solution is to use braces:
+@ID @Code "{ @CurveBox Hello }{ @CurveBox world }"
+None of the six spaces in this example lie between two objects.
+@PP
+However, the main use of braces is to inform Lout that the object
+within them is to be kept together, so that any nearby symbols are to
+apply to all of it. For example, leaving the braces out of
+@Code "@I { Hello world }" would mean that @Code "@I" applies only to
+{@Code "Hello"}.
+@PP
+When an object-consuming symbol like @Code "@I" is followed by an
+braces. @Index { braces, effect of }
+object enclosed in braces, that is the object consumed. For example,
+@ID @Code "This is @I { absolutely necessary }, since otherwise ..."
+produces
+@ID { This is @I { absolutely necessary }, since otherwise ... }
+with the object @Code "absolutely necessary" italicized, but not the
+following comma. If there are no braces, the object consumed is
+everything up to the next object-separating space:
+@ID @Code "This is @I necessary, since otherwise ..."
+produces
+@ID { This is @I necessary, since otherwise ... }
+with an undesirable italic comma. In practice, this means you can
+avoid braces only when italicizing a single word with no punctuation
+attached.
+@PP
+One common pitfall is to use unnecessary braces, like this:
+@ID {
+@Code "@I { @CurveBox { Hello world } }" &8ct @I (bad!)
+}
+Another is to think that all spaces produce space in the result, and so
+write
+@ID {
+@Code "@I{@CurveBox{Hello world}}" &8ct @I (worse!)
+}
+Use braces only when necessary, and add extra spaces where they do not
+separate objects, and your documents will be far easier to read while
+you are working on them. Don't be fooled by the argument that says it
+doesn't matter because it doesn't affect the final printed result.
+@End @Section
diff --git a/doc/user/bas_star b/doc/user/bas_star
new file mode 100644
index 0000000..ef65eb6
--- /dev/null
+++ b/doc/user/bas_star
@@ -0,0 +1,129 @@
+@Section
+ @Title { Getting started }
+ @Tag { start }
+@Begin
+@PP
+Suppose you want to produce the following little document:
+@CD @Box margin { 1.3c } 7.0c @Wide 9c @High {
+@Display @Heading { Introduction by W. J. Harvey }
+harvey.w.j @Index { Harvey, W. J. }
+For Virginia Woolf, @I Middlemarch was `the magnificent book
+which for all its imperfections is one of the few English novels
+written for grown-up people.'
+@PP
+She was, no doubt, thinking of George Eliot's unblinking but
+eliot.g @Index { Eliot, George }
+compassionate delineation of her characters, of the subtlety of
+psychological analysis and the maturity of moral comment which
+underlie this complex and varied novel of English provincial
+life in the early nineteenth century.
+}
+Unlike word processing and desktop publishing systems, with Lout you
+cannot see and edit your document on the screen in this finished
+form. Instead, you edit an ordinary text file, in which your text is
+augmented with symbols that mark out the headings, paragraphs, and so
+on. Although it would be nice to be able to see and edit the finished
+form, working with a text file and symbols does have some compensating
+advantages.
+@PP
+The first step in producing your introduction to @I Middlemarch is to
+use the text editor of your choice to construct this text file:
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"@Display @Heading { Introduction by W. J. Harvey }"
+"For Virginia Woolf, @I Middlemarch was `the magnificent book which for all its"
+"imperfections is one of the few English novels written for grown-up people.'"
+"@PP"
+"She was, no doubt, thinking of George Eliot's unblinking but compassionate"
+"delineation of her characters, of the subtlety of psychological analysis and"
+"the maturity of moral comment which underlie this complex and varied novel"
+"of English provincial life in the early nineteenth century."
+"@End @Text"
+}
+Comparing this with the finished form, it's easy to guess that
+@Code "@I" is a symbol that causes the following thing to be printed
+in italics, and that @Code "@PP" starts a new paragraph. The other
+symbols are not much harder.
+@PP
+@Code "@SysInclude { doc }" instructs Lout to read a @I { setup file }
+called {@Code "doc"}, in which the symbols are defined. Setup files
+are the subject of Chapter {@NumberOf changes}, but you can go a long
+way without worrying about them. @Code "@Doc @Text @Begin" and
+@Code "@End @Text" have no visible effect, but they must bracket the
+document as a whole. Again, you don't have to know what they are for.
+@PP
+That explains everything except the part that produces the heading. It's
+an interesting glimpse of the way that Lout's symbols cooperate with
+each other:
+@ID @Code "@Display @Heading { Introduction by W. J. Harvey }"
+The @Code "@Display" symbol does the centring and leaves space above
+and below, while @Code "@Heading" switches to a bold font. The braces
+group the words of the heading together so that these symbols apply to
+all of it; without them they would apply to just the first word. All
+this is explained in detail in Sections {@NumberOf objects}
+and {@NumberOf spaces}.
+@PP
+Once the file is ready, the next step is to get it processed by the
+Basser Lout interpreter. If the file's name is {@Code "intro"},
+the command for this on the Unix
+@FootNote { Unix is a trademark. }
+operating system is
+@ID @Code "lout intro > intro.ps"
+The output is the PostScript
+@FootNote { PostScript is a trademark of Adobe Systems, Inc. }
+file {@Code "intro.ps"}, which is suitable for printing on many laser
+printers and other devices. There are programs that show you the
+result on your screen as well, although you won't be able to edit it
+there. You can also get plain text output (Section {@NumberOf plain})
+and PDF output.
+@PP
+There are a few points that often confuse people as they begin, so we'll
+treat them briefly now with pointers to later sections where they are
+done properly.
+@PP
+Some characters are symbols that produce special effects -- for
+example, @Code "{" and @Code "}" produce grouping -- and to turn off
+these effects the characters must be enclosed in double quotes: @Code
+"\"{\"" produces "{". The complete set of these special characters is
+@ID @Code "/ | & { } # @ ^ ~ \\ \""
+Section {@NumberOf characters} treats unusual characters in full detail.
+@PP
+Symbols like @Code "@Doc" and @Code "@Text" must be separated from
+each other by one or more spaces, otherwise Lout will think they are part
+of one symbol. See Section {@NumberOf spaces} for the details.
+@PP
+People familiar with other systems might expect that leaving a blank line would
+cause Lout to start a new paragraph; but this is not so, you must use a
+paragraph symbol. Lout will ordinarily take notice of how many spaces you type
+between words (Section {@NumberOf spaces}), but it will mimic the spacing rules
+of two other systems, troff and @TeX, if you prefer (Section {@NumberOf white}).
+@PP
+When Lout runs, you might see some error messages beginning with
+error.messages @Index { error messages }
+`unresolved cross reference' -- not on file @Code "intro" above, but on
+more complicated ones (anything with a footnote, for example). These
+just mean that you have to run the @Code "lout" command again to finish off
+the complicated things (Section {@NumberOf cross}), and they will gradually
+go away. Of course, if you see error messages about missing braces, unknown
+symbols, and so on, you need to revise your file. Lout will tell you the
+line number of the problem, and how far along the line it is.
+@PP
+@BI { WARNING: } Lout allows documents to cause arbitrary system commands
+to be executed. These typically do useful things such as format computer
+programs and uncompress graphics files, but it is possible for a
+malicious person to send you a document which includes a command to delete
+all your files, send abusive mail to the President of the United States in
+your name, etc. You can protect yourself against this possibility by using
+the `safe execution' flag:
+@ID @Code "lout -S suspect.document > out.ps"
+Then no system commands will be executed; instead, Lout will print them so
+that you can confirm for yourself that they are safe before running again
+without the flag. These system commands are Lout's only potentially unsafe
+features, but you also need to worry about whether the resulting PostScript
+file contains malicious code, since the document may direct Lout to include
+arbitrary PostScript code in the output. The safe execution of PostScript
+programs is a matter for PostScript interpreters, not for Lout. For example,
+the popular Ghostview program has a @Code "-safer" command line option,
+which is rumoured to disable unsafe PostScript features.
+@End @Section
diff --git a/doc/user/bas_supe b/doc/user/bas_supe
new file mode 100644
index 0000000..40faf92
--- /dev/null
+++ b/doc/user/bas_supe
@@ -0,0 +1,17 @@
+@Section
+ @Title { Superscripts and subscripts }
+ @Tag { super }
+@Begin
+@PP
+There are @Code "@Sup" and @Code "@Sub" symbols for producing
+superscripts and subscripts:
+@ID @Code "2 @Sup nd"
+produces
+@ID { 2 @Sup nd }
+and the @Code "@Sub" symbol works in a similar way. These symbols
+are probably never required in English language text, since the
+only uses for them are in footnotes, which produce the superscript
+automatically, and equations, which have their own versions of these
+symbols. Both symbols have a @Code "gap" option which determines the
+vertical spacing.
+@End @Section
diff --git a/doc/user/bas_unde b/doc/user/bas_unde
new file mode 100644
index 0000000..9f7ea94
--- /dev/null
+++ b/doc/user/bas_unde
@@ -0,0 +1,27 @@
+@Section
+ @Title { Underlining }
+ @Tag { underlining }
+@Begin
+@PP
+The @Code "@Underline" symbol underlines the following object:
+underline.sym @Index @Code "@Underline"
+@ID @OneRow @Code {
+"This little paragraph of text will have"
+"@Underline { three underlined words } in it."
+}
+produces
+@ID @OneRow 1.6i @Wide {
+This little paragraph of text will have
+@Underline { three underlined words } in it.
+}
+The underlining is continuous unless a line break intervenes. You
+can't use this symbol to underline an arbitrary object: it is carefully
+designed to produce high-quality underlining of single words and
+parts of paragraphs, and it works only for those objects.
+@PP
+Each font contains information about how words in that font should be
+underlined: how far below the baseline the line should be drawn, and how
+thick. The @Code "@Underline" symbol uses this information; the font
+it bases its underlining on is the font of the first object underlined
+if it is a word, or else the font of the enclosing paragraph.
+@End @Section
diff --git a/doc/user/bas_verb b/doc/user/bas_verb
new file mode 100644
index 0000000..6da835a
--- /dev/null
+++ b/doc/user/bas_verb
@@ -0,0 +1,49 @@
+@Section
+ @Title { Verbatim text }
+ @Tag { verbatim }
+@Begin
+@PP
+The @Code "@Verbatim" symbol
+@FootNote { Prior to Version 3.13 the @Code "@Verbatim" symbol was
+implemented in a way that restricted its availability to Unix
+systems only. This restriction no longer applies. }
+prints the following object exactly as
+verbatim.sym @Index @Code "@Verbatim"
+it appears in the input file. All special meanings for characters,
+symbols, etc. are turned off; there is one result line for
+each input line. For example,
+@ID @Code @Verbatim {
+@IndentedDisplay @Verbatim {
+A line of "verbatim" text
+Another line, with a \ character
+}
+}
+has result
+@IndentedDisplay @Verbatim {
+A line of "verbatim" text
+Another line, with a \ character
+}
+Use @Code "@F @Verbatim { ... }" to get the result in a fixed-width font.
+@PP
+If the verbatim text contains @Code "{" or @Code "}" characters, then
+they should either be balanced or else you need to use the alternative
+form
+@ID @Code {
+"@Verbatim @Begin"
+"..."
+"@End @Verbatim"
+}
+so that there is no doubt about where the verbatim text ends. Although
+we have said that there are no special meanings, there is one exception
+to this rule: @Code "@Include" and @Code "@SysInclude" commands are
+recognized, allowing all or part of the verbatim text to come from some
+other file.
+@PP
+Occasionally the first line of some verbatim text begins with some
+spaces that have to be preserved. This is a problem for @Code "@Verbatim"
+because it ignores all white spaces following the opening brace and
+all white spaces preceding the closing brace. However, the alternative
+@Code "@RawVerbatim" symbol stops ignoring white spaces at the opening
+as soon as a newline character is reached; in other words, it will
+preserve all white spaces following the first newline.
+@End @Section
diff --git a/doc/user/bgr b/doc/user/bgr
new file mode 100644
index 0000000..9452ff0
--- /dev/null
+++ b/doc/user/bgr
@@ -0,0 +1,17 @@
+@Chapter
+ @Title { Basic Graphics }
+ @Tag { graphics }
+@Begin
+@LP
+This chapter introduces some basic graphics symbols for colour, rotation,
+scaling, and included illustrations. These are all from the standard
+BasicLayout package, so no @Code "@SysInclude" line is needed to
+get them.
+@BeginSections
+@Include { bgr_colo }
+@Include { bgr_boxs }
+@Include { bgr_rota }
+@Include { bgr_scal }
+@Include { bgr_incl }
+@EndSections
+@End @Chapter
diff --git a/doc/user/bgr_boxs b/doc/user/bgr_boxs
new file mode 100644
index 0000000..39c6460
--- /dev/null
+++ b/doc/user/bgr_boxs
@@ -0,0 +1,121 @@
+@Section
+ @Title { Boxes and rules }
+ @Tag { boxes }
+@Begin
+@PP
+The @Code "@Box" symbol causes the following object to be enclosed in a
+box. @Index @Code "@Box"
+box:
+@ID @OneRow @Code {
+"@QuotedDisplay @Box {"
+"@CentredDisplay @Heading Cheating"
+"The Department uses assignments ... of that student alone."
+"}"
+}
+The result of this is
+@QuotedDisplay @Box {
+@CentredDisplay @Heading Cheating
+The Department uses assignments both as a teaching device and as a
+major component of its assessment of each student. It therefore
+requires that all programs, exercises etc. handed in bearing an
+individual student's name be the work of that student alone.
+}
+showing that a box may enclose an arbitrarily complicated object.
+@PP
+The @Code "@Box" symbol has a @Code margin option which determines the
+margin between the box and what it encloses. For example,
+@ID @OneRow @Code {
+"@Box"
+" margin { 0.1c }"
+"{}"
+}
+requests a box with a 0.1 centimetre margin enclosing an empty object,
+so the result is a square whose width and height are 0.2 centimetres:
+@ID @Box margin { 0.1c } {}
+If the @Code "margin" option is omitted, it is assigned the default
+value {@Code "0.3f"}, which means 0.3 times the current font size. It
+is very useful to tie the margin to the font size in this way, because
+large headings (in overhead transparencies, say) need large margins.
+@PP
+There is a @Code "linewidth" option which determines the width
+(thickness) of the line drawn around the boundary of the box:
+@ID @OneRow @Code {
+"@Box"
+" linewidth { 0.1c }"
+"{ Hello world }"
+}
+produces
+@ID @Code {
+@Box
+ linewidth { 0.1c }
+{ Hello world }
+}
+Lout does not take the line width into account when working out how
+large everything is: as far as Lout is concerned, the line always
+has width zero. If you draw really thick lines you might need a larger
+margin and more space near the box. The default value of @Code linewidth
+is empty, which means to use whatever width the PostScript interpreter
+in your output device thinks is a good default value.
+@PP
+There is also a @Code "paint" option which paints a background of the
+nominated colour:
+@ID @Code "@Box paint { grey } WARNING!"
+has result
+@ID @Box paint { grey } WARNING!
+This is quite different from {@Code "grey @Colour @Box WARNING!"},
+which produces
+@ID grey @Colour @Box WARNING!
+The @Code "paint" option may be given any colour from the list in
+Section {@NumberOf colour}; its default value is {@Code "none"}, which
+is a special value (not a colour) which means no painting. White paint
+comes into its own inside painted boxes:
+@ID @Code "@Box paint { nochange } white @Colour { Hello world }"
+produces a box painted in whatever colour we happen to be using at
+the moment, with white text inside:
+@ID @Box paint { nochange } white @Colour { Hello world }
+This works because the box is painted before the object it encloses
+is drawn on the page.
+@PP
+There are @Code "@CurveBox" and @Code "@ShadowBox" symbols that
+curvebox. @Index @Code "@CurveBox"
+shadowbox. @Index @Code "@ShadowBox"
+produce other kinds of boxes:
+@CD @Tab
+ @Fmta { @Col A ! @Col ! @Col B }
+{
+@Rowa
+ A { @CurveBox { A curve box } }
+ B { @ShadowBox { A shadow box } }
+}
+These also have @Code "margin" and @Code "paint" options, and
+@Code "@ShadowBox" has a @Code "shadow" option which determines
+the thickness of the shadow (its default value is {@Code "0.2f"}).
+@PP
+Boxes are quite at home inside paragraphs, as @Box { a box },
+@CurveBox { a curve box }, and @ShadowBox { a shadow box }
+show. Simply proceed as usual:
+@ID @Code "... paragraphs, as @Box { a box }, @CurveBox { a curve box }, ..."
+Boxes within paragraphs are never broken across two lines.
+@PP
+There are two symbols for producing horizontal rules. @Code "@FullWidthRule"
+fullwidthrule. @Index @Code "@FullWidthRule"
+rules. @Index rules
+produces a rule which occupies the full page (or column) width:
+@DP @FullWidthRule @DP
+More precisely, the rule occupies as much horizontal space as it
+legally can. @Code "@FullWidthRule" produces an object in the usual
+way, so you will need paragraph or display symbols to separate it from
+preceding and following things.
+@PP
+A variant called @Code "@LocalWidthRule" is more timid about zooming
+localwidthrule. @Index @Code "@LocalWidthRule"
+across the whole page:
+@ID @Code {
+"@OddPageTop { { My lovely document @LP @LocalWidthRule } @Right @PageNum }"
+}
+will draw a rule under just the three words. Of course, underlining using
+the @Code "@Underline" symbol might be a better way to do this. Both
+symbols have a @Code "linewidth" option which works like the one for
+boxes described above. In particular, Lout leaves zero space for the
+line, no matter how wide you make it.
+@End @Section
diff --git a/doc/user/bgr_colo b/doc/user/bgr_colo
new file mode 100644
index 0000000..4a48fb9
--- /dev/null
+++ b/doc/user/bgr_colo
@@ -0,0 +1,48 @@
+@Section
+ @Title { Colour }
+ @Tag { colour }
+@Begin
+@PP
+Colour is obtained in much the same way that fonts and language changes
+colour. @Index @Code "@Colour"
+color. @Index @Code "@Color"
+are, using the @Code "@Colour" (or equivalently {@Code "@Color"}) symbol:
+@ID @Code "grey @Colour { Hello, world }"
+produces
+@ID grey @Colour { Hello, world }
+The @Code "@Colour" symbol will accept any of the following colours:
+@QD @HAdjust @Tab
+ vmargin { 0.7vx }
+ hmargin { 0.2c }
+ @Fmta { @Col A @Colour @FilledBox ! @Col @Code A ! @Col !
+ @Col B @Colour @FilledBox ! @Col @Code B ! @Col !
+ @Col C @Colour @FilledBox ! @Col @Code C }
+ @Fmtb { @Col A @Colour @FilledBox ! @Col @Code A ! @Col !
+ @Col B @Colour @FilledBox ! @Col @Code B ! @Col !
+ @Col ! @Col }
+{
+@Rowa A { darkred } B { red } C { lightred }
+@Rowa A { darkgreen } B { green } C { lightgreen }
+@Rowa A { darkblue } B { blue } C { lightblue }
+@Rowa A { darkcyan } B { cyan } C { lightcyan }
+@Rowa A { darkmagenta } B { magenta } C { lightmagenta }
+@Rowa A { darkyellow } B { yellow } C { lightyellow }
+@Rowa A { darkgrey } B { grey } C { lightgrey }
+@Rowa A { darkgray } B { gray } C { lightgray }
+@Rowb A { black } B { white }
+}
+Monochrome output devices will render them as shades of grey. Colouring
+something @Code white makes it invisible, which is sometimes useful.
+@PP
+In addition to the list of colours given above, there is a special
+colour called {@Code nochange} which produces the colour you already
+happen to be using.
+@PP
+Whether or not the colours produced by @Code "@Colour" actually
+correspond with the names depends on the output device; the same
+nominal colour can look quite different on screen and on paper. The
+standard Lout @Code "@SetColour" symbol can provide many more colours
+setcolour. @Index @Code "@SetColour"
+@Cite { $kingston1995lout.expert}, although they must be specified
+using numbers rather than names.
+@End @Section
diff --git a/doc/user/bgr_incl b/doc/user/bgr_incl
new file mode 100644
index 0000000..57ac4a1
--- /dev/null
+++ b/doc/user/bgr_incl
@@ -0,0 +1,47 @@
+@Section
+ @Title { Including an illustration }
+ @Tag { include }
+@Begin
+@PP
+The @Code "@IncludeGraphic" symbol incorporates into a Lout document an
+include.graphic @Index @Code "@IncludeGraphic"
+include.illus @Index { including an illustration }
+illustration (that is, an encapsulated PostScript or EPS file)
+produced by other means. For the opposite process, using Lout to produce
+an illustration for inclusion in some other document, see
+Section {@NumberOf illustrations}.
+@PP
+For example, suppose the encapsulated PostScript file @Code "su_crest.eps"
+contains the University of Sydney crest. Then
+@ID @Code "@IncludeGraphic su_crest.eps"
+produces
+@ID @IncludeGraphic su_crest.eps
+In general, the result produced by @Code "@IncludeGraphic" is an object
+that may be scaled, rotated, made into a display or placed within a
+paragraph, just like any other object. Accolades for this remarkable
+flexibility should go to the PostScript page description language,
+whose extraordinary power makes the provision of this feature in Lout
+almost trivial.
+@PP
+The @Code "@IncludeGraphic" command understands that files ending
+with any of the suffixes {@Code ".gz"}, {@Code "-gz"}, {@Code ".z"},
+{@Code "-z"}, {@Code "_z"}, and {@Code ".Z"} are compressed files,
+and it will uncompress such files using the @Code "gunzip" command
+before including them. The uncompressed version is stored in a file
+called @Code "lout.eps" in the current directory, and removed after
+being copied into the output file.
+@PP
+If you place an included illustration in a line of text, or anywhere
+where you care about its alignment with things on either side of it,
+it will be positioned with its centre at the same height as the
+centre of the letter x. If this is not where you want it, use the
+@Code "@VShift" symbol:
+vshift. @Index @Code "@VShift"
+@ID @Code "... +0.5f @VShift @IncludeGraphic ..."
+prints the illustration half of the current font size higher on the
+page than would otherwise have been the case, and
+@ID @Code "... -0.5f @VShift @IncludeGraphic ..."
+prints it half the current font size lower. Any length (Section
+{@NumberOf objects}) is allowed, and the object following @Code "@VShift"
+may in fact be arbitrary as usual.
+@End @Section
diff --git a/doc/user/bgr_rota b/doc/user/bgr_rota
new file mode 100644
index 0000000..e4bcc72
--- /dev/null
+++ b/doc/user/bgr_rota
@@ -0,0 +1,35 @@
+@Section
+ @Title { Rotation }
+ @Tag { rotation }
+@Begin
+@PP
+The @Code "@Rotate" symbol rotates the following object by any positive
+rotate. @Index @Code "@Rotate"
+or negative angle, measured in degrees:
+@ID @Code "45d @Rotate @Box WARNING!"
+has result
+@ID { 45d @Rotate @Box WARNING! }
+As usual, the object to be rotated may be arbitrary. However, it is
+difficult for Lout to choose appropriate column widths for paragraphs
+inside rotated objects, so if a rotated object contains paragraphs that
+should be broken it is best to define the object's width explicitly,
+using the @Code "@Wide" symbol:
+wide @RawIndex { @Code "@Wide" }
+wide.rotate @SubIndex { with @Code "@Rotate" }
+@ID @OneRow @Code {
+"-90d @Rotate 4.5c @Wide {"
+"Papal initiatives and influence from the crowning of"
+"Charlemagne to the First Crusade"
+"}"
+}
+The result here is
+@ID {
+-90d @Rotate 4.5c @Wide {
+Papal initiatives and influence from the crowning of
+Charlemagne to the First Crusade
+}
+}
+The @Code "@Wide" symbol fixes the width of the following object, in
+this example to the length 4.5 centimetres, which is all Lout needs to
+decide the column widths of any paragraphs within it.
+@End @Section
diff --git a/doc/user/bgr_scal b/doc/user/bgr_scal
new file mode 100644
index 0000000..ad73f4c
--- /dev/null
+++ b/doc/user/bgr_scal
@@ -0,0 +1,53 @@
+@Section
+ @Title { Scaling }
+ @Tag { scaling }
+@Begin
+@PP
+The @Code "@Scale" symbol performs a geometrical scaling of the
+scale. @Index @Code "@Scale"
+following object:
+@ID @Code {
+"0.5 @Scale @Box WARNING!"
+}
+produces
+@ID {
+0.5 @Scale @Box WARNING!
+}
+A scale factor of 0.5 means half the original size, 2.0 means double size,
+and so on. No unit of measurement appears in the scale factor, because
+it makes no sense to have one. As usual, the object to be scaled may be
+arbitrary.
+@PP
+It is also possible to supply two scale factors, in which case the
+first is applied horizontally and the second vertically:
+@ID @Code "{0.5 2.0} @Scale @Box WARNING!"
+has result
+@ID {0.5 2.0} @Scale @Box WARNING!
+Practical uses for this kind of scaling are rare.
+@PP
+If an empty object is given instead of a scale factor, like this:
+@ID @Code "{} @Scale @Box WARNING!"
+the @Code "@Scale" symbol will choose the largest scale factor that
+does not overrun the available horizontal space. It is often possible
+to omit the {@Code "{}"}, since Lout inserts an empty object
+automatically whenever an object is clearly missing (see Section
+{@NumberOf objects}). For example,
+@ID @Code "@QuotedDisplay @Scale @Box WARNING!"
+produces
+@QuotedDisplay @Scale @Box WARNING!
+@Code "@QuotedDisplay" and @Code "@LeftDisplay" go well with this form
+of {@Code "@Scale"}. However, some care is needed because Lout foolishly
+takes no account of the available @I vertical space when choosing the
+scale factor. The chosen scale factor could enlarge the vertical size so
+much that the object no longer fits on the page, with disastrous results.
+@PP
+By using a @Code "@Wide" symbol to restrict the available horizontal
+space, this form of scaling can also be used to scale to a nominated
+width. For example,
+wide @RawIndex { @Code "@Wide" }
+wide.scale @SubIndex { with @Code "@Scale" }
+@ID @Code "5c @Wide @Scale @Box WARNING!"
+produces
+@ID { 5c @Wide @Scale @Box WARNING! }
+which is 5 centimetres wide.
+@End @Section
diff --git a/doc/user/cpp b/doc/user/cpp
new file mode 100644
index 0000000..9b413ed
--- /dev/null
+++ b/doc/user/cpp
@@ -0,0 +1,27 @@
+@Chapter
+ @Title { C and C++ Programs }
+ @Tag { cprint }
+@Begin
+@LP
+This chapter describes how to typeset C and C++ program text using the
+cp. @Index @Code "@CP"
+c. @Index { C++ }
+@Code "@CP" symbol in conjunction with the @Code c2lout filter. The
+@Code "@CP" symbol looks after printing keywords in bold, variables
+in italic, and so on, depending on a style you choose. It does not lay
+out programs in the sense of choosing indenting, it preserves the layout
+you give to the program. From now on, `C' means `C or C++' wherever
+it occurs.
+@PP
+It is possible to simply print out one or more C files; we call this
+@I { stand-alone mode }. Alternatively, the C program text may be printed
+as part of a larger Lout document; we call this @I { embedded mode }.
+@BeginSections
+@Include { cpp_lone }
+@Include { cpp_embe }
+@Include { cpp_chan }
+@Include { cpp_comm }
+@Include { cpp_tabs }
+@Include { cpp_eiff }
+@EndSections
+@End @Chapter
diff --git a/doc/user/cpp_chan b/doc/user/cpp_chan
new file mode 100644
index 0000000..ddedd51
--- /dev/null
+++ b/doc/user/cpp_chan
@@ -0,0 +1,83 @@
+@Section
+ @Title { Changing the default values }
+ @Tag { cpsetup }
+@Begin
+@PP
+We have just seen that the @Code "@CP" symbol has many options for
+changing the appearance of the C text. However, most people would
+not want to have a different style for every C text in their document;
+they want to define the style once at the start, and have all their
+C texts come out in that style without laboriously setting options
+on every @Code "@CP" symbol. This is done by copying the setup file
+and changing it.
+@PP
+For general information about how to make your own setup file, consult
+Section {@NumberOf setup}. The options that determine the default
+values are in the @Code "@CPSetup" @Code "@Use" clause near the end of
+cprint. @Index @Code "@CPSetup"
+the @Code "cpsetup." setup file:
+@ID @Code @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B ! @Col C}
+ @Fmtb { @Col { " #" A } ! @Col { "{" B } ! @Col "}" }
+{
+@Rowa A { "@Use { @CPSetup" }
+@Rowb A { "style" } B { fixed }
+
+@Rowa
+@Rowb A { "fixedfont" } B { Courier }
+@Rowb A { "fixedstrings" } B { Base }
+@Rowb A { "fixedidentifiers" } B { Base }
+@Rowb A { "fixedcomments" } B { Base }
+@Rowb A { "fixedkeywords" } B { Base }
+@Rowb A { "fixednumbers" } B { Base }
+@Rowb A { "fixedoperators" } B { Base }
+@Rowb A { "fixedsize" } B { -1.0p }
+@Rowb A { "fixedline" } B { 1.0vx }
+@Rowb A { "fixedtabin" } B { 8 }
+@Rowb A { "fixedtabout" } B { 8s }
+
+@Rowa
+@Rowb A { "varyingfont" } B { }
+@Rowb A { "varyingstrings" } B { Slope }
+@Rowb A { "varyingidentifiers" } B { Slope }
+@Rowb A { "varyingcomments" } B { Base }
+@Rowb A { "varyingkeywords" } B { Bold }
+@Rowb A { "varyingnumbers" } B { Base }
+@Rowb A { "varyingoperators" } B { Base }
+@Rowb A { "varyingsize" } B { 1.0f }
+@Rowb A { "varyingline" } B { 1.0vx }
+@Rowb A { "varyingtabin" } B { 8 }
+@Rowb A { "varyingtabout" } B { 3f }
+
+@Rowa
+@Rowb A { "symbolfont" } B { }
+@Rowb A { "symbolstrings" } B { Slope }
+@Rowb A { "symbolidentifiers" } B { Slope }
+@Rowb A { "symbolcomments" } B { Base }
+@Rowb A { "symbolkeywords" } B { Bold }
+@Rowb A { "symbolnumbers" } B { Base }
+@Rowb A { "symboloperators" } B { Base }
+@Rowb A { "symbolsize" } B { 1.0f }
+@Rowb A { "symbolline" } B { 1.0vx }
+@Rowb A { "symboltabin" } B { 8 }
+@Rowb A { "symboltabout" } B { 3f }
+
+@Rowa A { "}" }
+}
+These show the default font families, font faces, font sizes, line
+spacings, and tab settings in force for the three styles, and also that
+the default style is {@Code "fixed"}. Notice that the font family name
+for @Code "fixed" style is {@Code "Courier"}, but for the other styles is
+empty. This causes the @Code "fixed" style to always switch to Courier,
+and the other styles to use the same font family as in the surrounding
+document.
+@PP
+To change a default value, delete the preceding @Code "#" and change the
+part between braces. For example, suppose you are happy with @Code "fixed"
+except that you want bold keywords. Then one line needs to be changed, to
+@ID @Code "fixedkeywords { Bold }"
+Or suppose you like @Code "varying" as it stands, but would like it to be
+the default style rather than {@Code "fixed"}. Again, only one line needs
+to be changed, to {@Code "style { varying }"}.
+@End @Section
diff --git a/doc/user/cpp_comm b/doc/user/cpp_comm
new file mode 100644
index 0000000..f877c06
--- /dev/null
+++ b/doc/user/cpp_comm
@@ -0,0 +1,20 @@
+@Section
+ @Title { Lout inside C comments }
+ @Tag { cpcomm }
+@Begin
+@PP
+It is possible to embed Lout text inside C and C++ comments, by
+starting off the comment with an @Code "@" character. The entire
+comment after the @Code "@" character should be Lout text. For
+example, to force Lout to start a new page at some point within a C
+program, place
+@ID @Code "/*@ @NP */"
+at that point. Or you could make a heading like this:
+@ID @Code "/*@ @Display @Heading { treeprint() } */"
+Other possible uses for this feature include index entries and margin
+notes. Incredible as it may seem, you can even write
+@ID @Code "/*@ @CD @Heading { Function @CP { treeprint() } } */"
+with a @Code "@CP" symbol and some C code inside the Lout code
+inside the C code. You probably can't go further, however, since
+that would require a C comment inside a C comment.
+@End @Section
diff --git a/doc/user/cpp_eiff b/doc/user/cpp_eiff
new file mode 100644
index 0000000..d0ec6df
--- /dev/null
+++ b/doc/user/cpp_eiff
@@ -0,0 +1,42 @@
+@Section
+ @Title { Eiffel program printing }
+ @Tag { eiffel }
+@Begin
+@PP
+There is an @Code "@Eiffel" symbol for typesetting Eiffel programs
+in conjuction with a filter called {@Code "eif2lout"}. Apart from
+the change of language, everything is identical to C printing. The
+file and symbol names are different, of course:
+@ID @OneRow @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { @Code cprint }
+ B { @Code eiffel }
+@Rowa
+ A { @Code c2lout }
+ B { @Code eif2lout }
+@Rowa
+ A { @Code "@CP" }
+ B { @Code "@Eiffel" }
+@Rowa
+ A { @Code "@CPSetup" }
+ B { @Code "@EiffelSetup" }
+}
+but everything works in an exactly analogous way: you place
+@ID @Code "@SysInclude { eiffel }"
+at the top of your document, enclose Eiffel program texts in
+@Code "@Eiffel { ... }", embed Lout into Eiffel using comments
+beginning with {@Code "--@"}, and so on. The default style has been
+changed to {@Code varying}, so as to conform to the style guidelines
+in the standard Eiffel reference @Cite { $meyer1992eiffel }. Some care
+has gone into making this conformance strict; in particular, if you
+enclose identifiers within comments in ` and ', as the style guidelines
+say you should, they will come out in italics; in fact, arbitrary text
+between ` and ' within comments will be set as Eiffel code.
+@PP
+The files needed for Eiffel printing are distributed separately from
+Basser Lout. You can get them from the author's @Code ftp directory
+(see the preface of this guide).
+@End @Section
diff --git a/doc/user/cpp_embe b/doc/user/cpp_embe
new file mode 100644
index 0000000..8ca2dfc
--- /dev/null
+++ b/doc/user/cpp_embe
@@ -0,0 +1,152 @@
+@Section
+ @Title { Embedded mode }
+ @Tag { embedded }
+@Begin
+@PP
+When the C program texts are to be embedded in a larger Lout document,
+the procedure is somewhat different. You need to include the
+@Code "cprint" setup file, like this:
+@ID @OneRow @Code {
+"@SysInclude { cprint }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+This file includes everything needed to set up for C program formatting.
+@PP
+The C parts of the document are enclosed in @Code "@CP { ... }" like this:
+@ID @OneRow @Code {
+"@IndentedDisplay @CP {"
+"#include <stdio.h>"
+""
+"treeprint(p) /* print tree p recursively */"
+"struct tnode *p;"
+"{"
+" if (p != NULL) {"
+" treeprint(p->left);"
+" printf(\"%4d %s\\n\", p->count, p->word);"
+" treeprint(p->right);"
+" }"
+"}"
+"}"
+}
+Although C programs violate the rules of legal Lout input in many ways,
+these rules are suspended by the @Code "@CP" symbol, allowing the C
+text to be incorporated with absolutely no modifications. The result is
+@ID @OneRow @CP {
+#include <stdio.h>
+
+treeprint(p) /* print tree p recursively */
+struct tnode *p;
+{
+ if (p != NULL) {
+ treeprint(p->left);
+ printf("%4d %s\n", p->count, p->word);
+ treeprint(p->right);
+ }
+}
+}
+We have chosen to use the @Code "@IndentedDisplay" symbol from Section
+{@NumberOf displays} to obtain an indented display, but in fact
+@Code "@CP" may appear anywhere at all. When including a C text within
+a paragraph, use @Code "@OneCol @CP { ... }" to prevent it being broken
+across two lines, if desired.
+@PP
+In cases where the C text has unbalanced braces, it is necessary to
+use the alternative form @Code "@CP @Begin ... @End @CP" so that
+Lout does not confuse C braces with Lout braces.
+@PP
+The @Code "@CP" symbol has a @Code "style" option for changing the
+printing style. The default value of @Code "style" is {@Code "fixed"},
+which produces the style shown above. To obtain a varying-width font
+style, use @Code "style { varying }" like this:
+@ID @OneRow @Code {
+"@CP"
+" style { varying }"
+"{"
+"#include <stdio.h>"
+""
+"treeprint(p) /* print tree p recursively */"
+"struct tnode *p;"
+"{"
+" if (p != NULL) {"
+" treeprint(p->left);"
+" printf(\"%4d %s\\n\", p->count, p->word);"
+" treeprint(p->right);"
+" }"
+"}"
+"}"
+}
+The result in this case will be
+@ID @OneRow @CP style { varying }
+{
+#include <stdio.h>
+
+treeprint(p) /* print tree p recursively */
+struct tnode *p;
+{
+ if (p != NULL) {
+ treeprint(p->left);
+ printf("%4d %s\n", p->count, p->word);
+ treeprint(p->right);
+ }
+}
+}
+There is also a third style called @Code "style { symbol }" which is
+similar to @Code "varying" except that it uses characters from the
+Adobe Symbol font to produce a more mathematical-looking result:
+@ID @OneRow @CP style { symbol }
+{
+#include <stdio.h>
+
+treeprint(p) /* print tree p recursively */
+struct tnode *p;
+{
+ if (p != NULL) {
+ treeprint(p->left);
+ printf("%4d %s\n", p->count, p->word);
+ treeprint(p->right);
+ }
+}
+}
+The @Code "@CP" symbol has additional options which allow a finer
+control over the style. Here they all are, with their default values:
+@ID @OneRow @Code {
+"@CP"
+" style { fixed }"
+" font { Courier }"
+" strings { Base }"
+" identifiers { Base }"
+" comments { Base }"
+" keywords { Base }"
+" numbers { Base }"
+" operators { Base }"
+" size { -1.0p }"
+" line { 1.0vx }"
+" tabin { 8 }"
+" tabout { 8s }"
+"{"
+" ..."
+"}"
+}
+We are already familiar with {@Code "style"}. After that comes
+{@Code "font"}, which determines the font family to use, followed
+by six options giving the particular faces within that family in which to
+print C strings, identifiers, comments, keywords, numbers, and
+operators. {@Code "Base"} means the basic face; other commonly available
+choices are {@Code "Slope"} and {@Code "Bold"}. These options may all be
+set to different faces if desired. The default values shown are correct
+for @Code "style { fixed }" only; the other styles have other defaults
+(Section {@NumberOf cpsetup}).
+@PP
+The @Code "size" option is the font size to use, and @Code "line" is the
+inter-line spacing. The default values specify that @Code "size" is
+to be one point smaller than in the surrounding document; this was done
+to compensate for Courier's relatively large appearance compared
+to other fonts of the same nominal size. Again, these defaults are
+different for different values of {@Code "style"}.
+@PP
+The @Code "tabin" and @Code "tabout" options are the subject of
+Section {@NumberOf tabs}.
+@End @Section
diff --git a/doc/user/cpp_lone b/doc/user/cpp_lone
new file mode 100644
index 0000000..8d8e367
--- /dev/null
+++ b/doc/user/cpp_lone
@@ -0,0 +1,36 @@
+@Section
+ @Title { Stand-alone mode }
+ @Tag { alone }
+@Begin
+@PP
+Printing of C files in stand-alone mode is accomplished by the following
+c2lout @Index { @Code "c2lout" filter }
+Unix pipeline:
+@ID @Code "c2lout options C-files | lout -s > out.ps"
+As usual with Lout, the output will be a PostScript file. Each input
+file will begin on a new page of the output, starting with its name
+in bold type. The options provide control over the final appearance,
+as follows:
+@WideTaggedList
+@TI { {@Code-p}{@I style} } {
+Select a printing style. Your choices are {@Code -pfixed},
+{@Code -pvarying}, and {@Code -psymbol}, with the default being
+{@Code -pfixed}. Consult Section {@NumberOf embedded} for examples
+of these styles.
+}
+@TI { @Code -n } {
+Do not print file names.
+}
+@TI { {@Code -f}{@I font} } {
+Select a Lout font family. The default is @Code "-fCourier" for
+{@Code -pfixed}, and @Code "-fTimes" for @Code -pvarying and {@Code -psymbol}.
+}
+@TI { {@Code -v}{@I vsize} } {
+Select an inter-line spacing size in Lout units. The default is
+@Code -v1.1fx meaning 1.1 times the font size measured from baseline
+to baseline.
+}
+@EndList
+There are also {@Code -t} and {@Code -T} options for dealing with tab
+characters (Section {@NumberOf tabs}).
+@End @Section
diff --git a/doc/user/cpp_tabs b/doc/user/cpp_tabs
new file mode 100644
index 0000000..1157a51
--- /dev/null
+++ b/doc/user/cpp_tabs
@@ -0,0 +1,62 @@
+@Section
+ @Title { Tab characters }
+ @Tag { tabs }
+@Begin
+@PP
+Tab characters provide a convenient way to indent and align parts of C
+tab.c @Index { tab characters in C programs }
+programs. With care, this alignment can be preserved in the final
+print even with varying-width fonts.
+@PP
+The distance between two tab stops in the input file is by default taken
+to be 8 characters, which is standard for Unix. This can be changed with
+the @Code "tabin" option. For example,
+@ID @Code "@CP tabin { 4 }"
+informs Lout that tab stops occur every 4 characters in the input file.
+@PP
+The distance between two tab stops in the output file (on the printed
+page) is quite a different thing, and it is determined by the value of
+the @Code "tabout" option, which must be a Lout length. For example,
+@ID @Code "@CP tabout { 0.5i }"
+requests that tab stops be placed at half-inch intervals. In other
+words, a distance of one tab stop in the input will be equivalent to a
+distance of half an inch in the output. For example,
+@ID @Code "@CP style { varying } tabout { 3f }"
+might produce the following, where tab characters in the input file
+have been used for indenting and also to align the comments:
+@ID @OneRow @CP style { varying } tabout { 3f } {
+struct tnode { /* the basic node */
+ char *word; /* points to the text */
+ int count; /* number of occurrences */
+ struct tnode *left; /* left child */
+ struct tnode *right; /* right child */
+};
+}
+The value {@Code "3f"} means three times the current font size, and
+it is the default value of @Code "tabout" for the @Code { varying }
+and @Code { symbol } styles (Section {@NumberOf cpsetup}). In a
+12 point font this is 36 points, or half an inch.
+@PP
+If @Code "tabout" is made too small, there is a danger that the
+alignment might fail. For example,
+@ID @Code "@CP style { varying } tabout { 0.2i }"
+produces
+@ID @OneRow @CP style { varying } tabout { 0.2i } {
+struct tnode { /* the basic node */
+ char *word; /* points to the text */
+ int count; /* number of occurrences */
+ struct tnode *left; /* left child */
+ struct tnode *right; /* right child */
+};
+}
+given the same C text as the previous example. The problem here is that
+we are asking for @CP { /* } to appear four tab stops or 0.8 inches
+from the left edge, and yet the material to its left on the line is
+wider than this. This causes @CP { /* } to be shifted further to the
+right than expected, and the alignment is lost. The only solution is
+to increase {@Code "tabout"}.
+@PP
+In stand-alone mode there are @Code "-t" and @Code "-T" options
+equivalent to @Code "tabin" and @Code "tabout" respectively. For
+example, @Code "-T0.5i" produces a half-inch tab width.
+@End @Section
diff --git a/doc/user/dia b/doc/user/dia
new file mode 100644
index 0000000..4029cec
--- /dev/null
+++ b/doc/user/dia
@@ -0,0 +1,46 @@
+@Chapter
+ @Title { Diagrams }
+ @Tag { diagrams }
+@Begin
+@LP
+This chapter describes how to use the @@Diag symbol
+diag. @Index { @@Diag }
+@FootNote {
+Prior to Version 3.09 of Lout, this chapter described a symbol called
+fig. @Index @Code "@Fig"
+{@Code "@Fig"} which was similar to but more primitive than
+{@Code "@Diag"}. For backward compatibility the @Code "@Fig" symbol
+is still available and still works exactly as described in the old
+documentation, but there is no reason to use it in new documents.
+}
+to make diagrams like this one:
+diag. @Index @Code "@Diag"
+@CD @Diag
+ margin { 0.2c }
+{
+-2p @Font
+{ A:: @Ellipse { 25, 39 }
+/0.3c |0.2c B:: @Ellipse { 43 } |0.1c |0.8c E:: @Box outlinestyle {noline} {Problem node}
+/0.3c C:: @Ellipse { 40, 41 } | | D:: @Ellipse paint { lightgrey } {44, 45, 46}
+}
+// @Link from { A } to { B }
+// @Link from { B } to { C }
+// @Link from { B } to { D }
+// @Arrow from { E } to { D }
+}
+@@Diag offers nodes and links, arrows, labels, positioning using coordinates,
+and tree diagrams.
+@BeginSections
+@Include { dia_intr }
+@Include { dia_node }
+@Include { dia_link }
+@Include { dia_tags }
+@Include { dia_labe }
+@Include { dia_posi }
+@Include { dia_tree }
+@Include { dia_erro }
+@Include { dia_defi }
+@Include { dia_geom }
+@Include { dia_summ }
+@EndSections
+@End @Chapter
diff --git a/doc/user/dia_cons b/doc/user/dia_cons
new file mode 100644
index 0000000..569b756
--- /dev/null
+++ b/doc/user/dia_cons
@@ -0,0 +1,7 @@
+@Section
+ @Tag { dia_cons }
+ @Title { Consistency within and between diagrams }
+@Begin
+@PP
+@I { still to do }
+@End @Section
diff --git a/doc/user/dia_defi b/doc/user/dia_defi
new file mode 100644
index 0000000..ed27887
--- /dev/null
+++ b/doc/user/dia_defi
@@ -0,0 +1,361 @@
+@Section
+ @Tag { dia_defi }
+ @Title { Expert usage: defining new shapes }
+@Begin
+@PP
+@@Diag permits you to create your own node outlines and link paths, by
+giving non-standard values to the @Code outline and @Code path
+options. This section shows how to do this for very simple shapes
+only; the following section introduces the large repertoire of geometrical
+symbols that @@Diag offers for helping you create complex shapes.
+@PP
+As explained earlier, a node outline is drawn over its {@I base}, which
+is a rectangle containing the following object plus margins. The base
+defines a coordinate system with the point (0, 0) at the bottom left
+corner, and @Eq { (xsize, ysize) } at the top right:
+@CD @OneRow @Diag {
+@Box
+ nodelabelmargin { 0.3f }
+ blabel { @Eq { ysize } }
+ blabelprox { E }
+ clabel { @Eq { 0 } }
+ clabelprox { E }
+ dlabel { @Eq { xsize } }
+ dlabelprox { N }
+ alabel { @Eq { 0 } }
+ alabelpos { SW }
+ alabelprox { N }
+ paint { lightgrey }
+ outlinestyle { noline }
+ margin { 0c }
+{ 3c @Wide 2c @High }
+//0.5c
+}
+The value of the @Code outline option is a sequence of points defined in
+this coordinate system:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" 0 0"
+" xsize 0"
+" 0 ysize"
+" 0 0"
+" }"
+}
+||7ct
+@Diag {
+@Box
+ margin { 0c }
+ outlinestyle { noline }
+ paint { lightgrey }
+@Node
+ outline {
+ 0 0
+ xsize 0
+ 0 ysize
+ 0 0
+ }
+ margin { 0c }
+{ 3c @Wide 2c @High }
+}
+}
+As shown, the resulting outline is created by joining each point to the
+next with a straight line. It is conventional to proceed anticlockwise
+around the outline, but you may start anywhere.
+@PP
+The {@Code paint}, {@Code outlinestyle}, {@Code outlinedashlength},
+and {@Code outlinewidth} options of @Code "@Node" work for user-defined
+outlines exactly as they do for the standard ones:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" 0 0"
+" xsize 0"
+" 0 ysize"
+" 0 0"
+" }"
+" paint { lightgrey }"
+" outlinestyle { solid dashed }"
+}
+||7ct
+@Diag {
+@Node
+ outline {
+ 0 0
+ xsize 0
+ 0 ysize
+ 0 0
+ }
+ paint { lightgrey }
+ outlinestyle { solid dashed }
+ margin { 0c }
+{ 3c @Wide 2c @High }
+}
+}
+Each line in the outline is one segment for {@Code outlinestyle}.
+@PP
+If two points in an outline are separated by {@Code "[]"}, no line is
+drawn between them, and the outline is treated as two separate,
+disconnected regions when painting.
+@PP
+Two points may also be separated by {@Code "["}{@I point}{@Code "]"},
+where @I point stands for any point. This causes the two points to be
+joined by an arc whose centre is at the given point:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" 0 0"
+" ysize 0"
+" [ 0 0 ]"
+" 0 ysize"
+" 0 0"
+" }"
+}
+||7ct
+@Diag {
+@Box
+ margin { 0c }
+ outlinestyle { noline }
+ paint { lightgrey }
+@Node
+ outline {
+ 0 0
+ ysize 0
+ [ 0 0 ]
+ 0 ysize
+ 0 0
+ }
+ margin { 0c }
+{ 3c @Wide 2c @High }
+}
+}
+The arc will be circular if possible, otherwise it will be part of
+elliptical. @Index { elliptical arcs }
+an ellipse whose axes are oriented horizontally and vertically. The
+arc goes anticlockwise; to get a clockwise arc, use
+{@Code "["}{@I point}{@Code " clockwise]"}.
+@PP
+Two points may be separated by
+@Eq { [x sub 1 ``` y sub 1 ``` x sub 2 ``` y sub 2 & ] }, which requests
+that a Bezier curve be drawn between them with control points
+bezier.curve @Index { Bezier curve }
+@Eq { (x sub 1 & , y sub 1 & ) } and
+@Eq { (x sub 2 & , y sub 2 & ) }:
+@CD @Diag {
+@Node
+ outline {
+ A:: { xsize*0.2 ysize*0.5 }
+ B:: { xsize*0.4 ysize*0.9 }
+ C:: { xsize*0.9 ysize*0.4 }
+ D:: { xsize*0.3 ysize*0.1 }
+ A B C D A
+ }
+ alabelpos { A }
+ blabelpos { B }
+ clabelpos { C }
+ dlabelpos { D }
+ alabelprox { SE }
+ blabelprox { SW }
+ clabelprox { SW }
+ dlabelprox { NW }
+ outlinestyle { cdashed cdashed cdashed noline }
+ alabel { @Eq { ( x sub 0 , y sub 0 ) } }
+ blabel { @Eq { ( x sub 1 , y sub 1 ) } }
+ clabel { @Eq { ( x sub 2 , y sub 2 ) } }
+ dlabel { @Eq { ( x sub 3 , y sub 3 ) } }
+{ 6c @Wide 2c @High }
+//
+@Link
+ path { A [B C] D }
+}
+The curve is attracted toward the control points, without reaching
+them; it is tangent to the straight line from the start point to the
+first control point, and from the second control point to the finishing
+point, and it lies wholly inside the quadrilateral formed by the four
+points. Owing to the author's laziness, dashes and dots do not fit as
+neatly onto Bezier curves as they do onto lines and arcs.
+@PP
+Tags (Section {@NumberOf dia_tags}) may be assigned to points within
+the outline option, like this:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" LR:: { xsize 0 }"
+" UL:: { 0 ysize }"
+" 0 0 LR UL 0 0"
+" }"
+}
+||7ct
+@Diag {
+//0.5f
+@ShowTags @Node
+ outline {
+ LR:: { xsize 0 }
+ UL:: { 0 ysize }
+ 0 0 LR UL 0 0
+ }
+ { 2c @High 3c @Wide }
+}
+}
+The tagged point does not have to lie on the outline, and it
+is not automatically added to the outline. Once defined, a
+tag stands for a point in the usual way; it may be used later in the
+outline, as was done above, relabelled, and so on, exactly like the tags
+of the standard nodes.
+@PP
+Once a point has been tagged, a @I direction may be associated
+with it, to inform @@Diag which way the outline or
+link path is going at that point. The standard outlines have directions:
+@ID {
+@Code {
+"@Ellipse { 3c @Wide 1c @High }"
+}
+||7ct
+@Diag {
+//0.5f
+@ShowTags @ShowDirections @Ellipse { 3c @Wide 1c @High }
+}
+}
+@Code CTR has no direction. If available, direction information
+is used when placing labels, in the proximity step (by {@Code above}, for
+example) and in the angle step if the label is aligned, perpendicular,
+parallel, or antiparallel. A direction is given using the
+@Code ":<" symbol within an outline:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" LR:: { xsize 0 }"
+" LR:< 0d"
+" UL:: { 0 ysize }"
+" UL:< 270d"
+" 0 0 LR UL 0 0"
+" }"
+}
+||7ct
+@Diag {
+//0.5f
+@ShowTags @ShowDirections @Node
+ outline {
+ LR:: { xsize 0 }
+ LR:< 0d
+ UL:: { 0 ysize }
+ UL:< 270d
+ 0 0 LR UL 0 0
+ }
+ { 2c @High 3c @Wide }
+}
+}
+It is often helpful when creating outlines to check where the tagged
+points and directions really are, by printing them out as is done
+above. For this there is a @Code "@ShowTags" symbol whose result is
+the following (arbitrary) object with its tagged points visible, and
+a @Code "@ShowDirections" symbol which works similarly and shows the
+directions. The diagram above was printed using
+{@Code "@ShowTags @ShowDirections @Node ..."}. There is also a
+@Code "@ShowPoints" symbol which is like @Code "@ShowTags" except
+that it omits the tags, just placing circles on the points.
+@PP
+Link paths are similar to node outlines, created
+using the @Code path option of @Code "@Link" instead of the
+@Code outline option of {@Code "@Node"}. The major difference is that
+links have no base, so @Code xsize and @Code ysize cannot be
+used. Indeed, even @Code "0 0" does not have any useful
+meaning inside a link path.
+@PP
+Within a link path, the symbols @Code from and @Code to denote the
+values of the link's @Code from and @Code to options, and these
+form the basis of constructing the link path:
+@ID {
+@Code {
+"@Link"
+" path {"
+" FROM:: from"
+" TO:: to"
+" FROM TO"
+" }"
+}
+||7ct
+{
+//1.0c
+@VContract @Diag {
+3c @Wide 1c @High
+//
+@ShowTags @Link
+ path {
+ FROM:: from
+ TO:: to
+ FROM TO
+ }
+ from { 0,1 }
+ to { 1,0 }
+}
+}
+}
+This simple example creates two tagged points and joins them with
+a straight line. If you want a link that can carry arrowheads, it is
+best to ensure that it creates @Code FROM and @Code TO tags, with
+directions pointing along the link from @Code FROM to @Code TO at
+both points, since then the default values of the various arrow
+options will do the rest. Similarly, if you want labels you need to
+define {@Code LFROM}, {@Code LMID}, and {@Code LTO} labels, ideally
+also with directions.
+@PP
+Once the outline or path is complete, unless it is really a one-off
+production the best thing to do with it is to add it to your
+extend. @Index { @Code extend keyword }
+@Code "mydefs" file in the following form:
+@ID @OneRow @Code {
+"extend @DiagSetup @Diag"
+"macro @MyNode {"
+" @Node"
+" outline {"
+" LR:: { xsize 0 }"
+" LR:< 0d"
+" UL:: { 0 ysize }"
+" UL:< 270d"
+" 0 0 LR UL 0 0"
+" }"
+"}"
+}
+This says that we are `extending' the @@Diag symbol by adding a new
+symbol, {@Code "@MyNode"}, which stands for what follows it between
+braces. @Code "@MyNode" will then behave exactly like @Code "@Circle"
+and the other standard node symbols. The same pattern works for links:
+@ID @OneRow @Code {
+"extend @DiagSetup @Diag"
+"macro @MyLink {"
+" @Link"
+" path {"
+" FROM:: from"
+" TO:: to"
+" FROM TO"
+" }"
+"}"
+}
+If it is worth the effort to construct a new outline or link path, it
+is worth packaging it like this and thinking up a good name for it,
+for then it will be available, easily, forever.
+@PP
+This same approach is also useful to define common combinations of
+options, even when there is no new outline or path:
+@ID @OneRow @Code {
+"extend @DiagSetup @Diag"
+"macro @BigOctagon {"
+" @Polygon"
+" sides { 8 }"
+" hsize { 5c }"
+" vsize { 5c }"
+" font { Bold }"
+"}"
+}
+Such definitions are very useful if the combinations occur
+frequently. Any options not mentioned have their usual default values,
+and may be set in the usual way:
+@ID @Code "@BigOctagon outlinestyle { dashed } ..."
+Attempts to reset an already set option will elicit a warning message.
+@End @Section
diff --git a/doc/user/dia_erro b/doc/user/dia_erro
new file mode 100644
index 0000000..2ad02d5
--- /dev/null
+++ b/doc/user/dia_erro
@@ -0,0 +1,45 @@
+@Section
+ @Tag { dia_erro }
+ @Title { Errors }
+@Begin
+@PP
+Lout normally produces an output file that will print without mishap on
+any PostScript device. However, some of the options of {@Code "@Diag"}'s
+symbols are passed through Lout to the output file without checking,
+including anything containing @Code "@Diag" lengths, angles, points, and
+tags. Any errors in these options will not be detected until the file
+is printed.
+@PP
+The most likely errors are {@I syntax @I errors}, as in
+@Code "outline { 0 0 [ 0 xsize }" for example, in which a @Code "]" is
+missing; @I { type errors }, as in @Code "SE:: 45d" where the
+following object should have been a point; and @I { undefined errors },
+arising from labels misspelt or used before being defined. Less commonly,
+the options may all be correct but the figure is too large in some way: too
+many labels, too deeply nested, and so on.
+@PP
+When an error is detected, @@Diag arranges for the offending page to
+be printed up to the point where the error occurred, with a message nearby
+describing the error. Printing of the document is then aborted. It is
+often quite easy to find the problem, because it lies in whatever should
+have been printed next.
+@PP
+If you see {@Code VMerror} in an error message, it means that the printer
+vmerror. @Index { @Code VMerror PostScript error }
+is running out of memory. In that case, one thing you can try is
+@ID @Code {
+"@Diag"
+" save { yes }"
+"..."
+}
+This causes the memory used by @@Diag to be reclaimed as soon
+as the diagram is printed, rather than at the end of the current page
+as is usual. However, if the diagram is nested inside some other
+major Lout package, such as {@Code "@Graph"}, use of this option may
+cause other PostScript errors.
+@PP
+If you see @Code "dictfull" in an error message, it means that you are
+dictfull. @Index { @Code dictfull PostScript error }
+using an old version of PostScript. Increasing the @Code "maxlabels"
+option of @@Diag (Section {@NumberOf dia_summ}) might fix the problem.
+@End @Section
diff --git a/doc/user/dia_geom b/doc/user/dia_geom
new file mode 100644
index 0000000..bfc9c02
--- /dev/null
+++ b/doc/user/dia_geom
@@ -0,0 +1,208 @@
+@Section
+ @Tag { dia_geom }
+ @Title { Expert usage: numbers, lengths, angles, and points }
+@Begin
+@PP
+@@Diag has many options whose values contain lengths, angles, and
+points. Options such as @Code margin and {@Code vsize}, which affect the
+size or appearance of the base of a node, may contain only the kinds of
+lengths described in Section {@NumberOf objects}; but in all other cases
+arbitrarily complex algebraic expressions may be used to specify the
+values.
+@PP
+The usual mathematical operations may be applied to numbers, angles, and
+lengths:
+@ID @Code "2.0f + 3.0f * sin { 30d }"
+is a valid length. Since this is just ordinary algebra on real numbers,
+the unsurprising details are deferred to the summary
+(Section {@NumberOf dia_summ}). Grouping is always done with braces,
+never parentheses.
+@PP
+More interesting are the geometrical symbols that @@Diag provides. The
+most fundamental is not a symbol at all: two lengths side by side define
+a point. For example,
+@ID @Code "xsize ysize * 0.5"
+within an outline is the point at the far right of the base, halfway
+up.
+@PP
+There are @Code "++" and @Code "--" symbols for vector addition and
+subtraction of two points, and @Code "**" for multiplication by a
+scalar. For example,
+@ID @Code "A@CTR ++ { 1.0f 0 }"
+is the point @Code 1f to the right of {@Code "A@CTR"}. It is a good idea
+to distinguish between @I { absolute points }, like {@Code "A@CTR"}
+and @Code "0.5,1", which denote fixed positions on the page, and
+@I { relative points }, like {@Code "1.0f 0"}, which serve as offsets
+from absolute points. The difference of two absolute points is a relative
+point; adding two absolute points gives an unpredictable result because
+it depends on the origin of the coordinate system. However, the expression
+@ID @Code "P1 ** x ++ P2 ** {1 - x}"
+is safe for any two absolute points {@Code P1} and {@Code P2} and any
+number {@Code x}; it produces a point on the line through the two
+points.
+@PP
+These remarks on safety do not apply within the @Code outline option of
+{@Code "@Node"}, because there the coordinate system is clearly
+specified. Vector operations, with the aid of a few well-chosen tags,
+can greatly simplify the production of outlines:
+@ID {
+@Code {
+"@Node"
+" outline {"
+" SB:: {0 ysize} ** 0.4"
+" ST:: {0 ysize} ** 0.6"
+" HB:: {xsize 0} ** 0.7"
+" SB"
+" SB ++ HB"
+" HB"
+" xsize ysize * 0.5"
+" HB ++ {0 ysize}"
+" HB ++ ST"
+" ST"
+" SB"
+" }"
+" paint { grey }"
+"{ 6c @Wide 2c @High }"
+}
+||7ct
+@Diag {
+@ShowTags @Node
+ outline {
+ SB:: {0 ysize} ** 0.4
+ ST:: {0 ysize} ** 0.6
+ HB:: {xsize 0} ** 0.7
+ SB
+ SB ++ HB
+ HB
+ xsize ysize * 0.5
+ HB ++ {0 ysize}
+ HB ++ ST
+ ST
+ SB
+ }
+ paint { grey }
+{ 6c @Wide 2c @High }
+}
+}
+But absolute sums like @Code "SB ++ HB" are not safe
+in link paths and stray options like {@Code "alabelpos"}.
+@PP
+Sometimes it is useful to define tags
+which are not wanted afterwards and are better forgotten. For
+this there is the @Code ":=" symbol, which works in much the same
+way as @Code "::" except that the tag is forgotten after the outline
+or path option ends. The value assigned does not have to be a point, it
+can be a length or angle, or even a sequence of values. It is
+permissible to change the value assigned to a tag by reassigning.
+@PP
+Two very useful symbols, {@Code angleto} and {@Code atangle}, bring
+angleto. @Index { @Code angleto symbol in @Code "@Diag" }
+atangle. @Index { @Code atangle symbol in @Code "@Diag" }
+angles into the algebra. The {@Code angleto} symbol finds the angle
+from one point to another. For example,
+@ID @Code "SB angleto ST"
+in the outline above would produce {@Code 90d}. The @Code atangle symbol
+finds the point at a given length and angle from the origin. For example,
+@ID @Code "1.4142f atangle 45d"
+is the point {@Code "1f 1f"}, and
+@ID @Code "B@NE ++ 2f atangle 115d"
+is the point @Code 2f from {@Code "B@NE"} to its northwest.
+@PP
+There is a @Code prev symbol, used only within {@Code outline} and
+prev. @Index { @Code prev symbol in @Code "@Diag" }
+{@Code path}, which returns the previous point on the outline or
+path, ignoring points within {@Code "[]"}. It makes relative movements
+very easy:
+@ID {
+@Code {
+" outline {"
+" 0 0"
+" { 2c atangle 30d }"
+" prev ++ { 2c atangle 90d }"
+" prev ++ { 2c atangle 150d }"
+" prev ++ { 2c atangle 210d }"
+" prev ++ { 2c atangle 270d }"
+" 0 0"
+" }"
+}
+||7ct
+@Diag { ||2.5c
+@Node
+ outline {
+ 0 0
+ { 2c atangle 30d }
+ prev ++ { 2c atangle 90d }
+ prev ++ { 2c atangle 150d }
+ prev ++ { 2c atangle 210d }
+ prev ++ { 2c atangle 270d }
+ 0 0
+ }
+{ 4c @Wide 4c @High }
+}
+}
+This example is rather naughty because the outline does not grow and
+shrink with the base as it should. Such outlines, while tempting, are
+always regretted later.
+@PP
+There are {@Code xcoord} and {@Code ycoord} symbols for finding the
+xcoord. @Index { @Code xcoord symbol in @Code "@Diag" }
+ycoord. @Index { @Code ycoord symbol in @Code "@Diag" }
+@I x and @I y coordinates of a point:
+@ID @Code {
+"{xcoord P1} min {xcoord P2}" "{ycoord P1} max {ycoord P2}"
+}
+is the point at the top left-hand corner of the smallest rectangle
+containing points {@Code P1} and {@Code P2}. And there is a
+@Code distance symbol which produces the (non-negative) distance between
+two points:
+@ID @Code "CTR ++ { CTR distance NW } atangle { CTR angleto NW }"
+equals {@Code NW}.
+@PP
+The rest of this section is concerned with how the `special virtue'
+of the @Code from and @Code to options, their ability to accept a node
+tag as well as a point, is implemented behind the scenes. A good
+user-defined link should also have this virtue, because it is extremely
+useful.
+@PP
+The solution is based on a symbol called {@Code boundaryatangle},
+whose preceding object should be either a point or else the tag
+of a node with one of the standard shapes, and whose following object
+is an angle:
+@ID @Code {
+"{ xsize ysize*0.5 } boundaryatangle 45d"
+"A boundaryatangle 45d"
+}
+In the first case the result is the point, regardless of the
+angle. In the second case, the result is the point on the boundary of
+the node whose tag is given, at the given angle from the centre.
+@PP
+There is a second symbol with a similar adaptive ability, called
+{@Code "??"}, which is defined to be @Code "@" whenever that would
+make sense, and otherwise to produce the preceding object for its
+result. For example, @Code "A??CTR" will equal @Code "A@CTR" if there
+is such a thing; but
+@ID @Code "{ xsize ysize*0.5 }??CTR"
+will have result {@Code "{ xsize ysize*0.5 }"} since replacing
+@Code "??" by @Code "@" does not produce anything sensible.
+@PP
+Now suppose we want a link path that connects @Code "from" and
+@Code "to" by a straight line, where @Code "from" and @Code "to" may be
+either node tags or points. In either case a suitable direction for the
+line to take is
+@ID @Code "from??CTR angleto to??CTR"
+and so the desired path is
+@ID @Code {
+"path {"
+" FROM:: from boundaryatangle { from??CTR angleto to??CTR }"
+" TO:: to boundaryatangle { to??CTR angleto from??CTR }"
+" FROM"
+" TO"
+"}"
+}
+The first line defines point @Code FROM to be on the boundary of
+@Code from at the appropriate angle, if @Code "from" is a node tag;
+otherwise @Code "FROM" is just the point {@Code from}. The second
+line defines point @Code TO similarly, and then the last two lines
+join these two points. The @Code line standard link type is exactly
+this plus a few additional tags and directions.
+@End @Section
diff --git a/doc/user/dia_intr b/doc/user/dia_intr
new file mode 100644
index 0000000..52a9d49
--- /dev/null
+++ b/doc/user/dia_intr
@@ -0,0 +1,108 @@
+@Section
+ @Tag { dia_intr }
+ @Title { Introduction }
+@Begin
+@PP
+To use the @@Diag symbol you first need to include its setup file. For
+example, suppose you have an ordinary document with tables:
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+Change this to
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { diag }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+This provides everything you need for making diagrams.
+@PP
+The result of the @@Diag symbol is an object in the usual way. A diagram
+is commonly made into a centred display, like this:
+@ID @OneRow @Code {
+"@CentredDisplay @Diag {"
+" ..."
+"}"
+}
+or into a floating figure, like this:
+@ID @OneRow @Code {
+"@Figure"
+" @Caption { ... }"
+"@Diag {"
+" ..."
+"}"
+}
+but it could be an entry in a table, a word in a paragraph, or anything
+else.
+@PP
+Most uses of @@Diag contain a @I { nodes part } and a @I { links part }:
+@ID @OneRow lines @Break {
+@Code "@Diag {"
+ @I { nodes part }
+ @Code "//"
+ @I { links part }
+@Code "}"
+}
+This reflects @@Diag's view of the world as consisting of {@I nodes}
+(circles, squares, and so on), which have to be put in their right
+places and then joined with @I links (lines, arrows). The technical
+meaning of the {@Code "//"} symbol does not concern us here; it
+simply serves to divide the two parts.
+@PP
+For example, here is a nodes part containing two nodes separated by
+a @Code "@DP" symbol that (as usual) leaves some vertical space
+between them:
+@ID @OneRow @Tab
+ @Fmta { @Col 7c @Wide A ! @Col B }
+{
+@Rowa
+ A { @Code {
+"@Ellipse { Hello, world }"
+"@DP"
+"@Square @I x"
+} }
+ B { @Diag {
+@Ellipse { Hello, world }
+@DP
+@Square @I x
+} }
+}
+Node symbols like @Code "@Ellipse" and @Code "@Square" follow a familiar
+pattern: they consume the following object, which may be arbitrary, draw
+a shape around it, and give back the resulting object. To insert links, the
+nodes must first be given names, called {@I tags}, using the @Code "::" symbol:
+@ID @OneRow @Code {
+"A:: @Ellipse { Hello, world }"
+"@DP"
+"B:: @Square @I x"
+}
+Then a link from @Code A to @Code B may be added to the links part:
+@ID @OneRow @Tab
+ @Fmta { @Col 7c @Wide A ! @Col B }
+{
+@Rowa
+ A { @Code {
+"@Diag {"
+" A:: @Ellipse { Hello, world }"
+" @DP"
+" B:: @Square @I x"
+" //"
+" @Link from { A } to { B }"
+"}"
+} }
+ B { @Diag {
+A:: @Ellipse { Hello, world }
+@DP
+B:: @Square @I x
+//
+@Link from { A } to { B }
+} }
+}
+Subsequent examples will often omit the enclosing {@Code "@Diag { }"}.
+@End @Section
diff --git a/doc/user/dia_labe b/doc/user/dia_labe
new file mode 100644
index 0000000..c449367
--- /dev/null
+++ b/doc/user/dia_labe
@@ -0,0 +1,433 @@
+@Section
+ @Tag { dia_labe }
+ @Title { Labels }
+@Begin
+@PP
+Diagrams often contain small @I labels adjacent to their nodes and links:
+@CD @Diag
+ nodelabelformat { @I @Body }
+{
+@Tab
+ @Fmta { @Col A ! @Col ! @Col ! @Col B ! @Col ! @Col ! @Col C }
+{
+@Rowa
+ B { B:: @Circle alabel { b } }
+@Rowa
+ A { A:: @Circle alabel { a } }
+@Rowa
+ C { C:: @Circle dlabel { c } }
+}
+//
+@Arrow from { A } to { B } ylabel { 10 }
+@Arrow from { A } to { C } ylabel { 15 }
+@Arrow from { B } to { C } ylabel { 20 }
+}
+Each node may have up to four labels, called {@Code alabel}, {@Code blabel},
+label. @Index { label options in @Code "@Diag" }
+alabel. @Index { @Code alabel option in @Code "@Diag" }
+blabel. @Index { @Code blabel option in @Code "@Diag" }
+clabel. @Index { @Code clabel option in @Code "@Diag" }
+dlabel. @Index { @Code dlabel option in @Code "@Diag" }
+{@Code clabel}, and {@Code dlabel}:
+@ID {
+@Code {
+"@Ellipse"
+" alabel { a }"
+" blabel { b }"
+" clabel { c }"
+" dlabel { d }"
+"{ Hello, world }"
+}
+||7ct
+@VContract @Diag {
+@Ellipse
+ alabel { a }
+ blabel { b }
+ clabel { c }
+ dlabel { d }
+{ Hello, world }
+}
+}
+Links also have labels, five in fact:
+@ID {
+@Code {
+"@Link"
+" fromlabel { f }"
+" xlabel { x }"
+" ylabel { y }"
+" zlabel { z }"
+" tolabel { t }"
+}
+||7ct
+@VContract @Diag {
+3c @Wide 1c @High
+//
+@Link
+ from { 0 0 }
+ to { 1,1 }
+ fromlabel { f }
+ xlabel { x }
+ ylabel { y }
+ zlabel { z }
+ tolabel { t }
+}
+}
+The {@Code fromlabel} and {@Code tolabel} options are positioned directly
+over the endpoints of the link, and {@Code fromlabel} is by default printed
+at a funny angle, because these labels are the means of attaching
+arrowheads to links:
+@ID {
+@Code {
+"@Link"
+" tolabel { @SolidArrowHead }"
+}
+||7ct
+@VContract @Diag {
+3c @Wide 1c @High
+//
+@Link
+ from { 0 0 }
+ to { 1,1 }
+ tolabel { @SolidArrowHead }
+}
+}
+@Code "@SolidArrowHead" is a symbol available for use anywhere whose value
+is an object in the shape of a small solid arrowhead. The arrowhead
+options of Section {@NumberOf dia_link} work by setting {@Code fromlabel}
+and {@Code tolabel} in exactly this way. Usually it is best to forget
+about {@Code fromlabel} and {@Code tolabel}, and think of links as having
+three labels: {@Code xlabel} near the start, {@Code ylabel} in the
+middle, and {@Code zlabel} near the end.
+@PP
+Adding a label will not change the size of the diagram or the position
+of any node, link, or other label. Although a label may be an arbitrary
+object, it is treated as having zero size and will overstrike anything
+that happens to be where it wants to go.
+@PP
+There are options for controlling the appearance and position of
+labels. These are described below mainly for {@Code alabel}, but there
+are corresponding options for all nine labels.
+@PP
+The {@Code alabelfont} and {@Code alabelbreak} options determine the
+font and paragraph breaking style of the label:
+@ID {
+@Code {
+"@Ellipse"
+" alabel { a }"
+" alabelfont { -2p }"
+" alabelbreak { ragged nohyphen }"
+"{ Hello, world }"
+}
+||7ct
+@VContract @Diag {
+@Ellipse
+ alabel { a }
+ alabelfont { -2p }
+ alabelbreak { ragged nohyphen }
+{ Hello, world }
+}
+}
+This example shows the default values of these two options; @Code "-2p"
+explains why the labels in earlier examples were printed in a smaller
+font size. There is also an {@Code alabelformat} option which allows
+for more radical changes in appearance:
+@ID {
+@Code {
+"@Ellipse"
+" alabel { a }"
+" alabelformat { @Box @I @Body }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+//0.5c
+@Ellipse
+ alabel { a }
+ alabelformat { @Box @I @Body }
+{ Hello, world }
+}
+}
+The value attached to the ellipse will be the value of {@Code alabelformat},
+with any @Code "@Body" symbol within it replaced by the value of the
+{@Code alabel} option. This example produces boxed italic labels.
+@PP
+Nodes also have {@Code nodelabelfont}, {@Code nodelabelbreak}, and
+{@Code nodelabelformat} options which work in the same way but affect all
+of the node labels, not just one:
+@ID {
+@Code {
+"@Ellipse"
+" nodelabelformat"
+" { @Box @I @Body }"
+" alabel { a }"
+" blabel { b }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+//0.5c
+@Ellipse
+ nodelabelformat { @Box @I @Body }
+ alabel { a }
+ blabel { b }
+{ Hello, world }
+}
+}
+Links similarly have {@Code linklabelfont}, {@Code linklabelbreak}, and
+{@Code linklabelformat} options which affect all the link labels
+(except {@Code fromlabel} and {@Code tolabel}, since that would produce
+results that people do not expect.) The @Code "@Diag" symbol also has
+these options, in the usual way, and they are extremely useful there:
+@ID {
+@Code {
+"@Diag"
+" nodelabelfont { Slope -2p }"
+" linklabelformat { \"/\"@Body\"/\" }"
+" hsize { 1.8c }"
+"{"
+" A:: @Ellipse alabel { a } { OK }"
+" @DP"
+" @DP"
+" B:: @Ellipse alabel { b } { FAULT }"
+" //"
+" @Arrow from { A } to { B } ylabel { sig }"
+"}"
+}
+||7ct
+@VContract @Diag
+ nodelabelfont { Slope -2p }
+ linklabelformat { "/"@Body"/" }
+ hsize { 1.8c }
+{
+ A:: @Ellipse alabel { a } { OK }
+ @DP
+ @DP
+ B:: @Ellipse alabel { b } { FAULT }
+ //
+ @Arrow from { A } to { B } ylabel { sig }
+}
+}
+These settings specify that every node label will be set in italics,
+two points smaller than the surrounding text, and that every link label
+will appear between two @Code "/" characters, also two points smaller
+because the default value of @Code "linklabelfont" still applies. Of
+course, it remains open to any node or link to override these settings
+by supplying its own label options.
+@PP
+The remaining five label options, {@Code alabelpos}, {@Code alabelangle},
+{@Code alabelprox}, {@Code alabelmargin}, {@Code alabelctr}, and
+{@Code alabeladjust},
+affect the position of the label. Don't be daunted by the number of
+options. As previous examples have shown, they all have sensible
+default values and thus need to be set only rarely.
+@PP
+Each label inhabits its own characteristic region of the node or
+link: {@Code alabel} in the north-east corner of the node,
+{@Code ylabel} halfway along the link, and so on. This general
+location of the label is defined by the {@Code alabelpos} option. Here
+are the default values for all nine labels:
+@IL
+@LI {
+@Code {
+"@Node"
+" alabelpos { NE }"
+" blabelpos { NW }"
+" clabelpos { SW }"
+" dlabelpos { SE }"
+}
+||7ct
+@VContract @Diag {
+//0.5f
+@ShowTags @Ellipse { 3c @Wide 2c @High }
+}
+}
+@LI {
+@Code {
+"@Link"
+" fromlabelpos { FROM }"
+" xlabelpos { LFROM }"
+" ylabelpos { LMID }"
+" zlabelpos { LTO }"
+" tolabelpos { TO }"
+}
+||7ct
+@VContract @Diag {
+//1.0f
+2c @Wide 2.2c @High
+//
+@ShowTags @Link
+ from { 0,0.7 }
+ to { 1,0 }
+ # tolabel { @SolidArrowHead }
+}
+}
+@EL
+Thus, by changing @Code clabelpos to @Code S you can move the position
+of the @Code clabel label to beneath the node. You can do this for every
+node by setting this option in the @Code "@Diag" symbol, as was done for
+the formatting options above.
+@PP
+In a similar vein, there is an @Code { xindent } option which controls how
+far from the start of the link the @Code "LFROM" tag, and hence the
+{@Code xlabel}, will appear. A similar option, @Code { zindent }, determines
+how far from the end of the link the @Code "LTO" tag and hence the
+{@Code zlabel} will appear:
+@ID {
+@Code {
+"@Link"
+" xindent { 1f }"
+" zindent { 2f }"
+}
+||7ct
+@VContract @Diag {
+//1f
+2c @Wide 1.2c @High
+//
+@ShowTags @Link
+ xindent { 1f }
+ zindent { 2f }
+ from { 0,0.7 }
+ to { 1,0 }
+}
+}
+Both options have default value {@Code 0.8f}.
+@PP
+The @Code alabelangle option determines the angle at which the label is
+printed:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "alabelangle { horizontal }" }
+ B { Horizontal (the default) }
+@Rowa
+ A { "alabelangle { aligned }" }
+ B { Aligned with the node outline or link path }
+@Rowa
+ A { "alabelangle { perpendicular }" }
+ B { Perpendicular to the outline or link path }
+}
+The @Code "alabelprox" option determines where in the proximity of
+@Code alabelpos the label is printed:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "alabelprox { above }" }
+ B { Above the node outline or link path (the default for link labels) }
+@Rowa
+ A { "alabelprox { below }" }
+ B { Below the node outline or link path }
+@Rowa
+ A { "alabelprox { left }" }
+ B { To the left of the node outline or link path }
+@Rowa
+ A { "alabelprox { right }" }
+ B { To the right of the node outline or link path }
+@Rowa
+ A { "alabelprox { inside }" }
+ B { Inside the node outline or on the left of the link path
+going from @Code from to @Code to }
+@Rowa
+ A { "alabelprox { outside }" }
+ B { Outside the node outline or on the right of the link path
+going from @Code from to @Code to (the default for node labels) }
+}
+The {@Code alabelmargin} option adds a margin around all four sides of
+the label, thereby moving it away from {@Code alabelpos} irrespective of
+which direction it happens to lie in:
+@ID {
+@Code {
+"@Ellipse"
+" alabel { a }"
+" alabelmargin { 0f }"
+"{ Hello, world }"
+}
+||7ct
+@VContract @Diag {
+@Ellipse
+ alabel { a }
+ alabelmargin { 0f }
+{ Hello, world }
+}
+}
+The default value is {@Code 0.2f}, and so there is scope for some
+reduction as well as increase.
+@PP
+@@Diag takes careful account of the @Code alabelangle option, the
+@Code alabelprox option, the direction that the node outline or link
+path is heading, and which label it is, and places the label in a way
+that looks good nearly always. When it doesn't, the remainder of this
+section should help.
+@PP
+The @Code alabelangle option may be given an arbitrary angle, and then
+the label will be printed at that angle. There are also the special
+values @Code parallel and {@Code antiparallel}, which give the direction
+that the node outline or link path is going at that point and its
+opposite. These are the default values for @Code tolabelangle and
+@Code fromlabelangle respectively, which explains why arrowheads point the
+right way. The @Code aligned value above is one of these two angles,
+the one closest to {@Code 0d}.
+@PP
+The @Code alabelprox option may be {@Code N},
+{@Code S}, {@Code E}, {@Code W}, {@Code NE}, {@Code SE}, {@Code NW},
+{@Code SW}, or {@Code CTR}:
+@CD @Diag {
+//1f
+@ShowTags @Box margin { 0.5c } { 24p @Font grey @Colour @I label }
+}
+meaning that the indicated point of the label will coincide with
+{@Code alabelpos}. These points lie on the outside of the margins
+added by {@Code alabelmargin}.
+@PP
+The six values of @Code alabelprox given earlier (@Code { above },
+@Code { below }, etc.) all produce one of {@Code N}, {@Code S} etc. for
+their ultimate result; which one they produce depends on the direction
+the outline or link is going at that point. For example, @Code { above }
+produces @Code { SE } when the outline or link is going from northeast
+to southwest or vice versa, @Code { SW } when the outline or link is
+going from northwest to southeast and vice versa, and @Code { S } when
+it happens to be exactly horizontal. There is also a dependence
+on which label it is: for example, if it is @Code "xlabel" and the
+direction happens to be vertical, the result is {@Code "NW"}.
+@PP
+The preceding discussion is all under the assumption that the
+@Code "alabelctr" option is {@Code no}. When it is {@Code "yes"},
+a small adjustment is made to the position of the label. The selected
+corner or side midpoint of the label will no longer coincide with
+{@Code alabelpos}, although it will still lie on the straight line passing
+through {@Code alabelpos} at the angle of {@Code alabelpos}. The corner
+or side midpoint slides up or down this line to the point which
+minimises the distance from {@Code alabelpos} to the centre of the
+label. Only @Code ylabelctr has @Code "yes" for its default value; the
+@Code y label often looks better centred when this adjustment is made,
+particularly on lines with shallow but non-zero slope:
+@CD @Tab
+ @Fmta { @Col @CC A ! @Col ! @Col @CC B }
+{
+@Rowa
+ A { @Code "ylabelctr { no }" }
+ B { @Code "ylabelctr { yes }" }
+@Rowa
+@Rowa
+@Rowa
+ A { @Diag ylabelctr { no } {
+ A:: @Square //0.5c &3c B:: @Square
+ //
+ @Link from { A } to { B } ylabel { @I { ylabel } }
+ } }
+ B { @Diag ylabelctr { yes } {
+ A:: @Square //0.5c &3c B:: @Square
+ //
+ @Link from { A } to { B } ylabel { @I { ylabel } }
+ } }
+}
+since it is then the centre of the label which is centred on the link,
+rather than one of its corners.
+@PP
+Finally, when all else fails there is an {@Code alabeladjust} option
+which translates the label by an arbitrary amount:
+@ID @Code "alabeladjust { -0.5c 1.5c }"
+causes the label to appear 0.5 centimetres to the left of and 1.5 centimetres
+above the point where it otherwise would have done.
+@End @Section
diff --git a/doc/user/dia_link b/doc/user/dia_link
new file mode 100644
index 0000000..b71f9d5
--- /dev/null
+++ b/doc/user/dia_link
@@ -0,0 +1,261 @@
+@Section
+ @Tag { dia_link }
+ @Title { Links }
+@Begin
+@PP
+@Code "@Diag" has one basic symbol for creating links, called
+link. @Index { @Code "@Link" symbol from @Code "@Diag" }
+{@Code "@Link"}. It draws a link between two points or nodes
+given by {@Code from} and {@Code to} options, along a path
+given by a {@Code path} option:
+@ID @Code {
+"@Link"
+" path { ... }"
+" from { ... }"
+" to { ... }"
+}
+Unlike {@Code "@Node"}, {@Code "@Link"} has no following object.
+@PP
+The @Code "path" option may be used to produce a link of any shape, as
+Section {@NumberOf dia_defi} explains. There are also values
+that produce standard paths. These are listed in full in the summary
+(Section {@NumberOf dia_summ}); here is a sample:
+@ID @Tab
+ @Fmta { @Col @Code { path "{" A "}" } ! @Col ! @Col B }
+{
+
+@Rowa
+ A { line }
+ B {
+@Diag {
+A:: @Circle //1c ||2c B:: @Circle
+// @Link from { A } to { B } path { line } arrow { yes }
+}
+}
+
+@Rowa
+ A { acurve }
+ B {
+@Diag {
+A:: @Circle //1c ||2c B:: @Circle
+// @Link from { A } to { B } path { acurve } arrow { yes }
+}
+}
+
+@Rowa
+ A { ccurve }
+ B {
+@Diag {
+A:: @Circle //1c ||2c B:: @Circle
+// @Link from { A } to { B } path { ccurve } arrow { yes }
+}
+}
+
+@Rowa
+ A { rvlcurve }
+ B {
+@Diag {
+A:: @Circle //1c ||2c B:: @Circle
+// @Link from { A } to { B } path { rvlcurve } arrow { yes }
+}
+}
+
+}
+The name of the last one is a reminder that it goes right, then vertically,
+then left, with curved corners. The @Code acurve and @Code ccurve values
+produce circular arcs, anticlockwise and clockwise respectively, lying on
+the circle passing through the endpoints, or through the centres of the
+endpoints when they are tags denoting nodes. There is also @Code "curve"
+which is an abbreviation for {@Code "acurve"}. All these standard paths
+are defined in a way that makes sense no matter where the two nodes are
+relative to each other, except that no promise of a sensible result is
+made for two nodes very close together.
+@PP
+@Code "@Link" has two options, @Code bias and {@Code radius}, that may be
+used to fine-tune the path. The @Code "bias" option determines the
+maximum distance that a curve is permitted to stray:
+@CD @Tab
+ @Fmta { @Col A ! @Col ! @Col B }
+{
+
+@Rowa
+
+ A { @Diag vstrut { no } margin { 0.5c } {
+A:: @Circle //1.5c ||2c B:: @Circle
+//
+LA:: @Line pathstyle { cdashed } from { A } to { B }
+LB:: @Curve from { A } to { B }
+@Line arrow { both } from { LA@LMID } to { LB@LMID }
+ ylabel { @I bias } # ylabeladjust { 0.15c 0 }
+} }
+
+ B { @Diag vstrut { no } margin { 0.5c } {
+A:: @Circle //1.5c ||2c B:: @Circle
+//
+LA:: @RVLCurve from { A } to { B }
+LB:: @Line pathstyle { cdashed } from { B@E } to { B@E ++ {0 2.5c} }
+@Line arrow { both } from { LB@LMID } to { LA@LMID }
+ ylabel { @I bias } ylabeladjust { 0 0.05c }
+} }
+
+}
+The @Code radius option does @I not apply to @Code acurve and
+{@Code ccurve}; rather, it determines the radius of the arcs at
+the corners of @Code rvlcurve and its kin. A very large radius will be
+reduced to the largest reasonable value, which provides a way to get
+a semicircle at the right in an {@Code rvlcurve}.
+@PP
+Lout has no idea where the path is wandering, and cannot take it into
+account when placing a diagram on the page:
+@ID {
+@Code {
+"@Link"
+" path { ccurve }"
+" bias { 2c }"
+}
+||7ct
+@Diag vstrut { no } {
+A:: @Circle &3c B:: @Circle
+//
+@Link path { ccurve } bias { 2c } from { A } to { B }
+}
+}
+In such cases you have to arrange for the extra space yourself, by adding
+an extra paragraph symbol, blank row or column in a table, or whatever.
+@PP
+As with the options of {@Code "@Node"}, the options of {@Code "@Link"}
+may all be given to {@Code "@Diag"} as well, where they apply to every
+link in the diagram, unless overridden in the usual way. They also appear
+in the setup file, where they apply to every link in every diagram of the
+document, unless overridden.
+@PP
+There are {@Code pathstyle}, {@Code pathdashlength} and {@Code pathwidth}
+options which affect the appearance of the path in the same way as the
+{@Code outlinestyle}, {@Code outlinedashlength} and {@Code outlinewidth}
+options of {@Code "@Node"} affect the outline. When {@Code pathstyle}
+contains just one value (as opposed to a sequence of values) @Code "@Diag"
+tries to divide the path into fewer segments than it would otherwise, to
+make dashed and dotted paths look as good as possible. There is also
+a {@Code pathgap} option which affects only @Code doubleline paths; it
+determines the gap between the centres of the two lines.
+@PP
+The @Code "@Link" symbol has an @Code arrow option, which adds an
+arrow. @Index { arrows }
+arrowhead to the end of the link:
+@ID {
+@Code {
+"@Link"
+" arrow { yes }"
+}
+||7ct
+@Diag {
+1c @High 3c @Wide
+//
+@Link
+ from { 0,0 }
+ to { 1,1 }
+ arrow { yes }
+}
+}
+Its value may be {@Code no} (the default), {@Code yes}, {@Code forward}
+(which is the same as {@Code yes}), {@Code back}, or {@Code both}:
+@ID {
+@Code {
+"@Link"
+" arrow { both }"
+}
+||7ct
+@Diag {
+1c @High 3c @Wide
+//
+@Link
+ from { 0,0 }
+ to { 1,1 }
+ arrow { both }
+}
+}
+@Code "@Link" has three options for controlling the appearance of
+arrowheads: {@Code arrowstyle}, {@Code arrowwidth}, and
+{@Code arrowlength}. Although every link symbol has these options, for
+consistency it is almost always better to set the corresponding options
+to the @Code "@Diag" symbol, which applies them to every arrow in the
+diagram:
+@ID @Code {
+"@Diag"
+" arrowstyle { solid }"
+" arrowwidth { 0.3f }"
+" arrowlength { 0.5f }"
+"{"
+" ..."
+"}"
+}
+This shows the default values: a solid arrowhead like the ones above,
+@Code "0.3f" wide (across) and @Code "0.5f" long. The @Code "arrowwidth"
+and @Code "arrowlength" options may be any length; it may be necessary to
+decrease @Code "arrowwidth" when many arrows enter one node. The full list
+of possible values for @Code "arrowstyle" is
+@ID @Tab
+ @Fmta { @Col @Code { "arrowstyle {" A "}" } ! @Col B }
+ vmargin { 1.0vx }
+{
+@Rowa
+ A { solid }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { solid } } }
+@Rowa
+ A { halfopen }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { halfopen } } }
+@Rowa
+ A { open }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { open } } }
+@Rowa
+ A { curvedsolid }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { curvedsolid } } }
+@Rowa
+ A { curvedhalfopen }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { curvedhalfopen } } }
+@Rowa
+ A { curvedopen }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { curvedopen } } }
+@Rowa
+ A { circle }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { circle } } }
+@Rowa
+ A { box }
+ B { @Diag vstrut { no } { A:: @Circle |2c B:: @Circle
+ // @Link from { A } to { B } arrow { yes } arrowstyle { box } } }
+}
+The reader is invited to admire the beautifully sharp points on these
+arrowheads.
+@FootNote {
+The outlines of all nodes and arrowheads are drawn on the inside of the
+geometrical curve defining them, not centred over the curve as is common in
+PostScript documents. Hence, the arrowheads and node outlines intersect at
+a true geometrical point; they do not overlap by one line width. Furthermore,
+the standard link paths terminate at the base of the arrowhead, not at
+the point; the arrowhead itself is responsible for continuing the link
+path, at the appropriate width (although never dashed or dotted), from its
+base to its point, and hence can and does ensure that the link path does
+not overstrike and thicken the point of the arrow.
+}
+@PP
+It is possible to place an arbitrary object at the beginning or
+end of a link, using the @Code "fromlabel" and @Code "tolabel" options
+of Section {@NumberOf dia_labe}.
+@PP
+To save time in common cases, @Code "@Diag" provides link symbols,
+each of which is just @Code "@Link" with one of the standard paths
+already set: {@Code "@Line"}, {@Code "@Curve"}, {@Code "@CCurve"},
+{@Code "@RVLCurve"}, and so on. There are also symbols in which
+the @Code "arrow" option is set to @Code yes in addition: {@Code "@Arrow"},
+{@Code "@CurveArrow"}, {@Code "@CCurveArrow"}, {@Code "@RVLCurveArrow"},
+and so on. See the summary (Section {@NumberOf dia_summ}) for the
+full list of these symbols. You will still need the @Code "arrow" option
+to get backward arrows and double-ended arrows.
+@End @Section
diff --git a/doc/user/dia_node b/doc/user/dia_node
new file mode 100644
index 0000000..b72c6e2
--- /dev/null
+++ b/doc/user/dia_node
@@ -0,0 +1,512 @@
+@Section
+ @Tag { dia_node }
+ @Title { Nodes }
+@Begin
+@PP
+@Code "@Diag" has one basic symbol for creating nodes. It is called
+node. @Index { @Code "@Node" }
+{@Code "@Node"}, and it takes the following object and encloses it in an
+outline whose shape is determined by the {@Code "outline"} option:
+@ID {
+@Code {
+"@Node"
+" outline { curvebox }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@Node
+ outline { curvebox }
+{ Hello, world }
+}
+}
+As Section {@NumberOf dia_defi} explains, the @Code outline option may be
+used to produce an outline of any shape. There are also nine values that
+produce standard shapes: {@Code box}, {@Code curvebox}, {@Code shadowbox},
+{@Code square}, {@Code diamond}, {@Code polygon}, {@Code isosceles},
+{@Code ellipse}, and {@Code circle}.
+@PP
+The shape of the outline is determined by the @Code outline option, but
+its size and position depend on the size and position of its
+{@I base}: the following object with a small margin around it. For
+example, this is how a circle is positioned over its base (shown in
+grey):
+@ID @OneRow {
+@Code {
+"@Node"
+" outline { circle }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@Node
+ outline { circle }
+{ Hello, world }
+}
+}
+Lout works only with the base, having no idea where the outline is, which
+explains why this circle is too high for the space allowed
+it. Section {@NumberOf dia_summ} shows how each of the standard
+outlines is positioned over its base.
+@PP
+The @Code "@Node" symbol has many options, but all of them without
+exception share the following very useful property: they may be given
+to the @Code "@Diag" symbol as well, where they apply to every node in
+the diagram:
+@ID @OneRow {
+@Code {
+"@Diag"
+" outline { circle }"
+"{"
+" @Node @I a"
+" @DP"
+" @Node @I b"
+"}"
+}
+||7ct
+@Diag
+ outline { circle }
+{
+ @Node @I a
+ @DP
+ @Node @I b
+}
+}
+These options also appear in the setup file ({@Code diag});
+if set there, they apply to every node in every diagram of the
+document. As the number of nodes increases, it becomes very tedious and
+error-prone to duplicate options at all the nodes. Giving each option
+just once, at the @Code "@Diag" symbol or in the setup file, saves time
+and makes it easy to change all the nodes into squares or any other shape
+later on. Any setup file option may be overridden in a diagram by
+giving the option to its @Code "@Diag" symbol; any @Code "@Diag" option
+or setup file option may be overridden at any node by giving the option
+again there.
+@PP
+To save time in simple cases, @Code "@Diag" provides nine other
+node symbols called
+{@Code "@Box"},
+box.fig @Index { @Code "@Box" in @Code "@Diag" }
+{@Code "@CurveBox"},
+curvebox.fig @Index { @Code "@CurveBox" in @Code "@Diag" }
+{@Code "@ShadowBox"},
+shadowbox.fig @Index { @Code "@ShadowBox" in @Code "@Diag" }
+{@Code "@Square"},
+square. @Index @Code "@Square"
+{@Code "@Diamond"},
+diamond. @Index @Code "@Diamond"
+{@Code "@Polygon"},
+{@Code "@Isosceles"},
+isosceles. @Index @Code "@Isosceles"
+{@Code "@Ellipse"},
+ellipse. @Index @Code "@Ellipse"
+and {@Code "@Circle"}. These are just abbreviations for @Code "@Node"
+with the appropriate value of {@Code outline}, nothing more. They take
+the same options as {@Code "@Node"} (except that @Code outline is
+already fixed), and everything works in the same way.
+@PP
+There is a @Code shadow option which determines the depth of the shadow
+in shadow boxes:
+@ID {
+@Code {
+"@Node"
+" outline { shadowbox }"
+" shadow { 0.4f }"
+"{ WARNING }"
+}
+||7ct
+@Diag {
+@Node
+ outline { shadowbox }
+ shadow { 0.4f }
+{ WARNING }
+}
+}
+This example shows the default value, 0.4 times the current font
+size. For polygons there is a @Code sides option for specifying the number
+polygon. @Index @Code "@Polygon"
+of sides, and an @Code angle option for rotating the outline:
+@IL
+@LI {
+@Code {
+"@Polygon"
+" sides { 5 }"
+}
+||7ct
+@Diag {
+@Polygon
+ sides { 5 }
+{ 1c @High 1c @Wide }
+}
+}
+
+@LI {
+@Code {
+"@Polygon"
+" sides { 5 }"
+" angle { 0d }"
+}
+||7ct
+@Diag {
+@Polygon
+ sides { 5 }
+ angle { 0d }
+{ 1c @High 1c @Wide }
+}
+}
+@EL
+Setting @Code angle to @Code 0d causes the first vertex to be placed
+directly underneath the centre, and as the angle increases, the
+position of the first vertex rotates anticlockwise. The defaults are
+3 sides and the angle that gives the polygon a
+horizontal base (i.e. 180 degrees divided by the number of sides). Thus
+the two cases with symmetry about a vertical axis are obtained by the
+default angle and @Code "0d" respectively, which is convenient. The
+{@Code "shadow"}, {@Code "sides"}, and {@Code "angle"} options may be
+given to any node, and also to {@Code "@Diag"} and in the setup file,
+where they apply to every node as usual. However, they only affect the
+appearance of shadow boxes and polygons, respectively.
+@PP
+The {@Code outlinestyle}, {@Code outlinedashlength}, and {@Code outlinewidth}
+options apply to any node and affect the appearance of the outline:
+@ID @OneRow {
+@Code {
+"@CurveBox"
+" outlinestyle { solid }"
+" outlinedashlength { 0.2f }"
+" outlinewidth { thin }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@CurveBox
+ outlinestyle { solid }
+ outlinedashlength { 0.2f }
+ outlinewidth { thin }
+{ Hello, world }
+}
+}
+This example shows the default values of these options. The
+{@Code outlinestyle} option may be {@Code solid}, {@Code dashed},
+dashed. @Index { dashed lines }
+dotted. @Index { dotted lines }
+{@Code cdashed}, {@Code dotted}, or {@Code noline}:
+@ID @OneRow {
+@Code {
+"@CurveBox"
+" outlinestyle { cdashed }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@CurveBox
+ outlinestyle { cdashed }
+{ Hello, world }
+}
+}
+The @Code dashed option makes all dashes the same length, whereas
+@Code cdashed halves the length of the first and last dash on each segment,
+which usually looks better. The length of dashes is {@Code outlinedashlength},
+and the distance between dashes or dots is at most {@Code outlinedashlength},
+reduced to make the dashes or dots fit evenly. The @Code outlinewidth
+option determines the width of the line, dashes, or dots, and may be
+{@Code thin}, {@Code medium}, {@Code thick}, or any length. The values
+used for {@Code thin}, {@Code medium}, and {@Code thick} are
+{@Code 0.04f}, {@Code 0.08f}, and {@Code 0.12f}.
+@PP
+The {@Code outlinestyle} option may contain a sequence of the values
+mentioned above, meaning that they are to be applied in turn to each
+segment of the outline:
+@ID @OneRow {
+@Code {
+"@CurveBox"
+" outlinestyle { solid cdashed }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@CurveBox
+ outlinestyle { solid cdashed }
+{ Hello, world }
+}
+}
+If there are more segments than values, {@Code outlinestyle} cycles back
+to the first value again; this is why a single value is applied to all
+segments. Section {@NumberOf dia_summ} shows how each of the
+standard shapes is divided into segments.
+@PP
+Nodes may be painted any of the colours listed in Section
+{@NumberOf colour}, using the @Code "paint" option:
+@ID @OneRow {
+@Code {
+"@Box"
+" paint { grey }"
+"@Diamond"
+" outlinestyle { noline }"
+" paint { white }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@Box
+ paint { grey }
+@Diamond
+ outlinestyle { noline }
+ paint { white }
+{ Hello, world }
+}
+}
+In this example the object following @Code "@Box" is a diamond containing
+{@Code "Hello, world"}. The default value of @Code "paint" is
+{@Code nopaint}, a special value (not a colour) meaning don't use any paint.
+@PP
+When painting it is important to know what order things are done in, because
+anything put down earlier will disappear under the paint. This is why
+@Code nopaint and @Code white are different. Painting is done first, then
+boundaries, and finally the following object.
+@PP
+Each node symbol has
+@Code "font" and @Code "break" options which may be used to
+set the font and paragraph breaking style of the following object:
+@ID @OneRow {
+@Code {
+"@Box"
+" font { Helvetica Base }"
+" break { clines }"
+"{"
+"WARNING"
+"DANGEROUS"
+"PENGUINS"
+"}"
+}
+||7ct
+@Diag {
+@Box
+ font { Helvetica Base }
+ break { clines }
+{
+WARNING
+DANGEROUS
+PENGUINS
+}
+}
+}
+Both options have empty default values, which leave the font and break
+style unchanged. There is also a @Code "format" option for making more
+radical changes to the appearance of the following object:
+@ID @OneRow {
+@Code {
+"@Box"
+" format {"
+" {0.8 1.5} @Scale @S @Body"
+" }"
+"{"
+"Dangerous Penguins"
+"}"
+}
+||7ct
+@Diag {
+@Box
+ format { { 0.8 1.5 } @Scale @S @Body }
+{
+Dangerous Penguins
+}
+}
+}
+The result is the @Code "format" option with any @Code "@Body" symbol
+within it replaced by the following object. These are very useful when
+attached to the @Code "@Diag" symbol:
+@ID @OneRow @Code {
+"@Diag"
+" font { Helvetica Base }"
+" break { clines }"
+" format { { 0.8 1.5 } @Scale @S @Body }"
+"{"
+" ..."
+"}"
+}
+since then they apply to every node, as usual, thereby eliminating
+a lot of tedious, error-prone duplication of formatting information
+at each node.
+@PP
+The @Code margin option determines the size of the margin added to
+the following object:
+@ID @OneRow {
+@Code {
+"@Box"
+" margin { 0c }"
+"{ Hello, world }"
+}
+||7ct
+@Diag {
+@Box
+ margin { 0c }
+{ Hello, world }
+}
+}
+These margins are included in the node's base (described above), so a
+larger margin enlarges the base and hence the outline as well. The
+default value of @Code margin is {@Code 0.6f} (six-tenths of the current
+font size), and so the margin will automatically increase when the font size
+does, for example in overhead transparencies.
+@PP
+The @Code margin option adds the same margin to all four sides. For
+finer control, the @Code hmargin option determines the horizontal (left
+and right) margins only, overriding {@Code margin}. Similarly, the
+@Code vmargin option determines the vertical (top and foot) margins. There
+are also {@Code leftmargin}, {@Code rightmargin},
+{@Code topmargin}, and {@Code footmargin} options which override
+{@Code margin}, {@Code hmargin}, and {@Code vmargin}.
+@PP
+When nodes appear side by side, the {@Code valign} option is
+useful for controlling their vertical position with respect to each
+other. For example,
+@ID @OneRow {
+@Code {
+"@Diag"
+" valign { foot }"
+"{"
+"@Box font { 24p } Big"
+"@Box font { 8p } Small"
+"}"
+}
+||7ct
+@Diag
+ valign { foot }
+{
+@Box font { 24p } Big
+@Box font { 8p } Small
+}
+}
+causes the feet of the boxes to be aligned. In this example it is
+applied to all nodes at once, but of course it can be applied
+to individual nodes as well. The value of {@Code valign} can be a
+length, which means that the point of alignment is
+to be that far down from the top of the base (including margins); or
+it may be {@Code top}, {@Code ctr}, or {@Code foot}, meaning alignment
+through the top, centre (the default value), or foot.
+@PP
+The {@Code vsize} option specifies a particular
+height for a node (not including margins):
+@ID @OneRow {
+@Code {
+"@Diag"
+" vsize { 2f }"
+"{"
+"@Box font { 24p } Big"
+"@Box font { 8p } Small"
+"}"
+}
+||7ct
+@Diag
+ vsize { 2f }
+{
+@Box font { 24p } Big
+@Box font { 8p } Small
+}
+}
+The font size used when calculating @Code vsize is not affected by
+the value of any @Code font option. If the following object is too
+tall for the chosen height, Lout will print a warning message (`forced
+to enlarge {@Code "@High"}', probably) and enlarge the base.
+@PP
+There is a @Code vindent option which is effective only when @Code vsize
+is used. It controls where in the vertical space the following object
+is to appear:
+@ID @OneRow {
+@Code {
+"@Diag"
+" vsize { 3f }"
+"{"
+"@Box vindent { top } Top"
+"@Box Centre"
+"@Box vindent { foot } Foot"
+"}"
+}
+||7ct
+@Diag
+ vsize { 3f }
+ vindent { ctr }
+{
+@Box vindent { top } Top
+@Box Centre
+@Box vindent { foot } Foot
+}
+}
+The value may be {@Code top} for at the top, {@Code ctr} (the default
+value) for in the centre, {@Code foot} for at the foot, or a length,
+meaning that distance down from the top. These values are the same as
+for the @Code valign option.
+@PP
+Small discrepancies in the size of nodes can be very annoying,
+particularly when the nodes appear side by side:
+@ID @OneRow {
+@Code {
+"@Diag"
+"{"
+"@Box Hole @Box in"
+"@Box my @Box pocket"
+"}"
+}
+||7ct
+@Diag
+{
+@Box Hole @Box in
+@Box my @Box pocket
+}
+}
+These are caused by the slightly different heights of the objects within
+the nodes. Selecting a fixed vertical size for all nodes goes some way
+towards solving this problem:
+@ID @OneRow {
+@Code {
+"@Diag"
+" vsize { 1f }"
+"{"
+"@Box Hole @Box in"
+"@Box my @Box pocket"
+"}"
+}
+||7ct
+@Diag
+ vsize { 1f }
+{
+@Box Hole @Box in
+@Box my @Box pocket
+}
+}
+The size @Code "1f" is a good choice because most fonts are designed to
+be @Code "1f" high from the top of the tallest character to the foot of the
+deepest. However, there is still a problem with the baselines of the words
+being misaligned. A better solution is to insert a @I { vertical strut }
+into each node: an invisible object with zero width and height equal to
+{@Code 1f}. This is done using the @Code vstrut option:
+@ID @OneRow {
+@Code {
+"@Diag"
+" vstrut { yes }"
+"{"
+"@Box Hole @Box in"
+"@Box my @Box pocket"
+"}"
+}
+||7ct
+@Diag
+ vstrut { yes }
+{
+@Box Hole @Box in
+@Box my @Box pocket
+}
+}
+The @Code vstrut option may be {@Code yes}, {@Code no} (the default value), or
+a length, meaning to insert a strut of this height. So @Code "vstrut { yes }"
+is equivalent to {@Code "vstrut { 1.0f }"}.
+@PP
+There are {@Code halign}, {@Code hsize}, {@Code hindent}, and {@Code hstrut}
+options which work horizontally exactly as {@Code valign}, {@Code vsize},
+{@Code vindent}, and {@Code vstrut} work vertically, except that they
+use {@Code left} and {@Code right} where the vertical ones use
+{@Code top} and {@Code foot}. The best way to fix horizontal size
+discrepancies is with {@Code hsize}, not {@Code hstrut}.
+@End @Section
diff --git a/doc/user/dia_posi b/doc/user/dia_posi
new file mode 100644
index 0000000..727d3be
--- /dev/null
+++ b/doc/user/dia_posi
@@ -0,0 +1,224 @@
+@Section
+ @Tag { dia_posi }
+ @Title { Positioning }
+@Begin
+@PP
+Once the nodes of the diagram are in place, @@Diag can be trusted to look
+after the rest: links to standard outlines will terminate neatly on their
+boundaries, labels will not overstrike links no matter what direction they
+are heading, and so on. The great weakness of @@Diag is in positioning
+the nodes. This is partly because `what pleases the eye' is the
+positioning rule in many diagrams, and an interactive system is really
+needed in such cases; and partly because, even when the rule is more formal
+(for example, when the nodes are to be laid out in a grid), @@Diag does not
+have symbols to produce it anyway.
+@PP
+Previous examples have used @Code "@DP" for getting nodes one under
+another, and white space between nodes for getting them side by side, but
+this is very primitive. This section suggests three better ways: using
+{@Code "@Tbl"}, using {@Code "@Graph"}, and using coordinates; and the
+following section adds a fourth, using @@Diag's tree-drawing symbols. It's
+a bit of a jumble.
+@PP
+The {@Code "@Tbl"} symbol (Chapter {@NumberOf tables}) is a good choice when
+the nodes have any kind of grid-like arrangement:
+@ID @OneRow {
+@Code {
+"@Diag {"
+"@Tbl"
+" aformat { @Cell A | @Cell B | @Cell C }"
+" marginhorizontal { 0.5c }"
+" marginvertical { 0.25c }"
+"{"
+"@Rowa"
+" B { A:: @Square }"
+"@Rowa"
+" A { B:: @Square }"
+" C { C:: @Square }"
+"@Rowa"
+" B { D:: @Square }"
+"}"
+"//"
+"@Arrow from { A } to { B }"
+"@Arrow from { A } to { C }"
+"@Arrow from { B } to { D }"
+"@Arrow from { C } to { D }"
+"@Arrow from { A } to { D }"
+"}"
+}
+||9ct
+@Diag {
+@Tbl
+ aformat { @Cell A | @Cell B | @Cell C }
+ marginhorizontal { 0.5c }
+ marginvertical { 0.25c }
+{
+@Rowa
+ B { A:: @Square }
+@Rowa
+ A { B:: @Square }
+ C { C:: @Square }
+@Rowa
+ B { D:: @Square }
+}
+//
+@Arrow from { A } to { B }
+@Arrow from { A } to { C }
+@Arrow from { B } to { D }
+@Arrow from { C } to { D }
+@Arrow from { A } to { D }
+}
+}
+The table occupies the nodes part. Tags may have the same name
+as columns; the two can never conflict.
+@PP
+Similarly, the @Code "@Graph" symbol from Chapter {@NumberOf graphs}
+has an @Code "objects" option which can place arbitrary objects,
+including labelled nodes, anywhere on a graph:
+@ID @OneRow {
+@Code {
+"@Diag {"
+"@Graph"
+" xmin { 0 }"
+" xmax { 100 }"
+" ymin { 0 }"
+" ymax { 100 }"
+" objects {"
+" @CTR at { 20 30 } { A:: @Square }"
+" @CTR at { 60 70 } { B:: @Square }"
+" }"
+"{}"
+"//"
+"@Link from { A } to { B }"
+"}"
+}
+||8.5ct
+@Diag {
+@Graph
+ xmin { 0 }
+ xmax { 100 }
+ ymin { 0 }
+ ymax { 100 }
+ objects {
+ @CTR at { 20 30 } { A:: @Square }
+ @CTR at { 60 70 } { B:: @Square }
+ }
+{}
+//
+@Link from { A } to { B }
+}
+}
+Once again the @Code "@Graph" symbol occupies the nodes part. You can
+get rid of the axes by setting the @Code "style" option of @Code "@Graph"
+to {@Code none}, and then it won't look like a graph at all.
+@PP
+@@Diag has a system of node positioning based on coordinates which is
+somewhat similar to the @Code "@Graph" one. It is often the easiest way
+to scatter nodes about a diagram at random. The first step is to create
+a nodes part that is just an empty space of whatever size you want the
+final diagram to be:
+@ID @OneRow @Code {
+"@Diag {"
+" 4c @High 6c @Wide"
+" //"
+" ..."
+"}"
+}
+As shown, this is done with the @Code "@Wide" and @Code "@High" symbols
+from basic Lout; the above diagram will be four centimetres high by
+six centimetres wide.
+@PP
+@@Diag has a @Code "," symbol that allows you to specify a point by
+its coordinates in the diagram's base. For example,
+@Code "0,0" denotes the bottom left-hand corner of the base,
+@Code "1,0" denotes the bottom right-hand corner, and
+@Code "0.5,0.5" denotes the centre of the base. Coordinates should
+usually be between 0 and 1, since otherwise they denote points
+outside the base (which is allowed but seldom useful).
+@PP
+Every node symbol has a @Code "translate" option which allows you
+to move the node about on the diagram's base (or off it if you use
+coordinates less than 0 or greater than 1). If you use this option,
+the node effectively has zero size and overstrikes anything else
+in the area you put it (like labels do). It is best to put these
+nodes in the links part:
+@ID @OneRow {
+@Code {
+"@Diag {"
+"@Box margin { 0c } 4c @Wide 5c @High"
+"//"
+"A:: @Square"
+" translate { CTR to 0.5, 0.67 }"
+" { @I A }"
+"B:: @Circle"
+" translate { CTR to 0.8, 0.25 }"
+" { @I B }"
+"}"
+}
+||9ct
+@Diag {
+@Box margin { 0c } 4c @Wide 5c @High
+//
+A:: @Square
+ translate { CTR to 0.5, 0.67 }
+ { @I A }
+B:: @Circle
+ translate { CTR to 0.8, 0.25 }
+ { @I B }
+}
+}
+A box with margin zero has been drawn around the empty space to
+show its extent. The value of @Code "translate" should always
+be {@I point} @Code to {@I point}; the first point lies within
+the node, the second lies within the nodes part, and the translation
+makes these two points coincide.
+@PP
+You are free to have nodes in the nodes part as well, or any object
+at all. Here is an example which shows what a little ingenuity
+can accomplish:
+@ID @OneRow {
+@Code {
+"@Diag {"
+"@Polygon"
+" sides { 5 }"
+" outlinestyle { noline }"
+" hsize { 4c }"
+" vsize { 4c }"
+"//"
+"A:: @Circle translate { N to P1 } {}"
+"B:: @Circle translate { N to P2 } {}"
+"C:: @Circle translate { N to P3 } {}"
+"D:: @Circle translate { N to P4 } {}"
+"E:: @Circle translate { N to P5 } {}"
+"@Link arrow { both } from { A } to { B }"
+"@Link arrow { both } from { B } to { C }"
+"@Link arrow { both } from { C } to { D }"
+"@Link arrow { both } from { D } to { E }"
+"@Link arrow { both } from { E } to { A }"
+"}"
+}
+||9ct
+@Diag {
+@Polygon
+ sides { 5 }
+ outlinestyle { noline }
+ hsize { 4c }
+ vsize { 4c }
+//
+A:: @Circle translate { N to P1 } {}
+B:: @Circle translate { N to P2 } {}
+C:: @Circle translate { N to P3 } {}
+D:: @Circle translate { N to P4 } {}
+E:: @Circle translate { N to P5 } {}
+@Link arrow { both } from { A } to { B }
+@Link arrow { both } from { B } to { C }
+@Link arrow { both } from { C } to { D }
+@Link arrow { both } from { D } to { E }
+@Link arrow { both } from { E } to { A }
+}
+}
+This uses the tags of a phantom polygon to position the
+real nodes. It would be a rare interactive system that could
+position nodes with this precision; @@Diag shines whenever there
+is a formal positioning rule to follow.
+@End @Section
diff --git a/doc/user/dia_summ b/doc/user/dia_summ
new file mode 100644
index 0000000..b9dc9e9
--- /dev/null
+++ b/doc/user/dia_summ
@@ -0,0 +1,1680 @@
+@Section
+ @Tag { dia_summ }
+ @Title { Summary }
+@Begin
+@PP
+Here is the complete list of standard node outlines that may be given
+to the @Code "@Node" symbol. Each shows the outline name, any extra
+options relevant to this outline, base (shown as a grey
+box), segments (shown using {@Code "outlinestyle { solid dashed }"}),
+tags, and directions (shown as a thick arrowhead wherever defined):
+@IndentedList gap { 3v }
+
+@LI {
+@Code {
+"@Node"
+" outline { box }"
+}
+||7ct
+@Diag {
+//0.5f
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { box }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { curvebox }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { curvebox }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { shadowbox }"
+" shadow { 0.4f }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { shadowbox }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { square }"
+}
+||7ct
+@Diag {
+//1.5f
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { square }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { diamond }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { diamond }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { polygon }"
+" sides { 3 }"
+" angle { 180d / sides }"
+}
+||7ct
+@Diag {
+//0.5f
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { polygon }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+&0.5c ... &0.5c
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { polygon }
+ sides { 10 }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+&0.5c ...
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { isosceles }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { isosceles }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { ellipse }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { ellipse }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@LI {
+@Code {
+"@Node"
+" outline { circle }"
+}
+||7ct
+@Diag {
+@Box paint { lightgrey } outlinestyle { noline } margin { 0c }
+@ShowTags @ShowDirections @Node
+ outline { circle }
+ outlinestyle { solid dashed }
+ outlinewidth { 0.03f }
+ vsize { 1.0c } hsize { 2.0c }
+}
+}
+
+@EndList
+@DP
+Here are the abbreviations for the standard shapes:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code { outline "{" A "}" } ! @Col @Code { "@"B } }
+{
+@Rowa
+ A { box }
+ B { Box }
+@Rowa
+ A { curvebox }
+ B { CurveBox }
+@Rowa
+ A { shadowbox }
+ B { ShadowBox }
+@Rowa
+ A { square }
+ B { Square }
+@Rowa
+ A { diamond }
+ B { Diamond }
+@Rowa
+ A { polygon }
+ B { Polygon }
+@Rowa
+ A { isosceles }
+ B { Isosceles }
+@Rowa
+ A { ellipse }
+ B { Ellipse }
+@Rowa
+ A { circle }
+ B { Circle }
+}
+Here are all the options to the @Code "@Node" symbol, their default
+values, and their ranges of allowed values. Definitions of {@I number},
+{@I length}, {@I angle}, and {@I point} appear later in this summary. The
+options related to {@Code alabel}, {@Code blabel}, {@Code clabel}, and
+{@Code dlabel} have mostly been omitted since they are the same as
+the {@Code nodelabel} options except for {@Code nodelabelpos}.
+@DP
+1fx @Break @Tab
+ hmargin { 1s }
+ # vmargin { 0.6vx }
+ @Fmth { @Col @Code A ! @Col @Code " " ! @Col @Code B ! @Col @Code " " !
+ @Col 1.0c @Wide ! @Col C }
+ @Fmta { @Col @Code A ! @Col @Code "{" ! @Col @Code B ! @Col @Code "}" !
+ @Col 1.0c @Wide ! @Col C }
+{
+@FirstRowh
+ A { "@Node" }
+@Rowa
+ A { " outline" }
+ B { box }
+ C { {@Code box}, {@Code curvebox}, {@Code shadowbox}, {@Code square},
+{@Code diamond}, {@Code polygon}, {@Code ellipse}, {@Code circle}, or
+any outline }
+@Rowa
+ A { " margin" }
+ B { 0.6f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " shadow" }
+ B { 0.4f }
+ C { any @I length }
+@Rowa
+ A { " sides" }
+ B { 3 }
+ C { any @I number (it will be rounded to the nearest integer) }
+@Rowa
+ A { " angle" }
+ B { 180d "/" sides }
+ C { any @I angle }
+@Rowa
+ A { " translate" }
+ B { }
+ C { empty, or @I point @Code to @I point }
+@Rowa
+ A { " outlinestyle" }
+ B { solid }
+ C { {@Code solid}, {@Code dashed}, {@Code cdashed}, {@Code dotted},
+{@Code noline}, or any sequence of one or more of these values }
+@Rowa
+ A { " outlinedashlength"}
+ B { 0.2f }
+ C { any @I length }
+@Rowa
+ A { " outlinewidth" }
+ B { thin }
+ C { {@Code thin}, {@Code medium}, {@Code thick}, or any @I length }
+@Rowa
+ A { " paint" }
+ B { nopaint }
+ C { @Code nopaint or any colour from Section {@NumberOf colour} }
+@Rowa
+ A { " font" }
+ B { }
+ C { any value suitable for the @Code "@Font" symbol }
+@Rowa
+ A { " break" }
+ B { }
+ C { any value suitable for the @Code "@Break" symbol }
+@Rowa
+ A { " format" }
+ B { "@Body" }
+ C { any object, usually containing {@Code "@Body"} }
+@Rowa
+ A { " valign"}
+ B { ctr }
+ C { {@Code "top"}, {@Code "ctr"}, {@Code "foot"}, or any length
+from Section {@NumberOf objects} }
+@Rowa
+ A { " vsize"}
+ B { }
+ C { empty, or any length from Section {@NumberOf objects} }
+@Rowa
+ A { " vindent"}
+ B { ctr }
+ C { {@Code "top"}, {@Code "ctr"}, {@Code "mctr"}, {@Code "foot"}, or any
+length from Section {@NumberOf objects} }
+@Rowa
+ A { " vstrut"}
+ B { no }
+ C { {@Code no}, {@Code yes}, or any length from Section {@NumberOf objects} }
+@Rowa
+ A { " vmargin" }
+ B { margin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " topmargin" }
+ B { vmargin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " footmargin" }
+ B { vmargin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " halign"}
+ B { ctr }
+ C { {@Code "left"}, {@Code "ctr"}, {@Code "right"}, or any length from Section {@NumberOf objects} }
+@Rowa
+ A { " hsize"}
+ B { }
+ C { empty, or any length from Section {@NumberOf objects} }
+@Rowa
+ A { " hindent"}
+ B { ctr }
+ C { {@Code "left"}, {@Code "ctr"}, {@Code "mctr"}, {@Code "right"}, or any
+length from Section {@NumberOf objects} }
+@Rowa
+ A { " hmargin" }
+ B { margin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " leftmargin" }
+ B { hmargin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " rightmargin" }
+ B { hmargin }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " hstrut"}
+ B { no }
+ C { {@Code no}, {@Code yes}, or any length from Section {@NumberOf objects} }
+@Rowa
+ A { " nodelabel"}
+ B { }
+ C { any object }
+@Rowa
+ A { " nodelabelmargin"}
+ B { 0.2f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " nodelabelfont"}
+ B { -2p }
+ C { any value suitable for the @Code "@Font" symbol }
+@Rowa
+ A { " nodelabelbreak"}
+ B { ragged nohyphen }
+ C { any value suitable for the @Code "@Break" symbol }
+@Rowa
+ A { " nodelabelformat"}
+ B { "@Body" }
+ C { any object, usually containing @Code "@Body" }
+@Rowa
+ A { " nodelabelpos"}
+ B { }
+ C { any @I point }
+@Rowa
+ A { " nodelabelangle"}
+ B { horizontal }
+ C { {@Code horizontal}, {@Code aligned}, or {@Code perpendicular};
+{@Code parallel}, {@Code antiparallel}, or any @I angle }
+@Rowa
+ A { " nodelabelprox"}
+ B { outside }
+ C { {@Code above}, {@Code below}, {@Code left}, {@Code right},
+{@Code inside}, or {@Code outside}; {@Code CTR}, {@Code N}, {@Code S},
+{@Code E}, {@Code W}, {@Code NE}, {@Code NW}, {@Code SW}, or {@Code SE}
+}
+@Rowa
+ A { " nodelabelctr"}
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { " nodelabeladjust"}
+ B { 0 0 }
+ C { any @I point }
+@Rowa
+ A { " alabelpos"}
+ B { NE }
+ C { any @I point }
+@Rowa
+ A { " blabelpos"}
+ B { NW }
+ C { any @I point }
+@Rowa
+ A { " clabelpos"}
+ B { SW }
+ C { any @I point }
+@Rowa
+ A { " dlabelpos"}
+ B { SE }
+ C { any @I point }
+}
+@DP
+Here is the complete list of standard link paths that may be given
+to the @Code "@Link" symbol. Each entry shows the link path name,
+any extra options relevant to this path, segments (shown using
+{@Code "outlinestyle { solid dashed }"}, and tags. All tags
+have directions pointing along the link from @Code FROM to
+{@Code TO}; these have been omitted for clarity. The @Code frompt
+and @Code topt options of @Code bezier are compulsory and denote the
+two control points (Section {@NumberOf dia_defi}).
+@IndentedList gap { 2v }
+
+@LI {
+@Code {
+"@Link"
+" path { line }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { line } from { A } to { B }
+}
+&2.5c
+#@Diag {
+#|1.5c B:: @Circle /0.8c A:: @Circle
+#//
+#@ShowTags @Link
+# pathstyle { solid dashed }
+# path { line } from { A } to { B }
+#}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { doubleline }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { doubleline } from { A } to { B }
+}
+&2.5c
+#@Diag {
+#|1.5c B:: @Circle /0.8c A:: @Circle
+#//
+#@ShowTags @Link
+# pathstyle { solid dashed }
+# path { line } from { A } to { B }
+#}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { curve }"
+" bias { 2.0f }"
+}
+||6ct
+@Diag {
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { curve } from { A } to { B }
+}
+&2.5c
+@Diag {
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { curve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { ccurve }"
+" bias { 2.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { ccurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { ccurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { bezier }"
+" frompt { A@CTR ++ { 3f 0 } }"
+" topt { B@CTR ++ { 3f 0 } }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { bezier } from { A } to { B }
+ frompt { A@CTR ++ { 3f 0 } }
+ topt { B@CTR ++ { 3f 0 } }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { bezier } from { A } to { B }
+ frompt { A@CTR ++ { 3f 0 } }
+ topt { B@CTR ++ { 3f 0 } }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { vhline }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { vhline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { vhline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { hvline }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { hvline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { hvline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { vhcurve }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { vhcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { vhcurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { hvcurve }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { hvcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { hvcurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { lvrline }"
+" bias { 2.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { lvrline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { lvrline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { rvlline }"
+" bias { 2.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { rvlline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { rvlline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { lvrcurve }"
+" bias { 2.0f }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { lvrcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { lvrcurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { rvlcurve }"
+" bias { 2.0f }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { rvlcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { rvlcurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { dwrapline }"
+" tbias { 2.0f }"
+" bias { 2.0f }"
+" fbias { 2.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle /2f
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { dwrapline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle /2f
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { dwrapline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { uwrapline }"
+" tbias { 2.0f }"
+" bias { 2.0f }"
+" fbias { 2.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+/2f A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { uwrapline } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+/2f |1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { uwrapline } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { dwrapcurve }"
+" tbias { 2.0f }"
+" bias { 2.0f }"
+" fbias { 2.0f }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+A:: @Circle /0.8c |1.5c B:: @Circle /2f
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { dwrapcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+|1.5c B:: @Circle /0.8c A:: @Circle /2f
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { dwrapcurve } from { A } to { B }
+}
+}
+
+@LI {
+@Code {
+"@Link"
+" path { uwrapcurve }"
+" tbias { 2.0f }"
+" bias { 2.0f }"
+" fbias { 2.0f }"
+" radius { 1.0f }"
+}
+||6ct
+@Diag {
+//0.5f
+/2f A:: @Circle /0.8c |1.5c B:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { uwrapcurve } from { A } to { B }
+}
+&2.5c
+@Diag {
+//0.5f
+/2f |1.5c B:: @Circle /0.8c A:: @Circle
+//
+@ShowTags @Link
+ pathstyle { solid dashed }
+ path { uwrapcurve } from { A } to { B }
+}
+}
+
+@EndList
+Here is the list of abbreviations for the standard paths (note
+that @Code curve and @Code acurve are the same). Each
+path also has an abbreviation which adds a forward arrow:
+@ID @Tab
+ @Fmta { @Col @Code { path "{" A "}" } ! @Col @Code "@"B ! @Col @Code "@"C }
+{
+@Rowa
+ A { line }
+ B { Line }
+ C { Arrow }
+@Rowa
+ A { doubleline }
+ B { DoubleLine }
+ C { DoubleArrow }
+@Rowa
+ A { curve }
+ B { Curve }
+ C { CurveArrow }
+@Rowa
+ A { acurve }
+ B { ACurve }
+ C { ACurveArrow }
+@Rowa
+ A { ccurve }
+ B { CCurve }
+ C { CCurveArrow }
+
+@Rowa
+ A { bezier }
+ B { Bezier }
+ C { BezierArrow }
+
+@Rowa
+ A { hvline }
+ B { HVLine }
+ C { HVArrow }
+@Rowa
+ A { vhline }
+ B { VHLine }
+ C { VHArrow }
+@Rowa
+ A { hvcurve }
+ B { HVCurve }
+ C { HVCurveArrow }
+@Rowa
+ A { vhcurve }
+ B { VHCurve }
+ C { VHCurveArrow }
+
+@Rowa
+ A { lvrline }
+ B { LVRLine }
+ C { LVRArrow }
+@Rowa
+ A { rvlline }
+ B { RVLLine }
+ C { RVLArrow }
+@Rowa
+ A { lvrcurve }
+ B { LVRCurve }
+ C { LVRCurveArrow }
+@Rowa
+ A { rvlcurve }
+ B { RVLCurve }
+ C { RVLCurveArrow }
+
+@Rowa
+ A { dwrapline }
+ B { DWrapLine }
+ C { DWrapArrow }
+@Rowa
+ A { uwrapline }
+ B { UWrapLine }
+ C { UWrapArrow }
+@Rowa
+ A { dwrapcurve }
+ B { DWrapCurve }
+ C { DWrapCurveArrow }
+@Rowa
+ A { uwrapcurve }
+ B { UWrapCurve }
+ C { UWrapCurveArrow }
+}
+Here is the complete list of options to the @Code "@Link" symbol. The
+options related to {@Code xlabel}, {@Code ylabel}, and {@Code zlabel}
+have been omitted where they are the same as the {@Code linklabel} options.
+@DP
+1fx @Break @Tab
+ hmargin { 1s }
+ # vmargin { 0.6vx }
+ @Fmth { @Col @Code A ! @Col @Code " " ! @Col @Code B ! @Col @Code " " !
+ @Col 1.0c @Wide ! @Col C }
+ @Fmta { @Col @Code A ! @Col @Code "{" ! @Col @Code B ! @Col @Code "}" !
+ @Col 1.0c @Wide ! @Col C }
+{
+@Rowh
+ A { "@Link" }
+@Rowa
+ A { " path" }
+ B { line }
+ C { {@Code "line"}, {@Code "doubleline"}, {@Code "curve"}, {@Code "acurve"},
+{@Code "ccurve"}, {@Code "bezier"},
+{@Code "vhline"}, {@Code "hvline"}, {@Code "vhcurve"}, {@Code "hvcurve"},
+{@Code "lvrline"}, {@Code "rvlline"}, {@Code "lvrcurve"}, {@Code "rvlcurve"},
+{@Code "dwrapline"}, {@Code "uwrapline"}, {@Code "dwrapcurve"},
+{@Code "uwrapcurve"}, or any path }
+@Rowa
+ A { " from"}
+ B { 0,0 }
+ C { any @I point or node label }
+@Rowa
+ A { " to"}
+ B { 1,1 }
+ C { any @I point or node label }
+@Rowa
+ A { " bias"}
+ B { 2.0f }
+ C { any @I length }
+@Rowa
+ A { " fbias"}
+ B { 2.0f }
+ C { any @I length }
+@Rowa
+ A { " tbias"}
+ B { 2.0f }
+ C { any @I length }
+@Rowa
+ A { " radius"}
+ B { 1.0f }
+ C { any @I length }
+@Rowa
+ A { " xindent"}
+ B { 0.8f }
+ C { any @I length }
+@Rowa
+ A { " zindent"}
+ B { 0.8f }
+ C { any @I length }
+@Rowa
+ A { " frompt"}
+ B { 0 0 }
+ C { any @I point }
+@Rowa
+ A { " topt"}
+ B { 0 0 }
+ C { any @I point }
+@Rowa
+ A { " pathstyle" }
+ B { solid }
+ C { {@Code solid}, {@Code dashed}, {@Code cdashed}, {@Code dotted},
+{@Code noline}, or any sequence of one or more of these values }
+@Rowa
+ A { " pathdashlength"}
+ B { 0.2f }
+ C { any @I length }
+@Rowa
+ A { " pathwidth" }
+ B { thin }
+ C { {@Code thin}, {@Code medium}, {@Code thick}, or any @I length }
+@Rowa
+ A { " pathgap" }
+ B { thin }
+ C { {@Code thin}, {@Code medium}, {@Code thick}, or any @I length }
+@Rowa
+ A { " arrow"}
+ B { no }
+ C { {@Code no}, {@Code yes}, {@Code forward}, {@Code back},
+or {@Code both} }
+@Rowa
+ A { " arrowstyle"}
+ B { solid }
+ C { {@Code solid}, {@Code halfopen}, {@Code open}, {@Code curvedsolid},
+{@Code curvedhalfopen}, or {@Code curvedopen} }
+@Rowa
+ A { " arrowwidth"}
+ B { 0.3f }
+ C { any @I length }
+@Rowa
+ A { " arrowlength"}
+ B { 0.5f }
+ C { any @I length }
+@Rowa
+ A { " linklabel"}
+ B { }
+ C { any object }
+@Rowa
+ A { " linklabelmargin"}
+ B { 0.2f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " linklabelfont"}
+ B { -2p }
+ C { any value suitable for the @Code "@Font" symbol }
+@Rowa
+ A { " linklabelbreak"}
+ B { ragged nohyphen }
+ C { any value suitable for the @Code "@Break" symbol }
+@Rowa
+ A { " linklabelformat"}
+ B { "@Body" }
+ C { any object, usually containing @Code "@Body" }
+@Rowa
+ A { " linklabelpos"}
+ B { }
+ C { any @I point }
+@Rowa
+ A { " linklabelangle"}
+ B { horizontal }
+ C { {@Code horizontal}, {@Code aligned}, or {@Code perpendicular};
+{@Code parallel}, {@Code antiparallel}, or any @I angle }
+@Rowa
+ A { " linklabelprox"}
+ B { above }
+ C { {@Code above}, {@Code below}, {@Code left}, {@Code right},
+{@Code inside}, or {@Code outside}; {@Code CTR}, {@Code N}, {@Code S},
+{@Code E}, {@Code W}, {@Code NE}, {@Code NW}, {@Code SW}, or {@Code SE}
+}
+@Rowa
+ A { " linklabelctr"}
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { " linklabeladjust"}
+ B { 0 0 }
+ C { any @I point }
+@Rowa
+ A { " xlabelpos"}
+ B { LFROM }
+ C { any @I point }
+@Rowa
+ A { " ylabelpos"}
+ B { LMID }
+ C { any @I point }
+@Rowa
+ A { " ylabelctr"}
+ B { yes }
+ C { @Code yes or @Code no }
+@Rowa
+ A { " zlabelpos"}
+ B { LTO }
+ C { any @I point }
+@Rowa
+ A { " fromlabel"}
+ B { }
+ C { any object }
+@Rowa
+ A { " fromlabelmargin"}
+ B { 0f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " fromlabelfont"}
+ B { }
+ C { Any value suitable for the @Code "@Font" symbol }
+@Rowa
+ A { " fromlabelbreak"}
+ B { ragged nohyphen }
+ C { Any value suitable for the @Code "@Break" symbol }
+@Rowa
+ A { " fromlabelformat"}
+ B { "@Body" }
+ C { any object, usually containing @Code "@Body" }
+@Rowa
+ A { " fromlabelpos"}
+ B { FROM }
+ C { any @I point }
+@Rowa
+ A { " fromlabelangle"}
+ B { antiparallel }
+ C { {@Code horizontal}, {@Code aligned}, or {@Code perpendicular};
+{@Code parallel}, {@Code antiparallel}, or any @I angle }
+@Rowa
+ A { " fromlabelprox"}
+ B { W }
+ C { {@Code above}, {@Code below}, {@Code left}, {@Code right},
+{@Code inside}, or {@Code outside}; {@Code CTR}, {@Code N}, {@Code S},
+{@Code E}, {@Code W}, {@Code NE}, {@Code NW}, {@Code SW}, or {@Code SE}
+}
+@Rowa
+ A { " fromlabelctr"}
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { " fromlabeladjust"}
+ B { 0 0 }
+ C { any @I point }
+@Rowa
+ A { " tolabel"}
+ B { }
+ C { any object }
+@Rowa
+ A { " tolabelmargin"}
+ B { 0f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " tolabelfont"}
+ B { }
+ C { Any value suitable for the @Code "@Font" symbol }
+@Rowa
+ A { " tolabelbreak"}
+ B { ragged nohyphen }
+ C { Any value suitable for the @Code "@Break" symbol }
+@Rowa
+ A { " tolabelformat"}
+ B { "@Body" }
+ C { any object, usually containing @Code "@Body" }
+@Rowa
+ A { " tolabelpos"}
+ B { TO }
+ C { any @I point }
+@Rowa
+ A { " tolabelangle"}
+ B { parallel }
+ C { {@Code horizontal}, {@Code aligned}, or {@Code perpendicular};
+{@Code parallel}, {@Code antiparallel}, or any @I angle }
+@Rowa
+ A { " tolabelprox"}
+ B { W }
+ C { {@Code above}, {@Code below}, {@Code left}, {@Code right},
+{@Code inside}, or {@Code outside}; {@Code CTR}, {@Code N}, {@Code S},
+{@Code E}, {@Code W}, {@Code NE}, {@Code NW}, {@Code SW}, or {@Code SE}
+}
+@Rowa
+ A { " tolabelctr"}
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { " tolabeladjust"}
+ B { 0 0 }
+ C { any @I point }
+}
+@DP
+Here is the complete list of options to the @Code "@Tree" symbol:
+@DP @OneRow 1fx @Break @Tab
+ hmargin { 1s }
+ # vmargin { 0.6vx }
+ @Fmth { @Col @Code A ! @Col @Code " " ! @Col @Code B ! @Col @Code " " !
+ @Col 1.0c @Wide ! @Col C }
+ @Fmta { @Col @Code A ! @Col @Code "{" ! @Col @Code B ! @Col @Code "}" !
+ @Col 1.0c @Wide ! @Col C }
+{
+@Rowh
+ A { "@Tree" }
+@Rowa
+ A { " treehindent" }
+ B { ctr }
+ C { {@Code left}, {@Code ctr}, {@Code right}, or any length from
+Section {@NumberOf objects} }
+}
+@DP
+The @Code "@HTree" option has a similar @Code "treevindent" option,
+which may be {@Code "top"}, {@Code ctr}, {@Code foot}, or any length
+from Section {@NumberOf objects}.
+@PP
+The @Code "@Diag" symbol and to the {@Code "@DiagSetup"} setup
+file symbol have all of the options of {@Code "@Node"}, {@Code "@Link"},
+{@Code "@Tree"}, and {@Code "@HTree"}. They also have the following
+options:
+@DP
+1fx @Break @Tab
+ hmargin { 1s }
+ # vmargin { 0.6vx }
+ @Fmth { @Col @Code A ! @Col @Code " " ! @Col @Code B ! @Col @Code " " !
+ @Col 1.0c @Wide ! @Col C }
+ @Fmta { @Col @Code A ! @Col @Code "{" ! @Col @Code B ! @Col @Code "}" !
+ @Col 1.0c @Wide ! @Col C }
+{
+@Rowh
+ A { "@Diag" }
+@Rowa
+ A { " maxlabels" }
+ B { 200 }
+ C { any whole number }
+@Rowa
+ A { " save" }
+ B { no }
+ C { @Code no or @Code yes }
+@Rowa
+ A { " treehsep" }
+ B { 0.5f }
+ C { any length from Section {@NumberOf objects} }
+@Rowa
+ A { " treevsep" }
+ B { 0.5f }
+ C { any length from Section {@NumberOf objects} }
+}
+@DP
+The following lists define all the ways to specify numbers, lengths,
+angles, points, and booleans. Brief explanations appear to the right,
+with the symbols' precedences in parentheses.
+@DP
+1fx @Break @Tab
+ # vmargin { 0.6vx }
+ @Fmth { @Col { &@DisplayIndent A } ! @Col }
+ @Fmta { @Col { &@DisplayIndent &2s A } ! @Col B }
+{
+
+@Rowh A { @I number } vmargin { 0.2vx }
+@Rowh
+@Rowa
+ A { {@Sym minus}27.56 }
+ B { or any literal number }
+@Rowa
+ A { @Code sqrt @I number }
+ B { square root (99) }
+@Rowa
+ A { @Code abs @I number }
+ B { absolute value (99) }
+@Rowa
+ A { @Code ceiling @I number }
+ B { least integer greater than or equal to (99) }
+@Rowa
+ A { @Code floor @I number }
+ B { greatest integer less than or equal to (99) }
+@Rowa
+ A { @Code truncate @I number }
+ B { delete fractional part (99) }
+@Rowa
+ A { @Code round @I number }
+ B { round to nearest integer (99) }
+@Rowa
+ A { @Code sin @I angle }
+ B { sine of angle measured in degrees (99) }
+@Rowa
+ A { @Code cos @I angle }
+ B { cosine of angle measured in degrees (99) }
+@Rowa
+ A { @I number @Code atan @I number }
+ B { arc tangent of first over second (98) }
+@Rowa
+ A { @I number @Code exp @I number }
+ B { first number raised to second number (98) }
+@Rowa
+ A { @I number @Code log @I number }
+ B { logarithm of second number to base first (98) }
+@Rowa
+ A { @I number @Code rand @I number }
+ B { random real number in this range inclusive (98) }
+@Rowa
+ A { @I number @Code max @I number }
+ B { the larger of two numbers (98) }
+@Rowa
+ A { @I number @Code min @I number }
+ B { the smaller of two numbers (98) }
+@Rowa
+ A { @I number @Code "*" @I number }
+ B { the product of two numbers (97) }
+@Rowa
+ A { @I number @Code "/" @I number }
+ B { real-valued division (96, left associative) }
+@Rowa
+ A { @I length @Code "/" @I length }
+ B { the ratio of two lengths (96, left associative) }
+@Rowa
+ A { @I angle @Code "/" @I angle }
+ B { the ratio of two angles (96, left associative) }
+@Rowa
+ A { @I number @Code idiv @I number }
+ B { integer division of two numbers (96, left associative) }
+@Rowa
+ A { @I number @Code mod @I number }
+ B { integer remainder when first divided by second (96) }
+@Rowa
+ A { @I number @Code "+" @I number }
+ B { sum of two numbers (96, left associative) }
+@Rowa
+ A { @Code "+" @I number }
+ B { identity operation (96) }
+@Rowa
+ A { @I number @Sym minus @I number }
+ B { difference of two numbers (96, left associative) }
+@Rowa
+ A { @Sym minus @I number }
+ B { negation (96) }
+@Rowa
+ A { @Code sides }
+ B { ({@Code outline} only) value of the node's @Code sides option }
+
+@Rowh
+@Rowh
+@Rowh
+@Rowh
+@Rowh A { @I length } vmargin { 0.2vx }
+@Rowh
+@Rowa
+ A { 0 }
+ B { zero }
+@Rowa
+ A { @Code xsize }
+ B { ({@Code outline} only) distance to right boundary }
+@Rowa
+ A { @Code ysize }
+ B { ({@Code outline} only) distance to top boundary }
+@Rowa
+ A { @Code xmark }
+ B { ({@Code outline} only) distance to column mark }
+@Rowa
+ A { @Code ymark }
+ B { ({@Code outline} only) distance to row mark }
+@Rowa
+ A { @Code margin }
+ B { ({@Code outline} only) value of the node's @Code margin option }
+@Rowa
+ A { @Code shadow }
+ B { ({@Code outline} only) value of the node's @Code shadow option }
+@Rowa
+ A { @I number @Code i }
+ B { @I number inches (100) }
+@Rowa
+ A { @I number @Code c }
+ B { @I number centimetres (100) }
+@Rowa
+ A { @I number @Code p }
+ B { @I number points (100) }
+@Rowa
+ A { @I number @Code m }
+ B { @I number ems (100) }
+@Rowa
+ A { @I number @Code s }
+ B { @Code 1s is the current width of a space (100) }
+@Rowa
+ A { @I number @Code v }
+ B { @Code 1v is the current inter-line space (100) }
+@Rowa
+ A { @I number @Code f }
+ B { @Code 1f is the size of the current font (100) }
+@Rowa
+ A { @Code "xcoord" @I point }
+ B { the @I x coordinate of the point (99) }
+@Rowa
+ A { @Code "ycoord" @I point }
+ B { the @I y coordinate of the point (99) }
+@Rowa
+ A { @Code abs @I length }
+ B { absolute value (99) }
+@Rowa
+ A { @I length @Code rand @I length }
+ B { random real length in this range inclusive (98) }
+@Rowa
+ A { @I length @Code max @I length }
+ B { the larger of two lengths (98) }
+@Rowa
+ A { @I length @Code min @I length }
+ B { the smaller of two lengths (98) }
+@Rowa
+ A { @I point @Code "distance" @I point }
+ B { (non-negative) distance between two points (98) }
+@Rowa
+ A { @I length @Code "*" @I number }
+ B { length multiplied by number (97) }
+@Rowa
+ A { @I number @Code "*" @I length }
+ B { length multiplied by number (97) }
+@Rowa
+ A { @I length @Code "/" @I number }
+ B { length divided by number (96, left associative) }
+@Rowa
+ A { @I length @Code "+" @I length }
+ B { sum of two lengths (96, left associative) }
+@Rowa
+ A { @Code "+" @I length }
+ B { identity operation (96) }
+@Rowa
+ A { @I length @Sym minus @I length }
+ B { difference of two lengths (96, left associative) }
+@Rowa
+ A { @Sym minus @I length }
+ B { negation (96) }
+
+@Rowh
+@Rowh
+@Rowh
+@Rowh
+@Rowh A { @I angle } vmargin { 0.2vx }
+@Rowh
+@Rowa
+ A { @I number @Code d }
+ B { @I number degrees (100) }
+@Rowa
+ A { @I number }
+ B { @I number degrees (@Code d is optional) (100) }
+@Rowa
+ A { @Code parallel }
+ B { ({@Code labelangle} options only) angle parallel to curve at label point }
+@Rowa
+ A { @Code antiparallel }
+ B { ({@Code labelangle} options only) angle antiparallel to curve at label point }
+@Rowa
+ A { @Code perpendicular }
+ B { ({@Code labelangle} options only) angle perpendicular to curve at label point }
+@Rowa
+ A { @Code antiperpendicular }
+ B { ({@Code labelangle} options only) angle antiperpendicular to curve at label point }
+@Rowa
+ A { {@I label}{@Code "??ANGLE"} }
+ B { angle parallel to curve at {@I label} if known, else @Code "0d" (99) }
+@Rowa
+ A { @Code anglefix @I angle }
+ B { @I angle normalized to between @Code 0d inclusive and @Code 360d exclusive (99) }
+@Rowa
+ A { @Code abs @I angle }
+ B { absolute value (99) }
+@Rowa
+ A { @I length @Code atan @I length }
+ B { arc tangent of first over second (98) }
+@Rowa
+ A { @I point @Code "angleto" @I point }
+ B { angle from first point to second (98) }
+@Rowa
+ A { @I angle @Code rand @I angle }
+ B { random angle in this range inclusive (98) }
+@Rowa
+ A { @I angle @Code max @I angle }
+ B { the larger of two angles (98) }
+@Rowa
+ A { @I angle @Code min @I angle }
+ B { the smaller of two angles (98) }
+@Rowa
+ A { @I angle @Code "*" @I number }
+ B { angle multiplied by number (97) }
+@Rowa
+ A { @I number @Code "*" @I angle }
+ B { angle multiplied by number (97) }
+@Rowa
+ A { @I angle @Code "/" @I number }
+ B { division of angle by number (96, left associative) }
+@Rowa
+ A { @I angle @Code "+" @I angle }
+ B { sum of two angles (96, left associative) }
+@Rowa
+ A { @Code "+" @I angle }
+ B { identity operation (96) }
+@Rowa
+ A { @I angle @Sym minus @I angle }
+ B { difference of two angles (96, left associative) }
+@Rowa
+ A { @Sym minus @I angle }
+ B { negation (96) }
+@Rowa
+ A { @Code angle }
+ B { ({@Code outline} only) value of the node's @Code angle option }
+
+
+@Rowh
+@Rowh
+@Rowh
+@Rowh
+@Rowh A { @I point } vmargin { 0.2vx }
+@Rowh
+@Rowa
+ A { @I label }
+ B { a previously defined label }
+@Rowa
+ A { {@I any}{@Code "??"}{@I label} }
+ B { {@I any}{@Code "@"}{@I label} if sensible, else {@I any} (99) }
+@Rowa
+ A { @Code "prev" }
+ B { the previous point in a shape }
+@Rowa
+ A { @I length @Code "atangle" @I angle }
+ B { point at distance and angle from origin (89) }
+@Rowa
+ A { @I "point/tag" @Code "boundaryatangle" @I angle }
+ B { @I {point}, or point on boundary of @I tag at @I angle (89) }
+@Rowa
+ A { @I point @Code "**" @I number }
+ B { multiplication of point by number (88) }
+@Rowa
+ A { @I point @Code "++" @I point }
+ B { vector sum of two points (87) }
+@Rowa
+ A { @I point {@Sym minus}{@Sym minus} @I point }
+ B { vector difference of two points (87) }
+@Rowa
+ A { @I {number, number} }
+ B { @I x and @I y coordinates with respect to base (70) }
+@Rowa
+ A { @I {length length} }
+ B { @I x and @I y distance from origin (5) }
+@Rowa
+ A { @Code from }
+ B { ({@Code path} only) the value of the link's @Code from option }
+@Rowa
+ A { @Code to }
+ B { ({@Code path} only) the value of the link's @Code to option }
+
+@Rowh
+@Rowh
+@Rowh
+@Rowh
+@Rowh A { @I boolean } vmargin { 0.2vx }
+@Rowh
+@Rowa
+ A { @I number @Code "=" @I number }
+ B { @Eq { non = }; also between lengths (79) }
+@Rowa
+ A { @I number @Code "!=" @I number }
+ B { @Eq { non != }; also between lengths (79) }
+@Rowa
+ A { @I number @Code "==" @I number }
+ B { @Eq { non = } between angles (79) }
+@Rowa
+ A { @I number @Code "!==" @I number }
+ B { @Eq { non != } between angles (79) }
+@Rowa
+ A { @I number @Code "<=" @I number }
+ B { @Eq { non <= }; also between lengths (79) }
+@Rowa
+ A { @I number @Code "<" @I number }
+ B { @Eq { non < }; also between lengths (79) }
+@Rowa
+ A { @I number @Code ">=" @I number }
+ B { @Eq { non >= }; also between lengths (79) }
+@Rowa
+ A { @I number @Code ">" @I number }
+ B { @Eq { non > }; also between lengths (79) }
+@Rowa
+ A { @Code "not" @I boolean }
+ B { Logical not (78) }
+@Rowa
+ A { @I boolean @Code "and" @I boolean }
+ B { Logical and (77) }
+@Rowa
+ A { @I boolean @Code "or" @I boolean }
+ B { Logical or (76) }
+@Rowa
+ A { @I boolean @Code "xor" @I boolean }
+ B { Logical exclusive or (76) }
+
+}
+@DP
+A length is represented in PostScript by a single number on the operand
+stack; so is an angle. Therefore all number operations can be applied
+to lengths and angles as well, but the results will not always be
+useful. For example, rounding a length to the nearest integer is
+not a useful thing to do because the result depends on the basic unit
+(what does 1 equal as a length?) which is implementation-dependent and
+genuinely subject to change. Rounding the @I ratio of two lengths does
+make sense. The above is an attempt to list only the useful operations;
+but if you really need the logarithm of an angle, you can have it.
+@PP
+Angles are a little more amenable to this kind of thing because they are
+always measured in degrees. However, angles suffer from the problem that
+{@Code 0d} is really the same angle as {@Code 360d}. For this reason,
+separate equality and inequality operators for angles are provided which
+ignore multiples of {@Code 360d}, and less than and similar relations
+are not defined for angles, because they inherently are not well
+defined. See also the @Code anglefix symbol above.
+@PP
+A point is represented by two lengths (which are numbers) on the
+stack. Those familiar with PostScript and willing to sacrifice portability
+and increase their risk of error can therefore write, for example,
+@OneCol { @I point @Code "exch" } to obtain the reflection of a point about
+the main diagonal, and so on.
+@PP
+The following may have a result of any type, depending on
+their options. The options and result may be a
+sequence of things as required in shapes, including @Code "[]" and
+so forth.
+@IndentedList
+@LI @OneRow lines @Break {
+@Code if
+ @Code "cond {" @I boolean @Code "}"
+ @Code "then {" @I anything @Code "}"
+ @Code "else {" @I anything @Code "}"
+}
+@LI @OneRow lines @Break {
+@I angle @Code quadcase
+ @Code "0 {" @I anything @Code "}"
+ @Code "0-90 {" @I anything @Code "}"
+ @Code "90 {" @I anything @Code "}"
+ @Code "90-180 {" @I anything @Code "}"
+ @Code "180 {" @I anything @Code "}"
+ @Code "180-270 {" @I anything @Code "}"
+ @Code "270 {" @I anything @Code "}"
+ @Code "270-360 {" @I anything @Code "}"
+}
+@LI @OneRow lines @Break {
+@I number @Code signcase
+ @Code "neg {" @I anything @Code "}"
+ @Code "zero {" @I anything @Code "}"
+ @Code "pos {" @I anything @Code "}"
+}
+@LI @OneRow lines @Break {
+@Code "xloop from {" @I number "} to {" @I number "} by {" @I number "} do {"
+ @I anything
+@Code "}"
+}
+@LI @OneRow lines @Break {
+@Code "yloop from {" @I number "} to {" @I number "} by {" @I number "} do {"
+ @I anything
+@Code "}"
+}
+@LI @OneRow lines @Break {
+@Code "zloop from {" @I number "} to {" @I number "} by {" @I number "} do {"
+ @I anything
+@Code "}"
+}
+@EndList
+The @Code "if" symbol returns @Code "then" or @Code "else" depending on
+the value of {@Code "cond"}, and @Code "signcase" returns {@Code "neg"},
+{@Code zero}, or {@Code pos} depending on whether @I number (which
+may also be an angle or a length) is negative, zero, or positive. The
+@Code "quadcase" symbol decides whether the given angle points in
+one of the four horizontal or vertical directions, or into the quadrants
+between them, and returns the appropriate option. Don't be misled by
+the unorthodox option names; it is not possible to give your own
+ranges, only these ones.
+@PP
+The loops return a sequence of
+repetitions of {@I anything}; any occurrences of {@Code x} in
+{@Code xloop} will be replaced by the current value of the loop counter,
+and similarly for the other loops.
+@PP
+Symbols not covered in this summary are the retagging symbol @Code "::"
+(Section {@NumberOf dia_tags}); the symbols available within the
+{@Code "@Tree"} symbol (Section {@NumberOf dia_posi}); and {@Code ":<"},
+{@Code ":="}, {@Code "@ShowPoints"}, {@Code "@ShowTags"}, and
+{@Code "@ShowDirections"} from Section {@NumberOf dia_defi}.
+@End @Section
diff --git a/doc/user/dia_tags b/doc/user/dia_tags
new file mode 100644
index 0000000..91cd7a1
--- /dev/null
+++ b/doc/user/dia_tags
@@ -0,0 +1,168 @@
+@Section
+ @Tag { dia_tags }
+ @Title { Tags }
+@Begin
+@PP
+In addition to drawing the outline, each of the standard node
+types also attaches names, called {@I tags}, to certain points. For
+example, the @Code "@Ellipse" symbol creates nine tags:
+@ID {
+@Code {
+"@Ellipse"
+}
+||7ct
+@Diag {
+//1.0f
+@ShowTags @Ellipse
+ vsize { 1.5c }
+ hsize { 3.0c }
+}
+}
+The standard link symbols also create tags:
+@ID {
+@Code {
+"@Link"
+}
+||7ct
+@Diag {
+2.5c @High 2c @Wide
+//
+@ShowTags @Arrow
+ from { 0,0.8 }
+ to { 1,0 }
+}
+}
+The names and positions of all standard tags may be found in the summary
+(Section {@NumberOf dia_summ}) at the end of this chapter. Each tag
+stands for a point, and may be used wherever a point is required:
+@ID {
+@Code {
+"@Ellipse { Hello, world }"
+"//"
+"@Link from { SW } to { SE }"
+}
+||7ct
+@Diag {
+@Ellipse { Hello, world }
+//
+@Link from { SW } to { SE }
+}
+}
+A tag may only be used later in the text of the diagram than the place
+where it is defined.
+@PP
+Standard tags like @Code N and @Code S are not much use as they are,
+since in general there will be many nodes and hence many @Code N and
+@Code S tags. The retagging symbol, {@Code "::"}, solves this problem:
+@ID {
+@Code {
+"A:: @Ellipse"
+}
+||7ct
+@Diag {
+//1.5f
+@ShowTags {
+A:: @Ellipse
+ vsize { 1.5c }
+ hsize { 3.0c }
+}
+}
+}
+Within the following object, the points have their original tags, but
+afterwards the names are changed by prefixing the word preceding
+{@Code "::"}, plus a @Code "@" character, to each one. These longer
+tags may be used exactly like the others:
+@ID {
+@Code {
+"A:: @Ellipse { Hello, world }"
+"//"
+"@Link from { A@SW } to { A@SE }"
+}
+||7ct
+@Diag {
+A:: @Ellipse { Hello, world }
+//
+@Link from { A@SW } to { A@SE }
+}
+}
+The retagging symbol may be applied to links, and indeed to arbitrary
+objects; it will retag every tag within the following object, even
+tags that have already been retagged:
+@ID {
+@Code {
+"A:: {"
+" 1:: @Ellipse"
+" vsize { 1.0c }"
+" hsize { 2.5c }"
+" @DP"
+" @DP"
+" 2:: @Ellipse"
+" vsize { 1.0c }"
+" hsize { 2.5c }"
+"}"
+}
+||7ct
+@Diag {
+//1.0f
+@ShowTags {
+A:: {
+ 1:: @Ellipse
+ vsize { 1.0c }
+ hsize { 2.5c }
+ @DP
+ @DP
+ 2:: @Ellipse
+ vsize { 1.0c }
+ hsize { 2.5c }
+}
+}
+}
+}
+In practice one usually only retags individual nodes. It is best to
+use only upper-case letters and digits in tags, because Lout and
+PostScript have tags of their own containing lower-case letters, and
+any mixup causes total disaster.
+@PP
+When a tag lies within the object following some node, it is
+automatically retagged in this way with tag {@Code IN}. For example, in
+@ID @Code {
+"@Square"
+"@Circle Hello"
+}
+the circle lies within the square, and what you get in effect is
+@ID @Code {
+"@Square"
+"IN:: @Circle Hello"
+}
+This prevents confusion between the tags of the inner and outer nodes. This
+retagging cannot be left to the user's discretion, owing to unexpected
+effects on the positioning of labels of the outer node if inner tags are
+not retagged.
+@PP
+Although @Code from and @Code to are just two of several options within
+@Code "@Diag" where a point is expected, and hence where a tag may be
+given, they have a special virtue not shared by any other options. It is
+possible to give the name of an entire node, not just a tag denoting one
+point, to them:
+@ID {
+@Code {
+"A:: @Circle"
+"@DP"
+"B:: @Ellipse { Hello, world }"
+"//"
+"@Link from { A } to { B }"
+}
+||7ct
+@Diag {
+A:: @Circle
+@DP
+B:: @Ellipse { Hello, world }
+//
+@Link from { A } to { B }
+}
+}
+This will select a point on the outline of the named node, appropriate
+to the type of link being drawn. It is extremely useful, of course, but
+potentially confusing: @Code A and @Code B do not denote points and are
+not tags, strictly speaking, at all.
+@End @Section
diff --git a/doc/user/dia_tree b/doc/user/dia_tree
new file mode 100644
index 0000000..d16f2bc
--- /dev/null
+++ b/doc/user/dia_tree
@@ -0,0 +1,379 @@
+@Section
+ @Tag { dia_tree }
+ @Title { Trees }
+@Begin
+@PP
+@@Diag offers some symbols for producing tree diagrams, using the
+tree. @Index { @Code "@Tree" symbol in @@Diag }
+@Code "@Tree" symbol, which may appear anywhere within the nodes part:
+@ID @OneRow @Code {
+"@Diag {"
+" ..."
+" @Tree { ... }"
+" ..."
+"}"
+}
+Within this symbol, new symbols {@Code "@LeftSub"}, {@Code "@RightSub"},
+{@Code "@FirstSub"}, {@Code "@NextSub"}, and {@Code "@StubSub"} become
+available. The first two are used to get a (non-empty) binary tree:
+@ID @OneRow {
+@Code {
+"@Tree {"
+" @Circle A"
+" @LeftSub {"
+" @Circle B"
+" @LeftSub @Square C"
+" @RightSub @Square D"
+" }"
+" @RightSub @Circle E"
+"}"
+}
+||7ct
+@Diag {
+@Tree {
+ @Circle A
+ @LeftSub {
+ @Circle B
+ @LeftSub @Square C
+ @RightSub @Square D
+ }
+ @RightSub @Circle E
+}
+}
+}
+The root of the tree, which must be a single node but may have any
+outline, comes first. After that comes the @Code "@LeftSub" symbol
+followed by the left subtree, which must be enclosed in braces unless
+it consists of a single node. After that comes the @Code "@RightSub"
+symbol followed by the right subtree, again enclosed in braces unless it
+consists of a single node. These rules apply recursively and will
+produce a binary tree of arbitrary size and depth. If a node has no
+left or right subtree, leave out the corresponding @Code "@LeftSub" or
+@Code "@RightSub" symbol.
+@PP
+A similar system using @Code "@FirstSub" and @Code "@NextSub" produces
+trees in which each node may have arbitrarily many children:
+@ID @OneRow {
+@Code {
+"@Tree {"
+" @Circle A"
+" @FirstSub {"
+" @Circle B"
+" @FirstSub @Square C"
+" @NextSub @Square D"
+" }"
+" @NextSub @Circle E"
+" @NextSub @Circle F"
+"}"
+}
+||7ct
+@Diag {
+@Tree {
+ @Circle A
+ @FirstSub {
+ @Circle B
+ @FirstSub @Square C
+ @NextSub @Square D
+ }
+ @NextSub @Circle E
+ @NextSub @Circle F
+}
+}
+}
+The first subtree is preceded by {@Code "@FirstSub"}, and subsequent
+trees are preceded by {@Code "@NextSub"}. The subtrees are spaced
+at equal separations from each other, with the root centred over
+them, in contrast to the binary tree arrangement in which the two
+subtrees are positioned to the left and right of the root, never
+intruding into the space beneath it.
+@PP
+Although each subtree must contain a node for its root, it is not hard
+to get around this:
+@ID @OneRow {
+@Code {
+"@Tree"
+"{"
+"@Circle"
+"@FirstSub @Circle"
+"@NextSub pathstyle { noline }"
+" @Circle outlinestyle { noline }"
+" ..."
+"@NextSub @Circle"
+"}"
+}
+||7ct
+@Diag {
+@Tree
+{
+@Circle
+@FirstSub @Circle
+@NextSub pathstyle { noline }
+ @Circle outlinestyle { noline }
+ ...
+@NextSub @Circle
+}
+}
+}
+Clumsy as this is, it often assists in placing the unenclosed object
+in a way consistent with the surrounding nodes, and offers margins
+and so forth which help with fine-tuning its position.
+@PP
+The fifth subtree symbol, {@Code "@StubSub"}, produces a stub subtree:
+@ID @OneRow {
+@Code {
+"@Tree {"
+"@Circle @Eq { a }"
+"@StubSub @Eq { T tsub a }"
+"}"
+}
+||7ct
+@Diag {
+@Tree {
+@Circle @Eq { a }
+@StubSub @Eq { T tsub a }
+}
+}
+}
+Unlike the other subtree symbols, {@Code "@StubSub"} is not followed
+by a subtree with a node for its root; rather, it is followed by an
+arbitrary object, and the path is drawn around this stub object, which
+is placed directly underneath the parent node with zero vertical
+separation. In practice, it is usually necessary to attach margins to
+the following object; the easiest way to do that is to enclose it in
+{@Code "@Box outlinestyle { noline }"}. An example appears below.
+@PP
+It is possible to mix the three subtree types, by having binary tree
+symbols following some nodes, non-binary tree symbols following
+others, and a single {@Code "@StubSub"} following others. However,
+at any one node the subtrees must be all either binary, non-binary,
+or stub.
+@PP
+The subtree symbols have all of the options of {@Code "@Link"}, and
+these apply to the link drawn from the parent of the root of the subtree
+to the root of the subtree (or anticlockwise around the stub object):
+@ID @OneRow {
+@Code {
+"@Tree {"
+" @Circle A"
+" @LeftSub"
+" arrow { yes }"
+" xlabel { 1 }"
+" @Circle B"
+" @RightSub"
+" arrow { yes }"
+" xlabel { 2 }"
+" @Circle C"
+"}"
+}
+||7ct
+@Diag {
+@Tree {
+ @Circle A
+ @LeftSub
+ arrow { yes }
+ xlabel { 1 }
+ @Circle B
+ @RightSub
+ arrow { yes }
+ xlabel { 2 }
+ @Circle C
+}
+}
+}
+To get reverse arrows use @Code "arrow { back }" as usual.
+@PP
+The subtree symbols do not need @Code from and @Code to options,
+because they already know which nodes they are linking together. However,
+you may use @Code from or @Code to to give a tag specifying a particular
+point within the node:
+@ID @OneRow {
+@Code {
+"@Tree {"
+"@Circle"
+"@LeftSub from { S } to { N }"
+" @Isosceles vsize { 2f }"
+"@RightSub from { S } to { N }"
+" @Isosceles vsize { 2f }"
+"}"
+}
+||7ct
+@Diag
+{
+@Tree {
+@Circle
+@LeftSub from { S } to { N }
+ @Isosceles vsize { 2f }
+@RightSub from { S } to { N }
+ @Isosceles vsize { 2f }
+}
+}
+}
+In this example both links go from the @Code S tag of the parent node to the
+@Code N tag of the child node (at the apex of the iscosceles triangle). These
+options also work for {@Code "@StubSub"}, where they refer to the start and
+end of the stub path:
+@ID @OneRow {
+@Code {
+"@Tree {"
+"@Circle @Eq { a }"
+"@StubSub"
+" from { SW }"
+" to { SE }"
+"@Box outlinestyle { noline }"
+" @Eq { T tsub a }"
+"}"
+}
+||7ct
+@Diag {
+@Tree {
+@Circle @Eq { a }
+@StubSub
+ from { SW }
+ to { SE }
+@Box outlinestyle { noline }
+ @Eq { T tsub a }
+}
+}
+}
+and so the tags both refer to points in the parent node in this case.
+@PP
+The @Code "@LeftSub" and @Code "@RightSub" symbols have variants called
+@Code "@ZeroWidthLeftSub" and @Code "@ZeroWidthRightSub" which are the
+same except that the resulting subtrees consume no width:
+@ID @OneRow {
+@Code {
+"@Tree {"
+"@Circle"
+"@LeftSub {"
+" @Circle"
+" @LeftSub @Square"
+" @RightSub @Square"
+"}"
+"@RightSub {"
+" @Circle"
+" @LeftSub {"
+" @Circle"
+" @ZeroWidthLeftSub @Square"
+" @ZeroWidthRightSub @Square"
+" }"
+" @RightSub @Square"
+"} }"
+}
+||7ct
+@Diag {
+@Tree
+{
+@Circle
+@LeftSub {
+ @Circle
+ @LeftSub @Square
+ @RightSub @Square
+}
+@RightSub {
+ @Circle
+ @LeftSub {
+ @Circle
+ @ZeroWidthLeftSub @Square
+ @ZeroWidthRightSub @Square
+ }
+ @RightSub @Square
+}
+}
+}
+}
+There is nothing analogous for the other subtree symbols.
+@PP
+The @Code "@Diag" symbol has a few options for adjusting the appearance
+of the tree. The @Code "treehsep" option determines the horizontal space left
+between a root and its left subtree, between a root and its right subtree,
+and between one subtree and the next when @Code "@NextSub" is used. The
+@Code "treevsep" option determines the vertical space left between a root
+and its subtrees:
+@ID @OneRow {
+@Code {
+"@Diag"
+" treehsep { 0c }"
+" treevsep { 0c }"
+"{"
+"@Tree"
+"{"
+" @Circle A"
+" @LeftSub @Square B"
+" @RightSub @Square C"
+"}"
+"}"
+}
+||7ct
+@Diag
+ treehsep { 0c }
+ treevsep { 0c }
+{
+@Tree
+{
+ @Circle A
+ @LeftSub @Square B
+ @RightSub @Square C
+}
+}
+}
+These options may also be given to individual subtree symbols, although
+@Code "treevsep" works as expected only with @Code "@LeftSub" and
+{@Code "@FirstSub"}, since these determine the vertical separation of
+all children of their parent.
+@PP
+The @Code "treehindent" option determines where the root of a non-binary
+tree is positioned over its subtrees; the value may be @Code "left"
+for at left, @Code "ctr" for centred over them (the default),
+@Code "right" for at the right, or any length, meaning that far from
+the left. Owing to problems behind the scenes, this option may not be
+given to individual subtree symbols; so as a consolation, it is permitted
+as an option to the @Code "@Tree" symbol.
+@PP
+It is not possible to attach tags to nodes within a tree, because
+tags are attached automatically by the tree symbols and any extra
+tags would disrupt the linking. However, you can use @Code "@ShowTags"
+to find out what these automatic tags are, and use them in a subsequent
+links part. For example, the tag attached to the right child of the left
+child of the root of a binary tree is {@Code "L@R@T"}, and in general the
+tag records the path from the root to the node, with @Code "T" added to
+the end. The root always has tag {@Code "T"}. The tree as a whole may
+be retagged in the usual way.
+@PP
+There is an @Code "@HTree" symbol which is the same as
+htree. @Index { @Code "@HTree" symbol in @@Diag }
+@Code "@Tree" except that the tree grows horizontally (from left to
+right) instead of vertically. The same symbols are available within
+@Code "@HTree" as within {@Code "@Tree"}; @Code "@LeftSub" and
+@Code "@FirstSub" produce what might be called the top subtree, and
+@Code "@RightSub" and @Code "@NextSub" produce lower trees. @Code "@HTree"
+has no @Code "treehindent" option; instead, it has an exactly analogous
+@Code "treevindent" option.
+@PP
+@Code "@HTree" may be used to get horizontal lists:
+@ID @OneRow {
+@Code {
+"@I @Diag"
+" arrow { yes } treehsep { 1c } {"
+"@HTree {"
+" @Node A"
+" @FirstSub {"
+" @Node B"
+" @FirstSub @Node C"
+" }"
+"}"
+"}"
+}
+||7ct
+@I @Diag arrow { yes } treehsep { 1c } {
+@HTree {
+@Node A
+@FirstSub {
+ @Node B
+ @FirstSub @Node C
+}
+}
+}
+}
+The braces are clumsy but necessary. The first node has tag {@Code "T"}, the
+second has tag {@Code "S@T"}, the third has tag {@Code "S@S@T"}, and so on.
+@End @Section
diff --git a/doc/user/draft.eps b/doc/user/draft.eps
new file mode 100644
index 0000000..bfc6e9a
--- /dev/null
+++ b/doc/user/draft.eps
@@ -0,0 +1,289 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.00 (July 1994)
+%%CreationDate: Fri Sep 9 10:46:13 1994
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%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
+/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
+
+/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 {}
+} 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 vec1
+/vec1 [
+/.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
+/.notdef /.notdef /.notdef /.notdef /.notdef /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
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt86 vec1 /Times-Roman LoutRecode
+/fnt86 { /Times-Romanfnt86 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt88 vec1 /Times-Bold LoutRecode
+/fnt88 { /Times-Boldfnt88 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt87 vec1 /Times-Italic LoutRecode
+/fnt87 { /Times-Italicfnt87 LoutFont } def
+/LoutExtColour [ currentrgbcolor ] cvx def
+%%EndSetup
+
+%%Page: ? 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 16840 translate
+0.0000 rotate
+gsave
+3087 -14622 translate
+17.7734 17.7734 scale
+gsave
+0 0 translate
+62.0000 rotate
+240 fnt86 0.8 0.8 0.8 setrgbcolor 0 -54(DRAFT)m
+grestore
+
+grestore
+
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+240 fnt88 LoutExtColour setrgbcolor
+5143 -3022(A)m 5376(T)s 22(est)k 5852(Example)s 240 fnt87
+5029 -3520(J)m 6(ef)k 4(fr)k 8(e)k 7(y)k
+5713(H.)s 6006(Kingston)s 240 fnt86 3998 -4021(Basser)m 4695(Department)s
+5883(of)s 6142(Computer)s 7159(Science)s 4446 -4309(The)m 4878(Uni)s 6(v)k 3(ersity)k
+5938(of)s 6197(Sydne)s 3(y)k 6973(2006)s 5512 -4597(Australia)m
+5053 -5050(9)m 5233(September)s 9(,)k 6366(1994)s 240 fnt88
+3097 -5692(Abstract)m 240 fnt86 1897 -6123(This)m 2403(is)s 2643(the)s
+3016(abstract.)s 3959(It')s 13(s)k 4344(v)s 3(ery)k
+4847(short,)s 5466(as)s 1417 -6411(be\207ts)m 2036(a)s 2243(tin)s 3(y)k
+2713(test)s 3145(document.)s 4310(Ho)s 6(we)k 6(v)k 3(er)k
+5273(it)s 5506(is)s 1417 -6699(long)m 1892(enough)s 2647(to)s
+2882(check)s 3489(that)s 3896(things)s 4530(are)s 4870(w)s 2(orking)k
+1417 -6987(as)m 1676(e)s 3(xpected.)k 240 fnt88 1417 -7780(1.)m
+1717(The)s 2176(\207rst)s 2647(section)s 240 fnt86 1897 -8211(This)m
+2408(is)s 2653(the)s 3031(\207rst)s 3488(section.)s 4371(It)s
+4602(too)s 4994(is)s 5239(v)s 3(ery)k 1417 -8499(short,)m
+2045(just)s 2480(a)s 2676(test)s 3097(section,)s 3924(nothing)s
+4746(more)s 5327([)s 5406(1)s 5526(])s 5605(.)s
+1417 -8787(This)m 1912(is)s 2141(the)s 2503(\207rst)s 2944(section.)s
+3811(It)s 4026(too)s 4402(is)s 4631(v)s 3(ery)k
+5123(short,)s 1417 -9075(just)m 1885(a)s 2114(test)s 2568(section,)s
+3428(nothing)s 4283(more.)s 4957(This)s 5505(is)s 1417 -9363(the)m
+1794(\207rst)s 2250(section.)s 3132(It)s 3362(too)s 3753(is)s
+3997(v)s 3(ery)k 4504(short,)s 5127(just)s 5557(a)s
+1417 -9651(test)m 1841(section,)s 2671(nothing)s 3496(more.)s 4140(This)s
+4658(is)s 4910(the)s 5295(\207rst)s 1417 -9939(section.)m 2255(It)s
+2441(too)s 2788(is)s 2988(v)s 3(ery)k 3451(short,)s
+4030(just)s 4416(a)s 4563(test)s 4935(section,)s 1417 -10227(nothing)m
+2254(more.)s 153 fnt86 2805 -10121(i)m 240 fnt86 2952 -10227(This)m
+3482(is)s 3746(the)s 4143(\207rst)s 4619(section.)s 5521(It)s
+1417 -10515(too)m 1794(is)s 2024(v)s 3(ery)k 2517(short,)s
+3126(just)s 3542(a)s 3719(test)s 4121(section,)s 4929(nothing)s
+1417 -10803(more.)m 2037(This)s 2531(is)s 2759(the)s 3120(\207rst)s
+3560(section.)s 4426(It)s 4640(too)s 5015(is)s 5243(v)s 3(ery)k
+1417 -11091(short,)m 2024(just)s 2438(a)s 2613(test)s 3013(section,)s
+3819(nothing)s 4620(more.)s 5240(This)s 1417 -11379(is)m 1655(the)s
+2026(\207rst)s 2476(section.)s 3352(It)s 3576(too)s 3961(is)s
+4199(v)s 3(ery)k 4700(short,)s 5317(just)s 1417 -11667(a)m
+1591(test)s 1990(section,)s 2795(nothing)s 3595(more.)s 4214(This)s
+4707(is)s 4934(the)s 5294(\207rst)s 1417 -11955(section.)m 2255(It)s
+2441(too)s 2788(is)s 2988(v)s 3(ery)k 3451(short,)s
+4030(just)s 4416(a)s 4563(test)s 4935(section,)s 1417 -12243(nothing)m
+2260(more.)s 2922(This)s 3458(is)s 3728(the)s 4131(\207rst)s
+4613(section.)s 5521(It)s 1417 -12531(too)m 1794(is)s 2024(v)s 3(ery)k
+2517(short,)s 3126(just)s 3542(a)s 3719(test)s 4121(section,)s
+4929(nothing)s 1417 -12819(more.)m 2037(This)s 2531(is)s 2759(the)s
+3120(\207rst)s 3560(section.)s 4426(It)s 4640(too)s 5015(is)s
+5243(v)s 3(ery)k 1417 -13107(short,)m 2024(just)s 2438(a)s
+2613(test)s 3013(section,)s 3819(nothing)s 4620(more.)s 5240(This)s
+1417 -13395(is)m 1655(the)s 2026(\207rst)s 2476(section.)s 3352(It)s
+3576(too)s 3961(is)s 4199(v)s 3(ery)k 4700(short,)s
+5317(just)s 1417 -13683(a)m 1591(test)s 1990(section,)s 2795(nothing)s
+3595(more.)s 4214(This)s 4707(is)s 4934(the)s 5294(\207rst)s
+1417 -13971(section.)m 2255(It)s 2441(too)s 2788(is)s 2988(v)s 3(ery)k
+3451(short,)s 4030(just)s 4416(a)s 4563(test)s 4935(section,)s
+1417 -14259(nothing)m 2260(more.)s 2922(This)s 3458(is)s 3728(the)s
+4131(\207rst)s 4613(section.)s 5521(It)s 1417 -14547(too)m 1794(is)s
+2024(v)s 3(ery)k 2517(short,)s 3126(just)s 3542(a)s
+3719(test)s 4121(section,)s 4929(nothing)s 1417 -14835(more.)m 2037(This)s
+2531(is)s 2759(the)s 3120(\207rst)s 3560(section.)s 4426(It)s
+4640(too)s 5015(is)s 5243(v)s 3(ery)k 1417 -15123(short,)m
+2024(just)s 2438(a)s 2613(test)s 3013(section,)s 3819(nothing)s
+4620(more.)s 5240(This)s 6233 -5690(is)m 6471(the)s 6842(\207rst)s
+7292(section.)s 8168(It)s 8392(too)s 8777(is)s 9015(v)s 3(ery)k
+9516(short,)s 10133(just)s 6233 -5978(a)m 6407(test)s 6806(section,)s
+7611(nothing)s 8411(more.)s 9030(This)s 9523(is)s 9750(the)s
+10110(\207rst)s 6233 -6266(section.)m 7071(It)s 7257(too)s 7604(is)s
+7804(v)s 3(ery)k 8267(short,)s 8846(just)s 9232(a)s
+9379(test)s 9751(section,)s 6233 -6554(nothing)m 7076(more.)s 7738(This)s
+8274(is)s 8544(the)s 8947(\207rst)s 9429(section.)s 10337(It)s
+6233 -6842(too)m 6610(is)s 6840(v)s 3(ery)k 7333(short,)s
+7942(just)s 8358(a)s 8535(test)s 8937(section,)s 9745(nothing)s
+6233 -7130(more.)m 6853(This)s 7347(is)s 7575(the)s 7936(\207rst)s
+8376(section.)s 9242(It)s 9456(too)s 9831(is)s 10059(v)s 3(ery)k
+6233 -7418(short,)m 6829(just)s 7232(a)s 7396(test)s 7785(section,)s
+8580(nothing)s 9370(more.)s 153 fnt86 9921 -7312(ii)m 240 fnt86
+10063 -7418(This)m 6233 -7706(is)m 6471(the)s 6842(\207rst)s 7292(section.)s
+8168(It)s 8392(too)s 8777(is)s 9015(v)s 3(ery)k
+9516(short,)s 10133(just)s 6233 -7994(a)m 6407(test)s 6806(section,)s
+7611(nothing)s 8411(more.)s 9030(This)s 9523(is)s 9750(the)s
+10110(\207rst)s 6233 -8282(section.)m 7071(It)s 7257(too)s 7604(is)s
+7804(v)s 3(ery)k 8267(short,)s 8846(just)s 9232(a)s
+9379(test)s 9751(section,)s 6233 -8570(nothing)m 7066(more.)s 153 fnt86
+7617 -8464(a)m 240 fnt86 7785 -8570(This)m 8311(is)s 8571(the)s
+8964(\207rst)s 9436(section.)s 10334(It)s 6233 -8858(too)m 6610(is)s
+6840(v)s 3(ery)k 7333(short,)s 7942(just)s 8358(a)s
+8535(test)s 8937(section,)s 9745(nothing)s 6233 -9146(more.)m 6853(This)s
+7347(is)s 7575(the)s 7936(\207rst)s 8376(section.)s 9242(It)s
+9456(too)s 9831(is)s 10059(v)s 3(ery)k 6233 -9434(short,)m
+6840(just)s 7254(a)s 7429(test)s 7829(section,)s 8635(nothing)s
+9436(more.)s 10056(This)s 6233 -9722(is)m 6471(the)s 6842(\207rst)s
+7292(section.)s 8168(It)s 8392(too)s 8777(is)s 9015(v)s 3(ery)k
+9516(short,)s 10133(just)s 6233 -10010(a)m 6407(test)s 6806(section,)s
+7611(nothing)s 8411(more.)s 9030(This)s 9523(is)s 9750(the)s
+10110(\207rst)s 6233 -10298(section.)m 7071(It)s 7257(too)s 7604(is)s
+7804(v)s 3(ery)k 8267(short,)s 8846(just)s 9232(a)s
+9379(test)s 9751(section,)s 6233 -10586(nothing)m 7076(more.)s 7738(This)s
+8274(is)s 8544(the)s 8947(\207rst)s 9429(section.)s 10337(It)s
+6233 -10874(too)m 6610(is)s 6840(v)s 3(ery)k 7333(short,)s
+7942(just)s 8358(a)s 8535(test)s 8937(section,)s 9745(nothing)s
+6233 -11162(more.)m 240 fnt88 6233 -11761(1.1)m 6533(.)s 6713(The)s
+7172(\207rst)s 7643(subsection)s 240 fnt86 6713 -12192(This)m 7244(is)s
+7509(the)s 7907(\207rst)s 8384(subsection,)s 9560(and)s 10012(what)s
+6233 -12480(is)m 6518(more)s 7135(it)s 7393(has)s 7838(sub-subsections)s
+9479(which)s 10190(are)s 6233 -12768(starting)m 7009(no)s 6(w)k 15(.)k
+240 fnt87 6233 -13415(The)m 6652(\207r)s 2(st)k 7082(sub-subsection)s
+240 fnt86 6713 -13893(This)m 7222(is)s 7465(the)s 7841(\207rst)s
+8296(sub-subsection.)s 9922(There)s 6233 -14181(will)m 6664(be)s 6950(a)s
+7116(second)s 7841(one)s 8247(in)s 8493(a)s 8659(minute.)s
+gsave
+6233 -14668 translate
+240 fnt86 LoutExtColour setrgbcolor 1134 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+122 fnt86 LoutExtColour setrgbcolor 6233 -14836(a)m 192 fnt86 6287 -14921(This)m
+6687(is)s 6874(the)s 7168(\207rst)s 7524(footnote,)s 8270(anchored)s
+9032(to)s 4(w)k 1(ards)k 9692(the)s 9986(end)s
+10323(of)s 6233 -15151(the)m 6530(\207rst)s 6889(section.)s 7590(It)s
+7769(should)s 8343(appear)s 8916(at)s 9117(the)s 9414(bottom)s
+10020(of)s 10242(the)s 6233 -15381(page.)m 6739(Let')s 10(s)k
+7169(hope)s 7590(it)s 7744(comes)s 8281(out)s 8574(right.)s
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ encoding vec1
+%%Pages: 1
+%%EOF
diff --git a/doc/user/equ b/doc/user/equ
new file mode 100644
index 0000000..7a87fdb
--- /dev/null
+++ b/doc/user/equ
@@ -0,0 +1,28 @@
+@Chapter
+ @Title { Equations }
+ @Tag { equations }
+@Begin
+@LP
+This chapter explains how to produce mathematical formulas in Lout,
+equations. @Index { equations }
+mathematics. @Index mathematics
+eq. @Index @Code "@Eq"
+using the @Code "@Eq" symbol like this:
+@ID @Code {
+"@Eq { big int supp 1 on 0 ` dx over sqrt {1 - x sup 2} = pi over 2 }"
+}
+This example produces
+@ID @Eq { big int supp 1 on 0 ` dx over sqrt {1 - x sup 2} = pi over 2 }
+The @Code "@Eq" symbol looks after all the details of spacing for
+you, and it provides several hundred mathematical symbols.
+@BeginSections
+@Include { equ_intr }
+@Include { equ_symb }
+@Include { equ_vert }
+@Include { equ_spac }
+@Include { equ_disp }
+@Include { equ_defs }
+@Include { equ_summ }
+@Include { equ_tequ }
+@EndSections
+@End @Chapter
diff --git a/doc/user/equ_defs b/doc/user/equ_defs
new file mode 100644
index 0000000..0e38da7
--- /dev/null
+++ b/doc/user/equ_defs
@@ -0,0 +1,53 @@
+@Section
+ @Title { Defining new equation formatting symbols }
+@Begin
+@PP
+Whenever you type particular equations or parts of equations repeatedly,
+you can save time by using definitions. Definitions are the subject of
+Section {@NumberOf definitions}, so here we will just give a few examples
+of their use in equation formatting.
+@PP
+Suppose for example that @OneCol @Eq { p sub i ` log sub 2 ` p sub i }
+occurs frequently in your document. Then
+@ID @Code "def epi { p sub i ` log sub 2 ` p sub i }"
+makes the symbol @Code "epi" stand for the object between the braces:
+@ID {
+@Code "big sum from i=1 to n ` epi"
+|7ct
+@Eq { big sum from i=1 to n ` epi }
+}
+Parameters are very useful when parts of the symbol vary:
+@ID @OneRow @Code {
+"def ep"
+" right x"
+"{ p sub x ` log sub 2 ` p sub x"
+"}"
+}
+The parameter @Code x will be replaced by the object just to the right
+of {@Code "ep"}:
+@ID {
+@Code {
+"big sum from i=1 to k ` ep i +"
+"big sum from j=k+1 to n ep j"
+}
+||7ct
+@Eq {
+big sum from i=1 to k ` ep i +
+big sum from j=k+1 to n ep j
+}
+}
+The precedence of the symbols you define will be 100 by default.
+@PP
+To make the symbols of @Code "@Eq" available within such definitions,
+each must be preceded by {@Code "import @Eq"}. As explained in Section
+{@NumberOf definitions}, the definitions go into a file called
+{@Code "mydefs"}, which might then look like this:
+@ID @OneRow @Code {
+"import @Eq"
+"def epi { p sub i ` log sub 2 ` p sub i }"
+""
+"import @Eq"
+"def ep right x { p sub x ` log sub 2 ` p sub x }"
+}
+Use of @Code "epi" and @Code "ep" outside @Code "@Eq" will cause an error.
+@End @Section
diff --git a/doc/user/equ_disp b/doc/user/equ_disp
new file mode 100644
index 0000000..0167b8d
--- /dev/null
+++ b/doc/user/equ_disp
@@ -0,0 +1,126 @@
+@Section
+ @Title { Displaying equations }
+ @Tag { mathdisplays }
+@Begin
+@PP
+The result of the @Code "@Eq" symbol is an object which, according to the
+displayed.equations @Index { displayed equations }
+golden rule (Section {@NumberOf objects}), may appear anywhere: inside
+a paragraph, inside a table, and so on. In particular, equations are
+often displayed using the @Code "@CentredDisplay" or @Code "@IndentedDisplay"
+symbols from Section {@NumberOf displays}:
+@ID @Code "@IndentedDisplay @Eq { ... }"
+Now displayed equations are often numbered, and often aligned with one
+another on their equals signs. For this there are special display
+symbols which are the the subject of this section. These symbols can
+align and number any display at all, but since in practice they seem to
+be used only with equations, we discuss them here rather than in
+Section {@NumberOf displays} where they really belong.
+@PP
+Let's begin by looking at a first example of a numbered display:
+aligned.displays @Index { aligned displays }
+aligned.equations @Index { aligned equations }
+numbered.displays @Index { numbered displays }
+numbered.equations @Index { numbered equations }
+@BeginAlignedDisplays
+@CentredAlignedNumberedDisplay
+ @Tag { fibeq }
+@Eq { F sub n ^= F sub {n-1} + F sub {n-2} }
+After the display we might have some more text for a while, and then
+we might want a second display, aligned on its equals sign with the
+first, and also numbered in sequence with it:
+@CentredAlignedNumberedDisplay
+@Eq { F sub n - F sub {n-1} ^= F sub {n-2} }
+@EndAlignedDisplays
+Notice that the two displays are centred as a block as well as
+aligned. Altogether there are four ways in which displays vary:
+@BL
+@LI { A display can be raw or not raw (see below); }
+@LI { It can be a {@Code "@Display"}, {@Code "@LeftDisplay"},
+{@Code "@IndentedDisplay"}, {@Code "@QuotedDisplay"},
+{@Code "@CentredDisplay"}, {@Code "@CenteredDisplay"},
+or {@Code "@RightDisplay"}; }
+@LI { It can be aligned or not aligned; }
+@LI { It can be numbered or not numbered. }
+@EL
+All possible combinations are allowed. The display that has everything
+is called
+@ID @Code "@RawCentredAlignedNumberedDisplay"
+By leaving out some or all of {@Code Raw}, {@Code Aligned}, and
+{@Code Numbered}, and by changing or leaving out {@Code Centred},
+we get all these combinations. Here
+numbereddisplay. @Index @Code "@NumberedDisplay"
+aligneddisplay. @Index @Code "@AlignedDisplay"
+then is how the two displays given earlier were made:
+@ID @OneRow @Code {
+"... a first example of a numbered display:"
+"@BeginAlignedDisplays"
+"@CentredAlignedNumberedDisplay"
+" @Tag { fibeq }"
+"@Eq { F sub n ^= F sub { n-1 } + F sub { n-2 } }"
+"After the display we might ... numbered in sequence with it:"
+"@CentredAlignedNumberedDisplay @Eq { F sub n - F sub { n-1 } ^= F sub { n-2 } }"
+"@EndAlignedDisplays"
+"Notice that the two displays are centred ..."
+}
+All numbered displays have an optional @Code "@Tag" option which is
+used for cross referencing (see Section {@NumberOf cross}). Alignment
+and numbering work quite independently; they don't have to start or end
+together, and there can be non-aligned and non-numbered displays among
+the others.
+@PP
+When aligned displays are used, it is necessary to indicate where the
+aligned group begins and ends, by placing @Code "@BeginAlignedDisplays"
+beginaligneddisplays @Index @Code "@BeginAlignedDisplays"
+endaligneddisplays @Index @Code "@EndAlignedDisplays"
+just before the first, and @Code "@EndAlignedDisplays" just after the
+last. The alignment points are indicated by preceding them by the
+symbol {@Code "^"}, so you aren't restricted to aligning at equals
+signs. @Code "@BeginAlignedDisplays" and @Code "@EndAlignedDisplays"
+cannot span across several sections or subsections: the equations
+aligned by them must lie within a single large-scale structure symbol.
+@PP
+In our example of aligned and numbered displays, the two displays
+were separated by some ordinary text. Very often, though, aligned
+displays follow directly after each other. This is a problem, because
+if you have one display directly following another there will be too
+much vertical space between them. This problem was mentioned in
+Section {@NumberOf displays}, and the recommended solution was to
+use a list. However, there are no aligned or numbered (in this sense)
+lists.
+@PP
+To solve this problem, each display symbol has a `raw' version, which
+means that no space is inserted above or below the display. Instead,
+raw.displays @Index { raw displays }
+you must insert it yourself using paragraph symbols:
+@ID @OneRow @Code {
+"preceding text"
+"@DP"
+"@RawAlignedDisplay @Eq { ... }"
+"@DP"
+"@RawAlignedNumberedDisplay @Eq { ... }"
+"@DP"
+"following text"
+}
+You get the right spacing by placing {@Code "@DP"} symbols before,
+between, and after each display; and you get to use the specialized
+displays that you need. Raw and non-raw displays may be numbered and
+aligned together.
+@PP
+Numbered displays are numbered automatically. Depending on where in
+the document they appear, the number might include a chapter number
+or section number, etc. This is controlled by options in the setup
+file; for example, setting @Code "@ChapterNumInDisplays" to @Code Yes
+ensures that numbered displays will be numbered afresh at the beginning
+of each chapter, and that the number will include a chapter number. There
+is also a @Code "@DisplayNumStyle" option which controls the style of
+displays; the default value, {@Code "(num)"}, encloses the number in
+parentheses as is conventional when numbering equations.
+@PP
+Every display symbol has an abbreviated form consisting of @Code "@"
+followed by its capital letters only. For example,
+@Code "@BeginAlignedDisplays" may be abbreviated to {@Code "@BAD"}, and
+the display that has everything to {@Code "@RCAND"}. Owing to an
+unfortunate clash between the initial letters of `raw' and `right',
+@Code "@RightDisplay" and the other right displays have no abbreviations.
+@End @Section
diff --git a/doc/user/equ_intr b/doc/user/equ_intr
new file mode 100644
index 0000000..882aaff
--- /dev/null
+++ b/doc/user/equ_intr
@@ -0,0 +1,61 @@
+@Section
+ @Title { Introduction }
+@Begin
+@PP
+The Lout definitions for the @Code "@Eq" symbol are accessed via a setup
+file called {@Code "eq"}, which you must include at the start of your
+document if
+eq.file @Index { @Code "eq" file }
+you want equations, like this:
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { eq }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+This shows what to do if you want both tables and equations, but you
+may leave out the line for tables if you don't want them. Setup files
+for specialized packages, such as like {@Code "tab"} and {@Code "eq"},
+are best included before the main setup file, but may be included in
+any order.
+@PP
+With the @Code "eq" file included, you may write
+eq. @Index { @Code "@Eq" }
+@ID @Code "@Eq { ... }"
+at any point in your document, and the symbols of @Code "@Eq" will be
+available between the braces. Any symbols available outside continue
+to be available inside, which means that equations may be freely mixed
+with other symbols, without restriction.
+@PP
+Equations may appear within a paragraph of text, or they may be
+displayed. {@Code "@Eq"}'s job is to produce an object containing the
+equation; it neither knows nor cares where this equation goes.
+@PP
+To get an equation within a paragraph, simply place @Code "@Eq { ... }"
+at the desired point. To make the optimal paragraph breaker work hard to
+arrange the paragraph so that the equation does not spread over two
+lines, use {@Code "@OneCol @Eq { ... }"}. This is needed so frequently
+that a symbol @Code "@E" is defined in @Code "eq" along with @Code "@Eq"
+e. @Index { @Code "@E" }
+which is an abbreviation for {@Code "@OneCol @Eq"}.
+@PP
+To display an equation, use a display symbol like @Code "@IndentedDisplay"
+or @Code "@CentredDisplay" (Section {@NumberOf displays}). For example,
+@ID @Code "@CentredDisplay @Eq { int supp pi on 0 sin ` x = 0 }"
+produces
+@CentredDisplay @Eq { int supp pi on 0 sin ` x = 0 }
+There are also symbols for aligned and numbered displays, which are
+very commonly used with equations. These symbols are the subject of
+Section {@NumberOf mathdisplays}.
+@PP
+In this chapter we show the Lout input at the left, and its
+result at the right:
+@ID {
+@Code "@Eq { {x sup 2 + y sup 2} over 2 }"
+|7ct
+@Eq { {x sup 2 + y sup 2} over 2 }
+}
+Subsequent examples will omit the enclosing {@Code "@Eq { ... }"}.
+@End @Section
diff --git a/doc/user/equ_spac b/doc/user/equ_spac
new file mode 100644
index 0000000..2a79fb1
--- /dev/null
+++ b/doc/user/equ_spac
@@ -0,0 +1,81 @@
+@Section
+ @Title { Spacing }
+@Begin
+@PP
+There is a basic rule governing the use of white space characters (space,
+tab, and newline) in the input to Lout: white space between two objects
+affects the result; white space between a symbol and its parameter does
+not. This is explained at length in Section {@NumberOf spaces}.
+@PP
+Although this rule is just right most of the time, it is not adequate
+for equation formatting. Getting the horizontal spacing right in
+equations is a very fiddly business, involving four different sizes of
+space (zero, thin, medium, and thick), and different rules for spacing
+within superscripts and subscripts to those applying outside, according
+to a leading authority @Cite { $knuth1984tex }. {@Code "@Eq"} therefore
+takes the spacing decisions upon itself, and consequently chooses to
+ignore all white space in its input, even between two objects. (The
+simplest way to restore the effect of white space to part of an equation
+is to enclose that part in a @Code "@Font" symbol.)
+@PP
+Every symbol provided by {@Code "@Eq"} has a @I {full name}, which
+full.name @Index { full name of equation symbol }
+denotes the symbol without any space attached. Many symbols also
+have a @I {short name}, which denotes the same symbol with what
+short.name @Index { short name of equation symbol }
+{@Code "@Eq"} considers to be an appropriate amount of space for that
+symbol attached to it. For example, @Eq { lessequal } has full name
+@Code lessequal and short name {@Code "<="}:
+@IL
+@LI {
+@Code "a lessequal b"
+|7ct
+@Eq { a lessequal b }
+}
+@LI {
+@Code "a <= b"
+|7ct
+@Eq { a <= b }
+}
+@EL
+{@Code "@Eq"} puts a thick space around relation symbols like {@Code "<="},
+relations @Index { relation symbols in equations }
+a medium space around binary operator symbols like {@Code "+"}, and a thin
+binary.op @Index { binary operators in equations }
+space after punctuation symbols (@Code ";" and {@Code ","}); except that
+punctuation @Index { punctuation in equations }
+in places where the symbols appear in a smaller size (superscripts,
+subscripts, etc.), these spaces are omitted. No other horizontal space
+is ever inserted.
+@PP
+The short names have been carefully designed to produce good-looking
+mathematics most of the time. It is best to rely on them in the first
+instance and only think about spacing when the result is not pleasing. In
+that case, {@Code "@Eq"}'s space can be removed by using the full names,
+and thin, medium and thick space can be added using the following symbols:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { @Code "`" }
+ B { {@Code "0.18f"} ({@Code "0.018f"} in subscripts, etc.) }
+@Rowa
+ A { @Code "``" }
+ B { {@Code "0.24f"} ({@Code "0.024f"} in subscripts, etc.) }
+@Rowa
+ A { @Code "```" }
+ B { {@Code "0.30f"} ({@Code "0.030f"} in subscripts, etc.) }
+}
+where @Code "1f" is the current font size. These symbols have low
+precedence. The @Code "&" symbol from raw Lout is also available;
+the @Code "s" unit has value 0 and so is not very useful, but one can
+write @Code "&2m" for example for a two em space. The full names are
+tedious to remember, so {@Code "@Eq"} provides a @Code "non" symbol
+non. @Index { @Code "non" in equations }
+which removes spaces from its right parameter; thus @Code "non <=" is
+equivalent to {@Code "lessequal"}. There are also {@Code "rel"},
+{@Code "bin"}, and {@Code "punct"} symbols for telling {@Code "@Eq"}
+to add space to the following symbol as though it was a relation symbol,
+binary operator, or punctuation symbol.
+@End @Section
diff --git a/doc/user/equ_summ b/doc/user/equ_summ
new file mode 100644
index 0000000..bcfbeb3
--- /dev/null
+++ b/doc/user/equ_summ
@@ -0,0 +1,721 @@
+@Section
+ @Title { Summary }
+@Begin
+@PP
+This section is a complete list of the symbols provided by
+{@Code "@Eq"}. We divide them into auxiliary, parameterized, short names
+(further divided into relations, binary operators, and punctuation),
+and full names. The auxiliary symbols are:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { @Code "`" }
+ B { Thin space }
+@Rowa
+ A { @Code "``" }
+ B { Medium space }
+@Rowa
+ A { @Code "```" }
+ B { Thick space }
+@Rowa
+ A { @Code "bin x" }
+ B { Treat @Code x as a binary operator }
+@Rowa
+ A { @Code "rel x" }
+ B { Treat @Code x as a relation }
+@Rowa
+ A { @Code "punct x" }
+ B { Treat @Code x as a punctuation symbol }
+@Rowa
+ A { @Code "non x" }
+ B { Remove spaces normally put into @Code x }
+@Rowa
+ A { @Code "vctr x" }
+ B { Centre @Code x vertically }
+@Rowa
+ A { @Code "big x" }
+ B { Make @Code x larger }
+}
+Here are all the parameterized symbols, shown in groups of equal
+precedence, with the precedence itself at right:
+@ID @OneRow lines @Break {
+@Code "matrix pmatrix bmatrix brmatrix fmatrix cmatrix amatrix not" (100)
+@Code "dot dotdot hat tilde vec dyad overbar underbar" (62)
+@Code "sup sub tsub supp" (60) @Code "on ton" (61)
+@Code "from to widefrom wideto" (58)
+@Code "sqrt root" (56)
+@Code "over frac" (54)
+@Code "col lcol ccol rcol mcol" (52)
+@Code "row axisrow" (50)
+# @Code "above labove cabove rabove mabove" (52)
+# @Code "nextcol" (50)
+}
+See Section {@NumberOf symbols} for examples of matrices. Here are some
+examples of the other symbols:
+@IL
+
+@LI {
+@Code "x dot"
+|7ct
+@Eq { x dot }
+}
+
+@LI {
+@Code "x dotdot"
+|7ct
+@Eq { x dotdot }
+}
+
+@LI {
+@Code "x hat"
+|7ct
+@Eq { x hat }
+}
+
+@LI {
+@Code "x tilde"
+|7ct
+@Eq { x tilde }
+}
+
+@LI {
+@Code "x vec"
+|7ct
+@Eq { x vec }
+}
+
+@LI {
+@Code "x dyad"
+|7ct
+@Eq { x dyad }
+}
+
+@LI {
+@Code "x+y overbar"
+|7ct
+@Eq { x+y overbar }
+}
+
+@LI {
+@Code "x+y underbar"
+|7ct
+@Eq { x+y underbar }
+}
+
+@EL
+These marks are centred over the preceding object, except the last two
+which are extended to the width of the object.
+@IL
+
+@LI {
+@Code "a sup b"
+|7ct
+@Eq {a sup b}
+}
+
+@LI {
+@Code "a sub b"
+|7ct
+@Eq {a sub b}
+}
+
+@LI {
+@Code "W tsub b"
+|7ct
+@Eq {W tsub b}
+}
+
+@LI {
+@Code "a supp b on c"
+|7ct
+@Eq {a supp b on c}
+}
+
+@LI {
+@Code "W supp b ton c"
+|7ct
+@Eq {W supp b ton c}
+}
+
+@EL
+Note that @Code "supp" and @Code "on" (or {@Code "ton"}) must be used
+together as shown; @Code "tsub" and @Code "ton" are exactly like
+@Code "sub" and @Code "on" except that the subscript is tucked in.
+@IL
+
+@LI {
+@Code "big sum from i"
+|7ct
+@Eq {big sum from i}
+}
+
+@LI {
+@Code "big prod to j"
+|7ct
+@Eq {big prod to j}
+}
+
+@LI {
+@Code { "{a, ... , z} widefrom"
+"{90d @Rotate blbrace}" }
+|7ct
+@Eq { {a, ... , z} widefrom {90d @Rotate blbrace} }
+}
+
+@LI {
+@Code "{a, ... , z} wideto minus"
+|7ct
+@Eq { {a, ... , z} wideto minus }
+}
+
+@EL
+@Code "widefrom" and @Code "wideto" are like @Code "from" and
+@Code "to" except that they horizontally scale the right parameter
+to the width of the left.
+@IL
+
+@LI {
+@Code "sqrt {x over y}"
+|7ct
+@Eq { sqrt {x over y} }
+}
+
+@LI {
+@Code "3 root {x over y}"
+|7ct
+@Eq { 3 root {x over y} }
+}
+
+@EL
+The left parameter of @Code "root" may be any object. Here are
+four ways to denote division:
+@IL
+
+@LI {
+@Code "2 over 3"
+|7ct
+@Eq { 2 over 3 }
+}
+
+@LI {
+@Code "2 frac 3"
+|7ct
+@Eq { 2 frac 3 }
+}
+
+@LI {
+@Code "2 div 3"
+|7ct
+@Eq { 2 div 3 }
+}
+
+@LI {
+@Code "2 slash 3"
+|7ct
+@Eq { 2 slash 3 }
+}
+
+@EL
+The @Code "div" symbol is a binary operator (see below), and
+@Code "slash" is the full name for the @Code "/" character from
+the Adobe Symbol font. You can't use @Code "/" itself, because
+it is one of Lout's special symbols.
+@PP
+The following short names define relations (that is, they have a thick
+space on each side):
+@DP
+ragged @Break {
+"<" @Dbl @Eq { < }
+">" @Dbl @Eq { > }
+"=" @Dbl @Eq { = }
+"<=" @Dbl @Eq { <= }
+"prec" @Dbl @Eq { prec }
+"preceq" @Dbl @Eq { preceq }
+"<<" @Dbl @Eq { << }
+"subset" @Dbl @Eq { subset }
+"subseteq" @Dbl @Eq { subseteq }
+"sqsubseteq" @Dbl @Eq { sqsubseteq }
+"in" @Dbl @Eq { in }
+"vdash" @Dbl @Eq { vdash }
+"smile" @Dbl @Eq { smile }
+"frown" @Dbl @Eq { frown }
+">=" @Dbl @Eq { >= }
+"succ" @Dbl @Eq { succ }
+"succeq" @Dbl @Eq { succeq }
+">>" @Dbl @Eq { >> }
+"supset" @Dbl @Eq { supset }
+"supseteq" @Dbl @Eq { supseteq }
+"sqsupseteq" @Dbl @Eq { sqsupseteq }
+"ni" @Dbl @Eq { ni }
+"dashv" @Dbl @Eq { dashv }
+"mid" @Dbl @Eq { mid }
+"parallel" @Dbl @Eq { parallel }
+"==" @Dbl @Eq { == }
+"~" @Dbl @Eq { ~ }
+"-~" @Dbl @Eq { -~ }
+"asymp" @Dbl @Eq { asymp }
+"~~" @Dbl @Eq { ~~ }
+"=~" @Dbl @Eq { =~ }
+"bowtie" @Dbl @Eq { bowtie }
+"propto" @Dbl @Eq { propto }
+"models" @Dbl @Eq { models }
+"doteq" @Dbl @Eq { doteq }
+"perp" @Dbl @Eq { perp }
+"notsub" @Dbl @Eq { notsub }
+"notin" @Dbl @Eq { notin }
+"!=" @Dbl @Eq { != }
+"<->" @Dbl @Eq { <-> }
+"<--" @Dbl @Eq { <-- }
+"-->" @Dbl @Eq { --> }
+"up" @Dbl @Eq { up }
+"down" @Dbl @Eq { down }
+"<=>" @Dbl @Eq { <=> }
+"<==" @Dbl @Eq { <== }
+"==>" @Dbl @Eq { ==> }
+"dblup" @Dbl @Eq { dblup }
+"dbldown" @Dbl @Eq { dbldown }
+":" @Dbl @Eq { : }
+"::" @Dbl @Eq { :: }
+":=" @Dbl @Eq { := }
+}
+@DP
+These can be negated by preceding them with {@Code "not"}, as in
+negation. @Index { negation of equation symbols }
+{@Code "not =="}, for example, which yields {@Eq { not == }}. The
+following short names define binary operators (medium space on each side):
+@DP
+ragged @Break {
+"+" @Dbl @Eq { + }
+"-" @Dbl @Eq { - }
+"+-" @Dbl @Eq { +- }
+"-+" @Dbl @Eq { -+ }
+"setminus" @Dbl @Eq { setminus }
+"cdot" @Dbl @Eq { cdot }
+"times" @Dbl @Eq { times }
+"*" @Dbl @Eq { * }
+"circ" @Dbl @Eq { circ }
+"div" @Dbl @Eq { div }
+"cap" @Dbl @Eq { cap }
+"cup" @Dbl @Eq { cup }
+"uplus" @Dbl @Eq { uplus }
+"sqcap" @Dbl @Eq { sqcap }
+"sqcup" @Dbl @Eq { sqcup }
+"triangleleft" @Dbl @Eq { triangleleft }
+"triangleright" @Dbl @Eq { triangleright }
+"wr" @Dbl @Eq { wr }
+"bigcirc" @Dbl @Eq { bigcirc }
+"bigtriangleup" @Dbl @Eq { bigtriangleup }
+"bigtriangledown"@Dbl @Eq { bigtriangledown }
+"vee" @Dbl @Eq { vee }
+"wedge" @Dbl @Eq { wedge }
+"oplus" @Dbl @Eq { oplus }
+"ominus" @Dbl @Eq { ominus }
+"otimes" @Dbl @Eq { otimes }
+"oslash" @Dbl @Eq { oslash }
+"odot" @Dbl @Eq { odot }
+"dagger" @Dbl @Eq { dagger }
+"daggerdbl" @Dbl @Eq { daggerdbl }
+"amalg" @Dbl @Eq { amalg }
+}
+@DP
+The following names define arrow symbols (no extra space):
+@DP
+ragged @Break {
+"leftarrow" @Dbl @Eq { leftarrow }
+"longleftarrow" @Dbl @Eq { longleftarrow }
+"dblleftarrow" @Dbl @Eq { dblleftarrow }
+"dbllongleftarrow" @Dbl @Eq { dbllongleftarrow }
+"rightarrow" @Dbl @Eq { rightarrow }
+"longrightarrow" @Dbl @Eq { longrightarrow }
+"dblrightarrow" @Dbl @Eq { dblrightarrow }
+"dbllongrightarrow" @Dbl @Eq { dbllongrightarrow }
+"leftrightarrow" @Dbl @Eq { leftrightarrow }
+"longleftrightarrow" @Dbl @Eq { longleftrightarrow }
+"dblleftrightarrow" @Dbl @Eq { dblleftrightarrow }
+{ 1.15i @Wide @HScale "dbllongleftrightarrow" } @Dbl @Eq { dbllongleftrightarrow }
+"mapsto" @Dbl @Eq { mapsto }
+"longmapsto" @Dbl @Eq { longmapsto }
+"hookleftarrow" @Dbl @Eq { hookleftarrow }
+"hookrightarrow" @Dbl @Eq { hookrightarrow }
+"leadsto" @Dbl @Eq { leadsto }
+"leftharpoonup" @Dbl @Eq { leftharpoonup }
+"rightharpoonup" @Dbl @Eq { rightharpoonup }
+"leftharpoondown" @Dbl @Eq { leftharpoondown }
+"rightharpoondown" @Dbl @Eq { rightharpoondown }
+"rightleftharpoons" @Dbl @Eq { rightleftharpoons }
+"uparrow" @Dbl @Eq { uparrow }
+"dbluparrow" @Dbl @Eq { dbluparrow }
+"downarrow" @Dbl @Eq { downarrow }
+"dbldownarrow" @Dbl @Eq { dbldownarrow }
+"updownarrow" @Dbl @Eq { updownarrow }
+"dblupdownarrow" @Dbl @Eq { dblupdownarrow }
+"nearrow" @Dbl @Eq { nearrow }
+"searrow" @Dbl @Eq { searrow }
+"swarrow" @Dbl @Eq { swarrow }
+"nwarrow" @Dbl @Eq { nwarrow }
+}
+@DP
+The following names define punctuation symbols (thin space on the
+right-hand side):
+@DP
+ragged @Break {
+";" @Dbl @Eq { ; }
+"," @Dbl @Eq { , }
+"col" @Dbl @Eq { col }
+}
+@DP
+The following symbols are used in ways typified by the large sum and
+product symbols. In display equations they should be preceded by the
+@Code "big" symbol:
+@DP
+ragged @Break {
+"sum" @Dbl @Eq { sum }
+"prod" @Dbl @Eq { prod }
+"coprod" @Dbl @Eq { coprod }
+@LP
+"int" @Dbl @Eq { int }
+"oint" @Dbl @Eq { oint }
+"bcap" @Dbl @Eq { bcap }
+@LP
+"bcup" @Dbl @Eq { bcup }
+"bvee" @Dbl @Eq { bvee }
+"bwedge" @Dbl @Eq { bwedge }
+@LP
+"bodot" @Dbl @Eq { bodot }
+"botimes" @Dbl @Eq { botimes }
+"boplus" @Dbl @Eq { boplus }
+@LP
+"buplus" @Dbl @Eq { buplus }
+}
+@DP
+The following symbols are defined so that they will appear in Roman,
+as is conventional for them in equations:
+@DP
+ragged @Break {
+"arccos" @Dbl @Eq { arccos }
+"arcsin" @Dbl @Eq { arcsin }
+"arctan" @Dbl @Eq { arctan }
+"arg" @Dbl @Eq { arg }
+"cos" @Dbl @Eq { cos }
+"cosh" @Dbl @Eq { cosh }
+"cot" @Dbl @Eq { cot }
+"coth" @Dbl @Eq { coth }
+"csc" @Dbl @Eq { csc }
+"deg" @Dbl @Eq { deg }
+"det" @Dbl @Eq { det }
+"dim" @Dbl @Eq { dim }
+"exp" @Dbl @Eq { exp }
+"gcd" @Dbl @Eq { gcd }
+"hom" @Dbl @Eq { hom }
+"inf" @Dbl @Eq { inf }
+"ker" @Dbl @Eq { ker }
+"lg" @Dbl @Eq { lg }
+"lim" @Dbl @Eq { lim }
+"liminf" @Dbl @Eq { liminf }
+"limsup" @Dbl @Eq { limsup }
+"ln" @Dbl @Eq { ln }
+"log" @Dbl @Eq { log }
+"max" @Dbl @Eq { max }
+"min" @Dbl @Eq { min }
+"Pr" @Dbl @Eq { Pr }
+"sec" @Dbl @Eq { sec }
+"sin" @Dbl @Eq { sin }
+"sinh" @Dbl @Eq { sinh }
+"supr" @Dbl @Eq { supr }
+"tan" @Dbl @Eq { tan }
+"tanh" @Dbl @Eq { tanh }
+"mod" @Dbl @Eq { mod }
+}
+@DP
+The following symbols are also defined to ensure that they will appear
+in Roman:
+@DP
+ragged @Break {
+"0" @Dbl @Eq { 0 }
+"1" @Dbl @Eq { 1 }
+"2" @Dbl @Eq { 2 }
+"3" @Dbl @Eq { 3 }
+"4" @Dbl @Eq { 4 }
+"5" @Dbl @Eq { 5 }
+"6" @Dbl @Eq { 6 }
+"7" @Dbl @Eq { 7 }
+"8" @Dbl @Eq { 8 }
+"9" @Dbl @Eq { 9 }
+"!" @Dbl @Eq { ! }
+"?" @Dbl @Eq { ? }
+"%" @Dbl @Eq { % }
+"(" @Dbl @Eq { ( }
+")" @Dbl @Eq { ) }
+"[" @Dbl @Eq { [ }
+"]" @Dbl @Eq { ] }
+}
+@DP
+The following symbols make good @Code atleft and @Code atright parameters
+of the @Code matrix symbol:
+@LP
+@LP
+ragged @Break {
+"lpar" @Dbl @Eq { lpar }
+"blpar" @Dbl @Eq { blpar }
+"rpar" @Dbl @Eq { rpar }
+"brpar" @Dbl @Eq { brpar }
+"lbrack" @Dbl @Eq { lbrack }
+"blbrack" @Dbl @Eq { blbrack }
+"rbrack" @Dbl @Eq { rbrack }
+"brbrack" @Dbl @Eq { brbrack }
+"lbrace" @Dbl @Eq { lbrace }
+"blbrace" @Dbl @Eq { blbrace }
+"rbrace" @Dbl @Eq { rbrace }
+"brbrace" @Dbl @Eq { brbrace }
+"lfloor" @Dbl @Eq { lfloor }
+"blfloor" @Dbl @Eq { blfloor }
+"rfloor" @Dbl @Eq { rfloor }
+"brfloor" @Dbl @Eq { brfloor }
+"lceil" @Dbl @Eq { lceil }
+"blceil" @Dbl @Eq { blceil }
+"rceil" @Dbl @Eq { rceil }
+"brceil" @Dbl @Eq { brceil }
+"langle" @Dbl @Eq { langle }
+"blangle" @Dbl @Eq { blangle }
+"rangle" @Dbl @Eq { rangle }
+"brangle" @Dbl @Eq { brangle }
+}
+@LP
+@LP
+Here are some miscellaneous symbols:
+@DP
+ragged @Break {
+"hbar" @Dbl @Eq { hbar }
+"Re" @Dbl @Eq { Re }
+"Im" @Dbl @Eq { Im }
+"partial" @Dbl @Eq { partial }
+"infty" @Dbl @Eq { infty }
+"prime" @Dbl @Eq { prime }
+"nabla" @Dbl @Eq { nabla }
+"surd" @Dbl @Eq { surd }
+"top" @Dbl @Eq { top }
+"bot" @Dbl @Eq { bot }
+"dbar" @Dbl @Eq { dbar }
+"triangle" @Dbl @Eq { triangle }
+"backslash" @Dbl @Eq { backslash }
+"forall" @Dbl @Eq { forall }
+"exists" @Dbl @Eq { exists }
+"neg" @Dbl @Eq { neg }
+"circle" @Dbl @Eq { circle }
+"square" @Dbl @Eq { square }
+"ldots" @Dbl @Eq { ldots }
+"cdots" @Dbl @Eq { cdots }
+"vdots" @Dbl @Eq { vdots }
+"ddots" @Dbl @Eq { ddots }
+"del" @Dbl @Eq { del }
+"grad" @Dbl @Eq { grad }
+"..." @Dbl @Eq { ... }
+",...," @Dbl @Eq { ,..., }
+"half" @Dbl @Eq { half }
+"third" @Dbl @Eq { third }
+"'" @Dbl @Eq { ' }
+"empty" @Dbl @Eq { empty }
+}
+@DP
+Finally, here is the long list of full names from the Adobe Symbol font;
+these are the same characters as you get with the @Code "@Sym" symbol
+of Section {@NumberOf characters}, but within equations you don't need
+to type {@Code "@Sym"}:
+@DP
+ragged @Break {
+"space" @Dbl @Eq { space }
+"exclam" @Dbl @Eq { exclam }
+"universal" @Dbl @Eq { universal }
+"numbersign" @Dbl @Eq { numbersign }
+"existential" @Dbl @Eq { existential }
+"percent" @Dbl @Eq { percent }
+"ampersand" @Dbl @Eq { ampersand }
+"suchthat" @Dbl @Eq { suchthat }
+"parenleft" @Dbl @Eq { parenleft }
+"parenright" @Dbl @Eq { parenright }
+"asteriskmath" @Dbl @Eq { asteriskmath }
+"plus" @Dbl @Eq { plus }
+"comma" @Dbl @Eq { comma }
+"minus" @Dbl @Eq { minus }
+"period" @Dbl @Eq { period }
+"slash" @Dbl @Eq { slash }
+"zero" @Dbl @Eq { zero }
+"one" @Dbl @Eq { one }
+"two" @Dbl @Eq { two }
+"three" @Dbl @Eq { three }
+"four" @Dbl @Eq { four }
+"five" @Dbl @Eq { five }
+"six" @Dbl @Eq { six }
+"seven" @Dbl @Eq { seven }
+"eight" @Dbl @Eq { eight }
+"nine" @Dbl @Eq { nine }
+"colon" @Dbl @Eq { colon }
+"semicolon" @Dbl @Eq { semicolon }
+"less" @Dbl @Eq { less }
+"equal" @Dbl @Eq { equal }
+"greater" @Dbl @Eq { greater }
+"question" @Dbl @Eq { question }
+"congruent" @Dbl @Eq { congruent }
+"Alpha" @Dbl @Eq { Alpha }
+"Beta" @Dbl @Eq { Beta }
+"Chi" @Dbl @Eq { Chi }
+"Delta" @Dbl @Eq { Delta }
+"Epsilon" @Dbl @Eq { Epsilon }
+"Phi" @Dbl @Eq { Phi }
+"Gamma" @Dbl @Eq { Gamma }
+"Eta" @Dbl @Eq { Eta }
+"Iota" @Dbl @Eq { Iota }
+"thetaone" @Dbl @Eq { thetaone }
+"Kappa" @Dbl @Eq { Kappa }
+"Lambda" @Dbl @Eq { Lambda }
+"Mu" @Dbl @Eq { Mu }
+"Nu" @Dbl @Eq { Nu }
+"Omicron" @Dbl @Eq { Omicron }
+"Pi" @Dbl @Eq { Pi }
+"Theta" @Dbl @Eq { Theta }
+"Rho" @Dbl @Eq { Rho }
+"Sigma" @Dbl @Eq { Sigma }
+"Tau" @Dbl @Eq { Tau }
+"Upsilon" @Dbl @Eq { Upsilon }
+"sigmaone" @Dbl @Eq { sigmaone }
+"Omega" @Dbl @Eq { Omega }
+"Xi" @Dbl @Eq { Xi }
+"Psi" @Dbl @Eq { Psi }
+"Zeta" @Dbl @Eq { Zeta }
+"bracketleft" @Dbl @Eq { bracketleft }
+"therefore" @Dbl @Eq { therefore }
+"bracketright" @Dbl @Eq { bracketright }
+"perpendicular" @Dbl @Eq { perpendicular }
+"underscore" @Dbl @Eq { underscore }
+"radicalex" @Dbl @Eq { radicalex }
+"alpha" @Dbl @Eq { alpha }
+"beta" @Dbl @Eq { beta }
+"chi" @Dbl @Eq { chi }
+"delta" @Dbl @Eq { delta }
+"epsilon" @Dbl @Eq { epsilon }
+"phi" @Dbl @Eq { phi }
+"gamma" @Dbl @Eq { gamma }
+"eta" @Dbl @Eq { eta }
+"iota" @Dbl @Eq { iota }
+"phione" @Dbl @Eq { phione }
+"kappa" @Dbl @Eq { kappa }
+"lambda" @Dbl @Eq { lambda }
+"mu" @Dbl @Eq { mu }
+"nu" @Dbl @Eq { nu }
+"omicron" @Dbl @Eq { omicron }
+"pi" @Dbl @Eq { pi }
+"theta" @Dbl @Eq { theta }
+"rho" @Dbl @Eq { rho }
+"sigma" @Dbl @Eq { sigma }
+"tau" @Dbl @Eq { tau }
+"upsilon" @Dbl @Eq { upsilon }
+"omegaone" @Dbl @Eq { omegaone }
+"omega" @Dbl @Eq { omega }
+"xi" @Dbl @Eq { xi }
+"psi" @Dbl @Eq { psi }
+"zeta" @Dbl @Eq { zeta }
+"braceleft" @Dbl @Eq { braceleft }
+"bar" @Dbl @Eq { bar }
+"braceright" @Dbl @Eq { braceright }
+"similar" @Dbl @Eq { similar }
+"Upsilonone" @Dbl @Eq { Upsilonone }
+"minute" @Dbl @Eq { minute }
+"lessequal" @Dbl @Eq { lessequal }
+"fraction" @Dbl @Eq { fraction }
+"infinity" @Dbl @Eq { infinity }
+"florin" @Dbl @Eq { florin }
+"club" @Dbl @Eq { club }
+"diamond" @Dbl @Eq { diamond }
+"heart" @Dbl @Eq { heart }
+"spade" @Dbl @Eq { spade }
+"arrowboth" @Dbl @Eq { arrowboth }
+"arrowleft" @Dbl @Eq { arrowleft }
+"arrowup" @Dbl @Eq { arrowup }
+"arrowright" @Dbl @Eq { arrowright }
+"arrowdown" @Dbl @Eq { arrowdown }
+"degree" @Dbl @Eq { degree }
+"plusminus" @Dbl @Eq { plusminus }
+"second" @Dbl @Eq { second }
+"greaterequal" @Dbl @Eq { greaterequal }
+"multiply" @Dbl @Eq { multiply }
+"proportional" @Dbl @Eq { proportional }
+"partialdiff" @Dbl @Eq { partialdiff }
+"bullet" @Dbl @Eq { bullet }
+"divide" @Dbl @Eq { divide }
+"notequal" @Dbl @Eq { notequal }
+"equivalence" @Dbl @Eq { equivalence }
+"approxequal" @Dbl @Eq { approxequal }
+"ellipsis" @Dbl @Eq { ellipsis }
+"arrowvertex" @Dbl @Eq { arrowvertex }
+"arrowhorizex" @Dbl @Eq { arrowhorizex }
+"carriagereturn"@Dbl @Eq { carriagereturn }
+"aleph" @Dbl @Eq { aleph }
+"Ifraktur" @Dbl @Eq { Ifraktur }
+"Rfraktur" @Dbl @Eq { Rfraktur }
+"weierstrass" @Dbl @Eq { weierstrass }
+"circlemultiply"@Dbl @Eq { circlemultiply }
+"circleplus" @Dbl @Eq { circleplus }
+"emptyset" @Dbl @Eq { emptyset }
+"intersection" @Dbl @Eq { intersection }
+"union" @Dbl @Eq { union }
+"propersuperset"@Dbl @Eq { propersuperset }
+"reflexsuperset"@Dbl @Eq { reflexsuperset }
+"notsubset" @Dbl @Eq { notsubset }
+"propersubset" @Dbl @Eq { propersubset }
+"reflexsubset" @Dbl @Eq { reflexsubset }
+"element" @Dbl @Eq { element }
+"notelement" @Dbl @Eq { notelement }
+"angle" @Dbl @Eq { angle }
+"gradient" @Dbl @Eq { gradient }
+"registerserif" @Dbl @Eq { registerserif }
+"copyrightserif"@Dbl @Eq { copyrightserif }
+"trademarkserif"@Dbl @Eq { trademarkserif }
+"product" @Dbl @Eq { product }
+"radical" @Dbl @Eq { radical }
+"dotmath" @Dbl @Eq { dotmath }
+"logicalnot" @Dbl @Eq { logicalnot }
+"logicaland" @Dbl @Eq { logicaland }
+"logicalor" @Dbl @Eq { logicalor }
+"arrowdblboth" @Dbl @Eq { arrowdblboth }
+"arrowdblleft" @Dbl @Eq { arrowdblleft }
+"arrowdblup" @Dbl @Eq { arrowdblup }
+"arrowdblright" @Dbl @Eq { arrowdblright }
+"arrowdbldown" @Dbl @Eq { arrowdbldown }
+"lozenge" @Dbl @Eq { lozenge }
+"angleleft" @Dbl @Eq { angleleft }
+"registersans" @Dbl @Eq { registersans }
+"copyrightsans" @Dbl @Eq { copyrightsans }
+"trademarksans" @Dbl @Eq { trademarksans }
+"summation" @Dbl @Eq { summation }
+"parenlefttp" @Dbl @Eq { parenlefttp }
+"parenleftex" @Dbl @Eq { parenleftex }
+"parenleftbt" @Dbl @Eq { parenleftbt }
+"bracketlefttp" @Dbl @Eq { bracketlefttp }
+"bracketleftex" @Dbl @Eq { bracketleftex }
+"bracketleftbt" @Dbl @Eq { bracketleftbt }
+"bracelefttp" @Dbl @Eq { bracelefttp }
+"braceleftmid" @Dbl @Eq { braceleftmid }
+"braceleftbt" @Dbl @Eq { braceleftbt }
+"braceex" @Dbl @Eq { braceex }
+"angleright" @Dbl @Eq { angleright }
+"integral" @Dbl @Eq { integral }
+"integraltp" @Dbl @Eq { integraltp }
+"integralex" @Dbl @Eq { integralex }
+"integralbt" @Dbl @Eq { integralbt }
+"parenrighttp" @Dbl @Eq { parenrighttp }
+"parenrightex" @Dbl @Eq { parenrightex }
+"parenrightbt" @Dbl @Eq { parenrightbt }
+"bracketrighttp"@Dbl @Eq { bracketrighttp }
+"bracketrightex"@Dbl @Eq { bracketrightex }
+"bracketrightbt"@Dbl @Eq { bracketrightbt }
+"bracerighttp" @Dbl @Eq { bracerighttp }
+"bracerightmid" @Dbl @Eq { bracerightmid }
+"bracerightbt" @Dbl @Eq { bracerightbt }
+}
+@DP
+The names given are the same as Adobe's, as used by the @Code "@Sym"
+symbol, except in a few places where the Adobe name contains a digit,
+which is not possible for a symbol name in Lout.
+@End @Section
diff --git a/doc/user/equ_symb b/doc/user/equ_symb
new file mode 100644
index 0000000..f56eca2
--- /dev/null
+++ b/doc/user/equ_symb
@@ -0,0 +1,357 @@
+@Section
+ @Title { Symbols }
+ @Tag { symbols }
+@Begin
+@PP
+@Code "@Eq" prints characters in the fonts appropriate for mathematics:
+@ID {
+@Code "x - 2"
+|7ct
+@Eq { x-2 }
+}
+Here @Eq { x } is in Italic, @Eq { 2 } is in Roman, and @Eq { minus } is
+from the Symbol font. The character @Code "-" is a @I symbol which
+stands for @Eq {minus}, and @Code "2" is also a symbol, standing for
+@Eq { 2 }. @Code "@Eq" includes a vast number of symbols:
+@ID {
+@Code "Omega delta int partial club"
+|7ct
+@Eq { Omega delta int partial club }
+}
+The summary at the end of this chapter has the complete list.
+@PP
+Symbols whose names are made from letters should be separated from each
+other by at least one space or end of line, as was done above, or else
+@Code "@Eq" will become confused:
+@ID {
+@Code "Omegadelta"
+|7ct
+@Eq { Omegadelta }
+}
+Symbols whose names are made from digits and punctuation characters can,
+however, be run together with each other and with symbols made from
+letters:
+@ID {
+@Code "Omega-delta<=2"
+|7ct
+@Eq { Omega-delta<=2 }
+}
+This rule applies throughout Lout (Section {@NumberOf spaces}).
+@PP
+Some symbols join objects together in mathematical ways:
+@ID {
+@Code "x sub 2"
+|7ct
+@Eq { x sub 2 }
+}
+Here the @Code "sub" symbol has taken the object just to its left, and
+sub. @Index { @Code "sub" in equations }
+the object just to its right, and joined them into one object in the
+form of a subscript. The two objects are called the left and right
+parameters of {@Code "sub"}, and they may be arbitrary Lout objects.
+@PP
+Other symbols of a similar kind include {@Code "sup"} for
+sup. @Index { @Code "sup" in equations }
+superscripting, @Code "over" for built-up fractions, and @Code "from"
+over.eq. @Index { @Code "over" in equations }
+from. @Index { @Code "from" in equations }
+to. @Index { @Code "to" in equations }
+and @Code "to" for the lower and upper limits of sums, products,
+etc. These symbols may be used together to produce complicated
+equations very easily:
+@ID {
+@Code {
+"big sum from i=0 to n r sup i"
+"= {r sup n+1 - 1} over r-1"
+}
+||7ct
+@Eq { big sum from i=0 to n r sup i
+= {r sup n+1 - 1} over r-1
+}
+}
+Here @Code "sum" is just the @Eq { summation } symbol; @Code "from" and
+@Code "to" do all the work of placing the limits. They are quite
+independent, so either or both may be omitted. To get a superscript
+directly over a subscript, use the @Code "supp" and @Code "on" symbols:
+supp. @Index { @Code "supp" in equations }
+on. @Index { @Code "on" in equations }
+@ID {
+@Code "A supp b on a"
+|7ct
+@Eq { A supp b on a }
+}
+These two symbols should always be used together as shown.
+@PP
+Sometimes a subscript appears to be too far to the right, owing to
+the slope of italic letters: in @Eq { W sub n }, for example. You
+can fix this by using `tucked' subscripts, like this:
+@IndentedList
+@LI {
+@Code "W tsub n"
+|7ct
+@Eq { W tsub n }
+}
+@LI {
+@Code "W supp b ton a"
+|7ct
+@Eq { W supp b ton a }
+}
+@EndList
+The @Code "tsub" and @Code "ton" symbols are exactly like @Code "sub"
+and @Code "on" except for this tucking-in effect. However, the
+@Code "sub" symbol itself does a certain amount of tucking in; the
+amount is determined by kerning information in the font files and
+so is sensitive to the shape of the letters.
+@PP
+As usual in Lout, braces are used to group something into an indivisible
+object. Leaving them out creates ambiguities:
+@ID @Code "a sup b over c"
+There are two possible interpretations for this:
+@IndentedList
+@LI {
+@Code "{a sup b} over c"
+|7ct
+@Eq { {a sup b} over c }
+}
+@LI {
+@Code "a sup {b over c}"
+|7ct
+@Eq { a sup {b over c} }
+}
+@EndList
+@Code "@Eq" chooses between them in the following way. Every symbol that
+takes a parameter also has a {@I precedence}, which is a number. For
+example, @Code "sup" has precedence 60 and @Code "over" has precedence
+54. The symbol with the highest precedence wins the object lying between
+them, so in the above case the first interpretation is chosen. If two
+symbols of equal precedence compete for an object, the association is
+towards the left:
+@ID {
+@Code "a sup b sub 2"
+|7ct
+@Eq { a sup b sub 2 }
+}
+In this case it is more probable that the following right association
+was actually wanted:
+@ID {
+@Code "a sup { b sub 2 }"
+|7ct
+@Eq { a sup { b sub 2 } }
+}
+When in doubt, use braces to make the grouping clear.
+@PP
+White space between two objects is considered to be a symbol with
+precedence 7, which is lower than the precedence of any @Code "@Eq"
+symbol; but if the two objects are immediately adjacent and neither is
+enclosed in braces the precedence is 102, which is higher than the
+precedence of any @Code "@Eq" symbol. Compare these three examples:
+@IL
+@LI {
+@Code "big sum from i=0 to n"
+|7ct
+@Eq { big sum from i=0 to n }
+}
+@LI {
+@Code "big sum from {i = 0} to n"
+|7ct
+@Eq { big sum from {i = 0} to n }
+}
+@LI {
+@Code "big sum from i = 0 to n"
+|7ct
+@Eq { big sum from i = 0 to n }
+}
+@EL
+and you will see that some care is needed on this point. Braces can
+always be used to override precedence and associativity, and when in
+doubt the easiest course is to insert them. Although Lout allows
+symbols to associate towards the left or right, @Code "@Eq" chooses
+to have only left associative symbols. The summary at the end of this
+chapter gives the precedence of every symbol.
+@PP
+The @Code matrix symbol {@PageMark matrix} builds an array of objects:
+matrix. @Index { @Code "matrix" in equations }
+@ID {
+@Code {
+"matrix"
+" atleft { blpar }"
+" atright { brpar }"
+"{"
+" row col x sup 2 col y sup 2 col z sup 2"
+" row col x col y col z"
+" row col 1 col 1 col 1"
+"}"
+}
+||9ct
+@Eq {
+matrix
+ atleft { blpar }
+ atright { brpar }
+{
+ row col x sup 2 col y sup 2 col z sup 2
+ row col x col y col z
+ row col 1 col 1 col 1
+}
+}
+}
+The @Code atleft and @Code atright options place vertically scaled
+versions of their values at each side; if either is omitted the value
+is taken to be an empty object of zero width by default. Although
+we have used @Code blpar and @Code brpar here, since the options are
+vertically scaled to the correct size some people prefer simply
+@ID @OneRow @Code {
+"matrix"
+" atleft { ( }"
+" atright { ) }"
+}
+The right parameter of @Code matrix is the array itself. It must be
+enclosed in braces, and it is a sequence of rows introduced by
+@Code row symbols; each row is a sequence of objects introduced by
+@Code col symbols.
+@FootNote {
+Older versions of Lout use different symbols, {@Code "above"} and
+{@Code "nextcol"}, at this point. For backward compatibility these
+symbols are still available, but they are obsolete and no longer documented.
+}
+The @Code row and @Code col symbols have low precedence, but not
+as low as white space between two objects. Therefore, unless the
+entries in the array are very simple, it is safest to enclose each of
+them in braces.
+@PP
+Entries built with the @Code col symbol have their objects centred in
+the column. Also available are @Code lcol for left-justified entries,
+@Code ccol meaning the same as {@Code col}, @Code rcol for
+right-justified entries, and @Code mcol for alignment along column
+marks. Each column may contain entries of different kinds, except
+that @Code mcol does not work well with any other sort.
+@PP
+When several matrices appear side by side, slight differences in height
+can cause an unsightly appearance:
+@ID @Eq {
+matrix
+ atleft { ( }
+ atright { ) }
+{
+ row col a sub 11 col a sub 12
+ row col a sub 21 col a sub 22
+}
+matrix
+ atleft { ( }
+ atright { ) }
+{
+ row col b sub 11 col b sub 12
+ row col b sub 21 col b sub 22
+}
+=
+matrix
+ atleft { ( }
+ atright { ) }
+{
+ row col c sub 11 col c sub 12
+ row col c sub 21 col c sub 22
+}
+}
+To assist in resolving this problem, the @Code "matrix" symbol has
+a @Code "strut" option, which causes a strut to be inserted into
+every row, guaranteeing that every row has height at least equal
+to the height of the strut. By using
+@ID @Code {
+"matrix"
+" strut { Yes }"
+"..."
+}
+in each of the three matrices above, the result is improved to
+@ID @Eq {
+matrix
+ atleft { ( }
+ atright { ) }
+ strut { Yes }
+{
+ row col a sub 11 col a sub 12
+ row col a sub 21 col a sub 22
+}
+matrix
+ atleft { ( }
+ atright { ) }
+ strut { Yes }
+{
+ row col b sub 11 col b sub 12
+ row col b sub 21 col b sub 22
+}
+=
+matrix
+ atleft { ( }
+ atright { ) }
+ strut { Yes }
+{
+ row col c sub 11 col c sub 12
+ row col c sub 21 col c sub 22
+}
+}
+By default, the strut has height @Code "0.5f" (half the current font
+size) both above and below the axis of the row. This can be changed
+by giving any length as the value of the @Code "strut" option:
+@Code "strut { 2.0c }" for two centimetres above and below
+the axis, and so on.
+@PP
+Some symbols have been added which produce `matrices' with commonly needed
+@Code atleft and @Code atright options already set for you. Here are
+these symbols, on the left, with the equivalent @Code matrix symbol
+and, on the right, the result produced:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col ! @Col @Code B ! @Col ! @Col C }
+{
+@Rowa
+ A { "pmatrix" }
+ B { "matrix atleft { ( } atright { ) } { M }" }
+ C { @Eq { pmatrix { M } } }
+@Rowa
+ A { "bmatrix" }
+ B { "matrix atleft { blbrack } atright { brbrack } { M }" }
+ C { @Eq { bmatrix { M } } }
+@Rowa
+ A { "brmatrix" }
+ B { "matrix atleft { blbrace } atright { brbrace } { M }" }
+ C { @Eq { brmatrix { M } } }
+@Rowa
+ A { "fmatrix" }
+ B { "matrix atleft { blfloor } atright { brfloor } { M }" }
+ C { @Eq { fmatrix { M } } }
+@Rowa
+ A { "cmatrix" }
+ B { "matrix atleft { blceil } atright { brceil } { M }" }
+ C { @Eq { cmatrix { M } } }
+@Rowa
+ A { "amatrix" }
+ B { "matrix atleft { blangle } atright { brangle } { M }" }
+ C { @Eq { amatrix { M } } }
+}
+For example:
+@ID {
+@Code {
+"fmatrix { (n+1) over 2 }"
+}
+|7ct
+@Eq {
+fmatrix { (n+1) over 2 }
+}
+}
+As this example shows, these symbols are very useful for getting large
+scaled delimiters around things that aren't necessarily matrices at all.
+@PP
+Each of the @Code "@Eq" symbols that takes parameters also has a @Code gap
+option, which controls the amount of space inserted by the symbol:
+@IL
+@LI {
+@Code "x over y"
+|7ct
+@Eq { x over y }
+}
+@LI {
+6c @Wide @Code "x over gap { 3p } y"
+|7ct
+@Eq { x over gap { 3p } y }
+}
+@EL
+@Code "@Eq" usually gets the spacing right without help.
+@End @Section
diff --git a/doc/user/equ_tequ b/doc/user/equ_tequ
new file mode 100644
index 0000000..bbb1d20
--- /dev/null
+++ b/doc/user/equ_tequ
@@ -0,0 +1,41 @@
+@Section
+ @Title { An alternative version that uses @TeX's fonts }
+ @Tag { teq }
+@Begin
+@PP
+There is an alternative version of the @Code "@Eq" symbol that
+tex.mathfonts @SubIndex { mathematical fonts }
+uses fonts taken from the @TeX document formatting
+system. These fonts are said to produce better-looking
+mathematics than the Adobe Systems Symbol font used by the
+standard @Code "@Eq" symbol.
+@PP
+The fonts were converted from @TeX form to PostScript form by
+Basil K. Malyshev, who has attached a license to them permitting
+non-commercial use only. This is a much more stringent license
+than the one attached to Lout itself. For this reason, the files
+needed to use these @TeX fonts are distributed separately from the
+rest of Lout, although you can get them from the same place (see the
+preface of this guide).
+@PP
+Once these files are installed, you change from the standard
+@Code "@Eq" symbol to the @TeX version by changing the initial
+@Code "@SysInclude { eq }" to {@Code "@SysInclude { teq }"}. Do
+absolutely nothing else.
+@PP
+Unfortunately, the @TeX fonts are not usually resident on PostScript
+printing devices, which means that Lout is obliged to include them in its
+PostScript output file. You don't have to do anything to make this
+happen, but the cost is fairly large: changing to @Code "@SysInclude { teq }"
+increases the size of the PostScript output file by 252 kilobytes.
+@PP
+It is possible to gain access to characters in the @TeX
+fonts that are not accessible directly from {@Code "@Eq"}, mainly
+script capitals and bold-italic Greek letters. For example, you can
+use @Code "{cmsy Base} @Font @Char \"A\"" to get a script A, and
+@Code "{cmmi Bold} @Font @Char \"pi\"" to get a bold-italic
+{@Sym pi}. For the full story, consult file @Code "teq" in the
+Lout system include directory for the names of these fonts, and then
+look in Lout's font directory for their font metrics files, which
+show the names and encodings of all the characters.
+@End @Section
diff --git a/doc/user/equ_vert b/doc/user/equ_vert
new file mode 100644
index 0000000..1595ed8
--- /dev/null
+++ b/doc/user/equ_vert
@@ -0,0 +1,164 @@
+@Section
+ @Tag { vpos }
+ @Title { Vertical positioning }
+@Begin
+@PP
+Every equation and every object within every equation has an
+@I axis running through it which is used to position it vertically
+axis @Index { axis of equation }
+with respect to nearby objects. In the Expert's Guide to Lout
+@Cite { $kingston1995lout.expert } this is called a @I { row mark },
+but we'll stick with axis. Here are some examples with the axis
+shown as a dashed line:
+@ID {
+@ShowHMark @Eq { x sup 2 }
+||2c
+@ShowHMark @Eq { non + }
+||2c
+@ShowHMark @Eq { @ExA }
+}
+When these objects are placed adjacent to one another, their
+axes are merged, giving the correct vertical positioning:
+@ID @ShowHMark @Eq { x sup 2 + @ExA }
+Most of the time you do not need to think about vertical
+positioning, because for most objects there is just one
+sensible place for the axis to go, and Lout puts it there.
+@PP
+Matrices and the delimiters that enclose them are the two
+exceptions. Lout makes the axis of a matrix pass through
+its exact centre, and it shifts the axes of delimiters
+so that they exactly enclose the thing delimited. These
+choices are never disastrous, but there are other possibilities
+that might be better sometimes.
+@PP
+The axis of a matrix could reasonably be set to the axis
+of any of its rows:
+@ID {
+@ShowHMark @Eq {
+matrix userow { yes } {
+ axisrow col { x sup 3 } col { y sup 3 } col { z sup 3 }
+ row col { x sup 2 } col { y sup 2 } col { z sup 2 }
+ row col { x } col { y } col { z }
+}
+}
+||2c
+@ShowHMark @Eq {
+matrix userow { yes } {
+ row col { x sup 3 } col { y sup 3 } col { z sup 3 }
+ axisrow col { x sup 2 } col { y sup 2 } col { z sup 2 }
+ row col { x } col { y } col { z }
+}
+}
+||2c
+@ShowHMark @Eq {
+matrix userow { yes } {
+ row col { x sup 3 } col { y sup 3 } col { z sup 3 }
+ row col { x sup 2 } col { y sup 2 } col { z sup 2 }
+ axisrow col { x } col { y } col { z }
+}
+}
+}
+Alternatively, it could be set to where Lout usually places it,
+through the exact centre:
+@ID {
+@ShowHMark @Eq {
+matrix {
+ row col { x sup 3 } col { y sup 3 } col { z sup 3 }
+ row col { x sup 2 } col { y sup 2 } col { z sup 2 }
+ row col { x } col { y } col { z }
+}
+}
+}
+Delimiters could reasonably keep the axes that they naturally
+have (approximately through their centres, but not exactly):
+@ID {
+@ShowHMark @Eq { pmatrix userow { yes } shiftdelim { no } { @ExA } }
+}
+or they could have their axes moved in the way that Lout usually does,
+to the point which allows them to evenly cover the thing delimited:
+@ID {
+@ShowHMark @Eq { pmatrix userow { yes } { @ExA } }
+}
+Altogether then there are four possibilities when these two alternatives
+interact:
+@CD lines @Break @Tab
+ @Fmta { @Col 0.5w @VShift A ! @Col ! @Col B ! @Col ! @Col C }
+{
+@Rowa
+ A { }
+ B { Matrix axis
+uses row axis }
+ C { Matrix axis passes
+through centre }
+@Rowa
+@Rowa
+ A { Delimiter
+keeps its axis }
+ B { @ShowHMark @Eq { pmatrix userow {yes} shiftdelim {no } { @ExA } } }
+ C { @ShowHMark @Eq { pmatrix userow {no } shiftdelim {no } { @ExA } } }
+@Rowa
+@Rowa
+ A { Delimiter
+axis shifted }
+ B { @ShowHMark @Eq { pmatrix userow {yes} shiftdelim {yes} { @ExA } } }
+ C { @ShowHMark @Eq { pmatrix userow {no } shiftdelim {yes} { @ExA } } }
+}
+To supply these possibilities, the @Code "matrix" symbol and all
+its variants (@Code "pmatrix" etc.) have two options whose
+values may be {@Code "yes"} or {@Code "no"}:
+@ID @Code {
+"matrix"
+" userow { no }"
+" shiftdelim { yes }"
+"{"
+" ..."
+"}"
+}
+The @Code "userow" option determines whether the axis of the
+matrix will use a row axis; the default is not to, i.e. to
+centre the axis instead. The @Code "shiftdelim" option
+determines whether the axis of the delimiter will be shifted
+so that the delimiter evenly covers the thing delimited; the
+default is to do this.
+@PP
+If @Code "userow" is {@Code "yes"}, the next question is
+which row's axis to use to make the overall axis. If you
+do nothing, the first (or only) row's axis becomes the
+overall axis. To select some other row instead, replace
+the @Code "row" symbol that precedes the row by {@Code "axisrow"}:
+@ID @Code @Tab
+ vmargin { 0.5vx }
+ hmargin { 1s }
+ @Fmta { @Col A ! @Col ! @Col B ! @Col ! @Col C ! @Col ! @Col D ! @Col }
+ @Fmtb { @Col A ! @Col " col {" ! @Col B ! @Col "} col {" ! @Col C ! @Col "} col {" ! @Col D ! @Col "}" }
+{
+@Rowa
+ A { "matrix userow { yes } {" &0io }
+@Rowb
+ A { " row" }
+ B { "x sup 3" }
+ C { "y sup 3" }
+ D { "z sup 3" }
+@Rowb
+ A { " axisrow" }
+ B { "x sup 2" }
+ C { "y sup 2" }
+ D { "z sup 2" }
+@Rowb
+ A { " row" }
+ B { "x" }
+ C { "y" }
+ D { "z" }
+@Rowa
+ A { "}" }
+}
+The result of this is
+@ID @ShowHMark @Eq {
+matrix userow { yes } {
+ row col { x sup 3 } col { y sup 3 } col { z sup 3 }
+ axisrow col { x sup 2 } col { y sup 2 } col { z sup 2 }
+ row col { x } col { y } col { z }
+}
+}
+with the axis through the second row as desired.
+@End @Section
diff --git a/doc/user/fmt b/doc/user/fmt
new file mode 100644
index 0000000..ffd5e7f
--- /dev/null
+++ b/doc/user/fmt
@@ -0,0 +1,16 @@
+@Chapter
+ @Title { Changing the Overall Format }
+ @Tag { changes }
+@Begin
+@LP
+The symbols of Lout make many decisions behind the scenes. Even the
+humble @Code "@PP" symbol has to decide how much vertical space to
+leave, and how far to indent the first line of the paragraph. How to
+change these decisions is the subject of this chapter.
+@BeginSections
+@Include { fmt_setu }
+@Include { fmt_size }
+@Include { fmt_marg }
+@Include { fmt_head }
+@EndSections
+@End @Chapter
diff --git a/doc/user/fmt_head b/doc/user/fmt_head
new file mode 100644
index 0000000..77cbada
--- /dev/null
+++ b/doc/user/fmt_head
@@ -0,0 +1,313 @@
+@Section
+ @Title { Page numbers and running headers }
+ @Tag { headers }
+@Begin
+@PP
+A @I { page header } is a line at the top of a page containing a page
+page.header @Index { page header }
+running.header @Index { running header }
+number or running title. A @I { page footer } is a similar line at
+page.footer @Index { page footer }
+the bottom of a page. This section describes the setup file options
+that control the appearance of page headers and footers.
+@PP
+There are four basic styles, selected by the @Code "@PageHeaders" option:
+page.headers @Index @Code "@PageHeaders"
+@ID @Tab
+ @Fmta { @Col @Code { "@PageHeaders {" A "}" } ! @Col B }
+{
+@Rowa
+ A { None }
+ B { No page headers, no page footers. }
+@Rowa
+ A { Simple }
+ B { No footers, and a centred page number between hyphens for
+header on every page whose number is not 0 or 1. }
+@Rowa
+ A { Titles }
+ B { Full running titles as in the present document. }
+@Rowa
+ A { NoTitles }
+ B { Page numbers placed as for @Code { Titles }, but with the
+titles themselves blanked out. }
+}
+@Code Titles and @Code NoTitles use Lout's cross-referencing machinery,
+so will require a few runs to settle down. @Code None and @Code Simple
+do not, so they work first time and may be used with the @Code "-s"
+command line flag. Section {@NumberOf cross} has a fuller discussion
+of these ramifications of cross referencing.
+@PP
+The next step is to set the page numbers, using
+the @Code "@PageNumbers" and @Code "@FirstPageNumber" options. There
+page.numbers @Index @Code "@PageNumbers"
+are two useful values for {@Code "@PageNumbers"}:
+@ID @Tab
+ @Fmta { @Col @Code { "@PageNumbers {" A "}" } ! @Col B }
+{
+@Rowa
+ A { Arabic }
+ B { Arabic page numbers }
+@Rowa
+ A { Roman }
+ B { Lower-case Roman page numbers }
+}
+although the full range of choices is {@Code "None"}, {@Code "Arabic"},
+{@Code "Roman"}, {@Code "UCRoman"}, {@Code "Alpha"}, and
+{@Code "UCAlpha"}. @Code "@FirstPageNumber" is the number of the
+first.page.number @Index @Code "@FirstPageNumber"
+first page. Its default value is of course {@Code 1}, although
+@ID @Code "@FirstPageNumber { 0 }"
+might be useful if the first page is really an unnumbered cover
+sheet. @Code "@FirstPageNumber" must be an Arabic number even if
+@Code "@PageNumbers" is set to something other than {@Code "Arabic"}.
+@PP
+Some document types, such as books and technical reports with cover
+sheets, have a separate introductory
+sequence of pages preceding the main sequence. For the page numbers on
+introductory pages there are two options, @Code "@IntroPageNumbers"
+intro.page.numbers @Index @Code "@IntroPageNumbers"
+intro.first.page.number @Index @Code "@IntroFirstPageNumber"
+and {@Code "@IntroFirstPageNumber"}, which are exactly analogous to
+@Code "@PageNumbers" and {@Code "@FirstPageNumber"}. It is traditional
+to number introductory pages using Roman numerals, so @Code Roman is
+the default value of {@Code "@IntroPageNumbers"}.
+@PP
+Let's summarize the five options so far by looking at their values in
+the @Code book setup file, which was used to produce the present document:
+@ID @OneRow @Code {
+"@PageHeaders { Titles }"
+"@PageNumbers { Arabic }"
+"@FirstPageNumber { 1 }"
+"@IntroPageNumbers { Roman }"
+"@IntroFirstPageNumber { 1 }"
+}
+The remainder of this section goes beyond these basic choices to explain
+how to change the detailed appearance of page headers
+and footers. Inevitably it gets quite a lot harder.
+@PP
+Pages are classified by the page header options in three ways:
+@NumberedList
+@LI { @I { Odd vs. even }. The first page is odd, the second is even,
+odd.pages @Index { odd and even pages }
+the third is odd, and so on. If @Code "@FirstPageNumber" is set to
+an even number, the first page will have that number, but it will still
+be classified as odd. }
+@LI { @I { Start vs. non-start }. A start page is the first page of
+start.pages @Index { start and non-start pages }
+some major part of the document (a chapter, say); other pages are
+non-start. The @Code { Simple } header type uses a simpler
+definition: a page whose number is 0 or 1 is a start page, all others
+are non-start. }
+@LI { @I { Intro vs. non-intro }. Intro pages form a separate sequence of
+intro.pages @Index { intro and non-intro pages }
+pages that precede the main (non-intro) sequence. They typically contain
+prefatory material such as a title page, preface, and table of contents.
+In a book there will always be an even number of Intro pages, even if
+it means that the last one is empty. }
+@EndList
+These classifications are quite independent of each other: a page
+could be a non-intro start odd page, or an intro non-start even page,
+and so on. This makes eight (@Eq { 2 times 2 times 2 }) possibilities
+altogether. Depending on the type of document there may also be pages
+that Lout will never place a page header or footer on. For example, no page
+headers or footers will appear on pages containing part titles in books.
+@PP
+If you choose {@Code "@PageHeaders { None }"}, there are no page headers
+or footers, so there is nothing more to say. If you choose
+{@Code "@PageHeaders { Simple }"}, then eight options become relevant
+for controlling the page headers on each of the eight kinds of
+pages. Here they are with their default values:
+@ID @OneRow @Code {
+"@OddTop { @Centre { - @PageNum - } }"
+"@EvenTop { @Centre { - @PageNum - } }"
+"@StartOddTop { @Null }"
+"@StartEvenTop { @Null }"
+"@IntroOddTop { @Null }"
+"@IntroEvenTop { @Null }"
+"@IntroStartOddTop { @Null }"
+"@IntroStartEvenTop { @Null }"
+}
+If the word @Code Start is missing from an option name, the option
+applies to non-start pages; if @Code Intro is missing, it applies to
+non-intro pages. Another eight options control footers in the same way:
+@ID @OneRow @Code {
+"@OddFoot { @Null }"
+"@EvenFoot { @Null }"
+"@StartOddFoot { @Null }"
+"@StartEvenFoot { @Null }"
+"@IntroOddFoot { @Centre @PageNum }"
+"@IntroEvenFoot { @Null }"
+"@IntroStartOddFoot { @Centre @PageNum }"
+"@IntroStartEvenFoot { @Null }"
+}
+The value of the option is an object which becomes the header or
+footer. It may be any object, but there are some peculiarities that
+will be explained now.
+@PP
+The full set of symbols of the BasicSetup package can be used
+when setting page header options (and indeed any of the options
+of the @Code "@BasicSetup" @Code "@Use" clause package), as well as
+symbols from special-purpose
+packages that have been included before this setup file. This means
+you can use any symbol you might reasonably expect to. But footnotes and
+floating figures and tables, for example, are not from BasicSetup so
+cannot be used.
+@PP
+There are five symbols of special relevance to page headers and
+footers: {@Code "@Null"}, {@Code "@Centre"}, {@Code "@Center"},
+{@Code "@Right"}, and {@Code "@PageNum"}.
+@PP
+The @Code "@Null" symbol is similar to the empty object in printing as
+null. @Index @Code "@Null"
+nothing, but in addition it removes the vertical space that ordinarily
+separates the header line from the page body. If there is no header
+there should be no vertical space either, so always use @Code "@Null"
+rather than the empty object in header and footer options.
+@PP
+@Code "@Centre" and @Code "@Center" centre the following object, and
+centre. @Index @Code "@Centre"
+center. @Index @Code "@Center"
+right. @Index @Code "@Right"
+@Code "@Right" right-justifies it:
+@ID @Code "at left @Centre { - 27 - } @Right { at right }"
+produces
+@QD @HExpand { at left @Centre { - 27 - } @Right { at right } }
+The objects should be enclosed in braces if they contain spaces.
+@PP
+The @Code "@PageNum" symbol produces the number of the current page, in
+page.num. @Index @Code "@PageNum"
+Arabic, Roman, etc. as specified by the @Code "@PageNumbers" or
+@Code "@IntroPageNumbers" option. @Code "@PageNum" is available only
+within page header and footer options.
+@PP
+At this point you might like to pause and verify that the default
+values of the sixteen options given above produce what we said they
+would: no footers, and a centred page number between hyphens on every
+page whose number is not 0 or 1. It should be clear now what to do if
+you want to remove the hyphens, move the numbers to the page footer,
+make them bold, have them at the left on even pages and at the right on
+odd pages, and so on.
+@PP
+A different set of sixteen options applies when @Code "@PageHeaders"
+is set to @Code Titles or {@Code "NoTitles"}. Here are the eight
+options for headers, with their default values:
+@ID @OneRow @Code {
+"@RunningOddTop { @I { @MinorNum @DotSep @MinorTitle }"
+" @Right @B @PageNum }"
+"@RunningEvenTop { @B @PageNum"
+" @Right @I { @MajorNum @DotSep @MajorTitle } }"
+"@RunningStartOddTop { @Null }"
+"@RunningStartEvenTop { @Null }"
+"@RunningIntroOddTop { @Null }"
+"@RunningIntroEvenTop { @Null }"
+"@RunningIntroStartOddTop { @Null }"
+"@RunningIntroStartEvenTop { @Null }"
+}
+Some options occupy two lines, but only because they are long: as
+usual, the end of a line is the same as one space. Here are the
+options for footers:
+@ID @OneRow @Code {
+"@RunningOddFoot { @Null }"
+"@RunningEvenFoot { @Null }"
+"@RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum }"
+"@RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum }"
+"@RunningIntroOddFoot { @Right @PageNum }"
+"@RunningIntroEvenFoot { @PageNum }"
+"@RunningIntroStartOddFoot { @Null }"
+"@RunningIntroStartEvenFoot { @Null }"
+}
+All these options are similar to the earlier ones, in providing one
+option for each of the eight kinds of pages. The names are the same
+except that @Code Running is added to each. Remember that a start
+page is now one that begins a major part of the document.
+@PP
+In addition to the symbols described earlier for simple page headers
+and footers, these running header options may contain the symbols
+{@Code "@MajorNum"}, {@Code "@MajorTitle"}, {@Code "@MinorNum"},
+{@Code "@MinorTitle"}, {@Code "@DotSep"}, {@Code "@NoDotSep"},
+{@Code "@DotJoin"}, {@Code "@NoDotJoin"}, {@Code "@DashJoin"},
+and {@Code "@NumSep"} described below.
+major.num @Index @Code "@MajorNum"
+major.title @Index @Code "@MajorTitle"
+minor.num @Index @Code "@MinorNum"
+minor.title @Index @Code "@MinorTitle"
+@PP
+The exact values of {@Code "@MajorNum"}, {@Code "@MajorTitle"},
+{@Code "@MinorNum"}, and {@Code "@MinorTitle"} depend on the document
+type, but they are intended to describe what is on the current page. Here
+are some values typical of books:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col @Code B }
+ vmargin { 0.5vx }
+{
+@Rowa
+ A { "@MajorNum" }
+ B { Chapter 2 }
+@Rowa
+ A { "@MajorTitle" }
+ B { Adding Structure to Documents }
+@Rowa
+ A { "@MinorNum" }
+ B { 2.7 }
+@Rowa
+ A { "@MinorTitle" }
+ B { Tables of contents }
+}
+It is not possible to change the values assigned to these symbols, but
+the sixteen options allow you to choose whether to use them and how to
+arrange them, in the usual way.
+@PP
+The @Code "@DotSep" symbol consumes the objects to its left and right
+dot.sep @Index @Code "@DotSep"
+and produces them separated by a dot and two spaces:
+@ID @Code "@MinorNum @DotSep @MinorTitle"
+is the same as
+@ID @Code "@MinorNum. @MinorTitle"
+However, if either object is empty, the dot and two spaces are
+omitted. It's a fine point, needed mainly for unnumbered chapters
+and sections. @Code "@DotJoin" is the same as @Code "@DotSep" but
+dot.join @Index @Code "@DotJoin"
+without the two spaces. @Code "NoDotSep" is the same as
+nodot.sep @Index @Code "@NoDotSep"
+@Code "@DotSep" but leaving out the dot, @Code "@NoDotJoin" is the same
+nodot.join @Index @Code "@NoDotJoin"
+as @Code "@DotJoin" but again leaving out the dot, and @Code "@DashJoin"
+dash.join @Index @Code "@DashJoin"
+is the same as @Code "@DotJoin" except that `--' replaces the dot.
+@PP
+Lout uses @Code "@DotSep" between numbers and titles by default. To
+get rid of all dots between numbers and titles it is necessary to
+change all occurrences of @Code "@DotSep" in the setup file to
+{@Code "@NoDotSep"}. There are about ten occurrences, depending
+on the setup file.
+@PP
+@Code "@NumSep" {@PageMark numsep} is similar to @Code "@NoDotSep"
+except that one space
+num.sep @Index @Code "@NumSep"
+hungarian @Index { Hungarian and @Code "@NumSep" }
+is used, not two, and also the order of the two parts is reversed and
+a dot is added if the current language is Hungarian (apparently
+Hungarians write `3. Table' where other people write `Table 3').
+@Code "@NumSep" is used behind the scenes in a variety of places.
+@PP
+The present document was produced using @Code "@PageHeaders { Titles }"
+with the default values of the sixteen options unchanged, as you might
+like to verify. @Code "@PageHeaders { NoTitles }" is identical to
+@Code "@PageHeaders { Titles }" except that {@Code "@MajorNum"},
+{@Code "@MajorTitle"}, {@Code "@MinorNum"}, and {@Code "@MinorTitle"}
+are always replaced by empty objects. The description given at the
+beginning of this section, `like @Code "Titles" but with the titles
+blanked out,' is therefore accurate.
+@PP
+There is a @Code "@StructPageNums" setup file option that produces
+structpagenums. @Index @Code "@StructPageNums"
+structured page numbers when it is changed to {@Code Yes}; that is,
+page numbers that include a section number, subsection number, and so
+on. Precisely which structure numbers are included is determined by the
+@Code "@SectionNumInRunners" option and its relatives. @Code "@PageHeaders"
+must be @Code Titles when structured page numbers are used, and it is
+probably best to set @Code "@SectionGap" and some similar options to
+{@Code "2b"} (meaning new page) as well. The @Code "@NumberSeparator"
+setup file option (Section {@NumberOf largescale}) affects the format
+of the structured page numbers.
+@End @Section
diff --git a/doc/user/fmt_marg b/doc/user/fmt_marg
new file mode 100644
index 0000000..1b82d41
--- /dev/null
+++ b/doc/user/fmt_marg
@@ -0,0 +1,121 @@
+@Section
+ @Title { Page margins, page boxes, and page backgrounds }
+ @Tag { margins }
+@Begin
+@PP
+There are six options for setting the top and bottom margins on each
+margins. @RawIndex { margins }
+margins.in.pages @SubIndex { in pages }
+top.margin @Index @Code "@TopMargin"
+foot.margin @Index @Code "@FootMargin"
+odd.left.margin @Index @Code "@OddLeftMargin"
+odd.right.margin @Index @Code "@OddRightMargin"
+even.left.margin @Index @Code "@EvenLeftMargin"
+even.right.margin @Index @Code "@EvenRightMargin"
+page, and the left and right margins on odd and even pages. Here they
+are with their default values:
+@ID @OneRow @Code {
+"@TopMargin { 2.50c }"
+"@FootMargin { 2.50c }"
+"@OddLeftMargin { 2.50c }"
+"@OddRightMargin { 2.50c }"
+"@EvenLeftMargin { 2.50c }"
+"@EvenRightMargin { 2.50c }"
+}
+When setting these options you must ensure that
+@ID @Eq { @Code "@OddLeftMargin" + @Code "@OddRightMargin" =
+@Code "@EvenLeftMargin" + @Code "@EvenRightMargin" }
+In other words, the total margin on odd pages must be the same as on
+even pages.
+@PP
+You can have a box drawn around each page if you wish. Here are the
+relevant options and their default values:
+@ID @OneRow @Code {
+"@PageBoxType { None }"
+"@PageBoxMargin { 1.00c }"
+"@PageBoxLineWidth {}"
+"@PageBoxPaint { None }"
+"@PageBoxShadow { 0.06c }"
+}
+You get boxes by changing the @Code "@PageBoxType" option:
+page.box.type @Index @Code "@PageBoxType"
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col @CC B }
+{
+@Rowa
+ A { "@PageBoxType { None }" }
+ B { (no box) }
+@Rowa
+@Rowa
+ A { "@PageBoxType { Box }" }
+ B { @Box 1.0c @Wide 1.4c @High }
+@Rowa
+@Rowa
+ A { "@PageBoxType { CurveBox }" }
+ B { @CurveBox 1.0c @Wide 1.4c @High }
+@Rowa
+@Rowa
+ A { "@PageBoxType { ShadowBox }" }
+ B { @ShadowBox 1.0c @Wide 1.4c @High }
+}
+Page boxes reduce the amount of space available to the page contents,
+so your columns will become somewhat narrower and shorter when you
+introduce them.
+@PP
+The {@Code "@PageBoxMargin"}, {@Code "@PageBoxLineWidth"},
+{@Code "@PageBoxPaint"}, and {@Code "@PageBoxShadow"} options affect
+the page box exactly as the {@Code margin}, {@Code linewidth},
+{@Code paint}, and {@Code shadow} options described
+for other boxes in Section {@NumberOf boxes} do. For example,
+@ID @OneRow @Code {
+"@PageBoxType { CurveBox }"
+"@PageBoxMargin { 1.0c }"
+"@PageBoxPaint { grey }"
+}
+draws a curved box, painted grey, around each page, with a one
+centimetre margin between its boundary and the page contents. If the
+left margin is 2.5 centimetres, say, this gives a total left margin
+from the page edge to the page contents of 3.5 centimetres.
+@PP
+Finally, it is possible to have something other than the usual white
+background on the page, using the @Code "@PageBackground" option:
+page.background @Index @Code "@PageBackground"
+@ID @Code {
+"@PageBackground { @Scale 60d @Rotate lightgrey @Colour DRAFT }"
+}
+The value of the option is an object which is drawn on each page,
+within the margins, before the page contents are drawn. This
+example draws a large word DRAFT in light grey diagonally across each
+page:
+@ID @Box margin { 0c } 0.2 @Scale @IncludeGraphic draft.eps
+You have to find a suitable angle by experiment. As Section
+{@NumberOf scaling} explains, @Code "@Scale" with no scale factor
+only takes account of the available horizontal space, not the
+available vertical space, so if your angle is too steep the result
+will be too tall for the page and you will get a regrettably obscure
+warning message about a `broken size constraint.' The solution is
+to try a smaller angle.
+@PP
+Another useful page background draws marks to show where the margins
+boundarymarks @Index @Code "@BoundaryMarks"
+cut.marks @Index { cut marks }
+lie:
+@ID @Code "@PageBackground { @BoundaryMarks }"
+produces something like this around each page:
+@DP @DP
+@ID { |@DisplayIndent 3c @High 2c @Wide @HExpand @VExpand @BoundaryMarks }
+@DP @DP
+The @Code "@BoundaryMarks" symbol has options for controlling the
+line width (thickness), the line length, and the gap between the
+ends of the lines and the corner of the text area:
+@ID @OneRow @Code {
+"@PageBackground {"
+" @BoundaryMarks"
+" linewidth { 0.2p }"
+" length { 0.5c }"
+" gap { 0.5c }"
+"}"
+}
+This shows the default values: 0.2 points for line width,
+0.5 centimetres for the others.
+@End @Section
diff --git a/doc/user/fmt_setu b/doc/user/fmt_setu
new file mode 100644
index 0000000..6e1bb05
--- /dev/null
+++ b/doc/user/fmt_setu
@@ -0,0 +1,210 @@
+@Section
+ @Title { Setup files }
+ @Tag { setup }
+@Begin
+@PP
+As mentioned briefly in Section {@NumberOf start}, each Lout document
+begins with an instruction to include (i.e. to read) a @I { setup file }:
+setup.file @Index { setup file }
+sysinclude. @Index @Code "@SysInclude"
+system.include @Index { system include directory }
+doc.file @Index { @Code "doc" file }
+@ID @Code "@SysInclude { doc }"
+The setup file's name in this example is @Code { doc }, and the @Code Sys
+in @Code "@SysInclude" means that @Code doc is stored in the @I { Lout
+system include directory }, which is where all the standard setup files
+are kept. Each document type (Chapter {@NumberOf types}) has its own
+setup file, and each specialized package (for equations, tables, and
+so on) has a setup file too.
+@PP
+To change the overall format of a document, you need to create your own
+setup file by copying and modifying one of the standard ones. We will
+assume that you are making an ordinary document, with the @Code doc
+setup file, but a similar procedure works for any setup file.
+@PP
+You first need to find out the name of the Lout system include
+directory, by typing
+@ID @Code "lout -V"
+in Unix. This causes Lout to print out various facts about itself. Then,
+supposing that this tells you that the Lout system include directory
+is @Code { "/usr/lout/include" }, type the Unix command
+@ID @Code "cp /usr/lout/include/doc mydoc"
+to place a copy of the @Code doc setup file in your directory,
+mydoc.file @Index { @Code "mydoc" file }
+renaming it @Code {mydoc}. Since @Code "doc" is read-only, you may
+also need to change the mode of @Code mydoc to be writable (by
+@Code "chmod +w mydoc" in Unix). Now replace
+@ID @Code "@SysInclude { doc }"
+at the beginning of your document by
+@ID @Code "@Include { mydoc }"
+and Lout will read @Code mydoc as the setup file instead of
+@Code { doc }. Since the two files are at present identical, this has
+changed nothing so far; but now any changes you make to @Code mydoc
+will affect your document. Notice the use of @Code "@Include"
+rather than @Code { "@SysInclude" }; @Code "@Include" will search your
+current directory for @Code { mydoc }, whereas @Code "@SysInclude"
+searches only the system directory.
+@PP
+The remainder of this section is a tour through @Code {doc},
+explaining the various parts and how to modify them. The first lines
+that actually do anything are these:
+@ID @OneRow @Code {
+"@SysInclude { fontdefs }"
+"@SysInclude { langdefs }"
+"@SysInclude { bsf }"
+"@SysInclude { dsf }"
+"@SysInclude { docf }"
+}
+We already know that @Code "@SysInclude" causes Lout to read a file from
+the Lout system include directory. Files @Code fontdefs and @Code langdefs
+fontdefs.file @Index { @Code "fontdefs" file }
+langdefs.file @Index { @Code "langdefs" file }
+tell Lout what fonts and languages there are. Files @Code "bsf" and
+@Code "dsf" contain
+bsf.file @Index { @Code "bsf" file }
+dsf.file @Index { @Code "dsf" file }
+the definitions of the BasicSetup and DocumentSetup packages, in which
+all the symbols of the first two chapters of this guide are defined. File
+@Code "docf" contains extra definitions specific to
+docf.file @Index { @Code "docf" file }
+ordinary documents (as distinct from technical reports, books, or the
+other document types of Chapter {@NumberOf types}). So this line
+will be different in the setup files for those other types.
+@PP
+The next line is
+@ID @Code {
+"@Include { mydefs }"
+}
+This searches your current directory for a file called @Code { mydefs },
+which (as Section {@NumberOf definitions} explains) is intended to hold
+your own personal set of definitions of new symbols. It does no harm
+if there is no @Code "mydefs" file in your current directory, because
+@Code "@Include" then searches the Lout system include directory for
+it, and there is an empty @Code mydefs file there. When using your own
+setup file, you might prefer to delete @Code "@Include { mydefs }" and
+put your definitions in its place, so that you have one file of setup
+material rather than two.
+@PP
+Next we come to the BasicSetup @Code "@Use" clause. It looks like this:
+use. @Index @Code "@Use"
+@ID @OneRow @Code @Verbatim {
+@Use { @BasicSetup
+ # @InitialFont { Times Base 12p }
+ # @InitialBreak { {adjust 1.20fx hyphen} @OrIfPlain {ragged 1fx nohyphen} }
+ # @InitialSpace { lout }
+ # @InitialLanguage { English }
+ # @InitialColour { black }
+ # @OptimizePages { No }
+ # @HeadingFont { Bold }
+ # @ParaGap { 1.3vx @OrIfPlain 1f }
+ # @ParaIndent { 2.00f @OrIfPlain 5s }
+}
+}
+@Code "@BasicSetup" is a symbol, and @Code { "@InitialFont" },
+basic.layout @Index @Code "@BasicSetup"
+@Code { "@InitialBreak" }, etc. are its options. There are more options
+than we've shown; the display above just shows the first
+few. You change the overall format of your document by changing
+these options.
+@PP
+As it stands, the options are all hidden within comments, so the
+default values (shown within braces) are in force. To change an
+option, delete the @Code "#" and change the value between
+braces. For example, to set the document in Helvetica 10 point
+font, change the @Code { "@InitialFont" } line to
+@ID @Code "@InitialFont { Helvetica Base 10p }"
+We won't go through all the options now, since they are the subject of
+following sections.
+@PP
+The @Code "@OrIfPlain" symbol that appears within some setup file
+options is used to set the value of the option differently when
+plain text output (Section {@NumberOf plain}) is being produced. For
+example, the default value of @Code "@InitialBreak" is usually
+{@Code "adjust 1.20fx hyphen"}, but when plain text is being produced
+it switches to {@Code "ragged 1fx nohyphen"}. When changing such
+options you can leave the @Code "@OrIfPlain" symbol there and change
+one or both of the alternative values as you wish.
+@PP
+Next comes a similar @Code "@Use" clause, for the DocumentSetup package:
+@ID @OneRow @Code {
+"@Use { @DocumentSetup"
+" # @PageType { A4 @OrIfPlain Other }"
+" # @PageWidth { 80s }"
+" # @PageHeight { 66f }"
+" # @PageOrientation { Portrait }"
+" # @PageBackground {}"
+" # @TopMargin { 2.5c @OrIfPlain 6f }"
+"}"
+}
+This one has many options, starting with options for page
+layout as shown, then going on to figures and tables, tables of
+contents, etc.
+@PP
+The standard setup files are all much the same up to this point; the
+main variation is that in some files, some options are already set. The
+@Code "slides" setup file, for example, contains
+@ID @Code "@InitialFont { Times Base 20p }"
+so that overhead transparencies will have a large font size. However,
+now comes a third @Code "@Use" clause whose symbol and options depend
+on the document type. For ordinary documents (i.e. in the @Code "doc"
+setup file) this clause is
+@ID @OneRow @Code {
+"@Use { @OrdinarySetup"
+" # @IndexWord { index }"
+" # @AppendixWord { appendix }"
+" # @SectionNumbers { Arabic }"
+" # @AppendixNumbers { UCAlpha }"
+" # @SectionHeadingFont { Bold }"
+"}"
+}
+Once again this is just some of the options. In the @Code slides
+setup file for overhead transparencies, we find this:
+@ID @OneRow @Code {
+"@Use { @OverheadSetup"
+" # @DateLine { No }"
+" # @ContentsWord { contents }"
+" # @FirstOverheadNumber { 1 }"
+" # @OverheadNumbers { Arabic }"
+" # @TitlePageFont { Helvetica Base 1.5f }"
+" # @OverheadHeadingFont { Bold }"
+" # @OverheadInContents { No }"
+"}"
+}
+In general this third @Code "@Use" clause assigns values to options
+specific to the document type we are using, whereas the first and
+second @Code "@Use" clauses assign values to options that are relevant to many
+or all document types.
+@PP
+The setup file ends with a comment identifying a spot where database
+declarations may
+database.dec @Index { database declarations, where to put }
+be put, and one such declaration, for reference printing styles.
+@PP
+The setup files used with other packages, such as C and C++ program printing,
+diagrams, and graphs, are similar to the @Code { doc } setup file we
+have just gone through. They contain a @@SysInclude line analogous to
+@Code "@SysInclude { dsf }" for reading the package's definition, followed
+by a @@Use clause for setting the package's options. The same procedure
+is followed for changing these options. For example, to change the
+options of the @Code "diag" package, copy file @Code "diag" from the
+Lout system include directory to your directory, replace the
+@ID @Code "@SysInclude { diag }"
+line at the top of your document by {@Code "@Include { mydiag }"}, then
+edit @Code "mydiag" and change the options as you wish.
+@PP
+If you are using several packages and you would like a single setup file,
+that is quite easy to arrange. For example, suppose you have
+@ID @Code {
+"@Include { mydoc }"
+"@Include { mydiag }"
+"@Include { mycprint }"
+}
+To create a single setup file, just concatenate these three files into
+one file (call it @Code { mysetup }, say), and replace the three lines by
+@ID @Code {
+"@Include { mysetup }"
+}
+As explained earlier, you can even replace the @Code "@Include { mydefs }"
+line within the setup file by the actual definitions, giving just one
+file of setup material for the entire document.
+@End @Section
diff --git a/doc/user/fmt_size b/doc/user/fmt_size
new file mode 100644
index 0000000..8e4a258
--- /dev/null
+++ b/doc/user/fmt_size
@@ -0,0 +1,91 @@
+@Section
+ @Title { Page size and page orientation }
+ @Tag { pagesize }
+@Begin
+@PP
+This section explains how to use the setup file options that determine
+page size and page orientation. Here they are with their default values:
+page.type @Index @Code "@PageType"
+@ID @OneRow @Code {
+"@PageType { A4 }"
+"@PageWidth {}"
+"@PageHeight {}"
+"@PageOrientation { Portrait }"
+}
+The usual way to determine the page size is to set the @Code "@PageType"
+option to the name of the paper you use:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmtb { @Col ! @Col ! @Col @I @RR B ! @Col @I @RR C }
+ @Fmta { @Col @Code { "@PageType {" A "}" } ! @Col ! @Col @Code @CC B !
+ @Col @Code @CC C }
+{
+@Rowb B { width in points } C { height in points }
+@Rowa A { Letter } B { 612p } C { 792p }
+@Rowa A { Tabloid } B { 792p } C { 1224p }
+@Rowa A { Ledger } B { 1224p } C { 792p }
+@Rowa A { Legal } B { 612p } C { 1008p }
+@Rowa A { Statement } B { 396p } C { 612p }
+@Rowa A { Executive } B { 540p } C { 720p }
+@Rowa A { A3 } B { 842p } C { 1190p }
+@Rowa A { A4 } B { 595p } C { 842p }
+@Rowa A { A5 } B { 420p } C { 595p }
+@Rowa A { B4 } B { 729p } C { 1032p }
+@Rowa A { B5 } B { 516p } C { 729p }
+@Rowa A { Folio } B { 612p } C { 936p }
+@Rowa A { Quarto } B { 610p } C { 780p }
+@Rowa A { 10x14 } B { 720p } C { 1008p }
+}
+This will automatically assign the widths and heights shown above to
+the @Code "@PageWidth" and @Code "@PageHeight" options, so you don't
+have to worry about those options. If your paper size is not on this
+list, set @Code "@PageType" to @Code Other and supply your own width
+and height:
+page.width @Index @Code "@PageWidth"
+page.height @Index @Code "@PageHeight"
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A }
+{
+@Rowa A { "@PageType { Other }" }
+@Rowa A { "@PageWidth { 12.0c }" }
+@Rowa A { "@PageHeight { 18.0c }" }
+}
+The width and height may each be any length (Section {@NumberOf objects}),
+and do not have to be in points.
+@PP
+The basic page orientations are @I portrait and @I landscape:
+page.orientation @Index @Code "@PageOrientation"
+@ID @Tab
+ @Fmta { @Col 8c @Wide @Code A ! @Col B }
+{
+@Rowa
+ A { "@PageOrientation { Portrait }" }
+ B { @Box 1.0c @Wide 1.4c @High { Hello } }
+@Rowa
+@Rowa
+ A { "@PageOrientation { Landscape }" }
+ B { @Box 1.4c @Wide 1.0c @High { Hello } }
+}
+When changing to {@Code Landscape}, do not change the page type, page
+width, or page height, and do not change the way you feed your paper
+into the printer. Lout knows what to do.
+@PP
+Two other orientations are provided which are 180@Degree rotations of
+the basic ones:
+@ID @Tab
+ @Fmta { @Col 8c @Wide @Code A ! @Col B }
+{
+@Rowa
+ A { "@PageOrientation { ReversePortrait }" }
+ B { @Box 1.0c @Wide 1.4c @High { //1rt &1rt 180d @Rotate Hello } }
+@Rowa
+@Rowa
+ A { "@PageOrientation { ReverseLandscape }" }
+ B { @Box 1.4c @Wide 1.0c @High { //1rt &1rt 180d @Rotate Hello } }
+}
+@Code ReverseLandscape might be useful when post-processing the PostScript output
+to print two landscape pages per sheet. The @Code "@PageOrientation" symbol is
+available at the start of a document, as well as in the setup file, like
+{@Code "@InitialFont"} and {@Code "@PageHeaders"}.
+@End @Section
diff --git a/doc/user/gra b/doc/user/gra
new file mode 100644
index 0000000..58c73ac
--- /dev/null
+++ b/doc/user/gra
@@ -0,0 +1,46 @@
+@Chapter
+ @Title { Graphs }
+ @Tag { graphs }
+@Begin
+@LP
+This chapter describes how to draw graphs, using the @Code "@Graph"
+graphs. @Index { graphs (statistical) }
+graph. @Index @Code "@Graph"
+symbol. For example,
+@ID @OneRow @Code {
+"@Graph"
+" abovecaption { New South Wales road deaths, 1960--1990"
+"(fatalities per 100 million vehicle km) }"
+"{"
+" @Data points { plus } pairs { dashed }"
+" { 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0 }"
+"}"
+}
+produces the graph
+@CD @Graph
+ abovecaption { New South Wales road deaths, 1960--1990
+(fatalities per 100 million vehicle km) }
+{
+ @Data
+ points { plus }
+ pairs { dashed }
+ {
+ 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0
+ }
+}
+The features of @Code "@Graph" include captions, automatic and manual
+ticks and labels, logarithmic axes, histograms, and plotting of
+mathematical functions.
+@BeginSections
+@Include { gra_intr }
+@Include { gra_over }
+@Include { gra_capt }
+@Include { gra_tick }
+@Include { gra_data }
+@Include { gra_plac }
+@Include { gra_func }
+@Include { gra_keys }
+@Include { gra_erro }
+@Include { gra_summ }
+@EndSections
+@End @Chapter
diff --git a/doc/user/gra_capt b/doc/user/gra_capt
new file mode 100644
index 0000000..089e6e5
--- /dev/null
+++ b/doc/user/gra_capt
@@ -0,0 +1,72 @@
+@Section
+ @Title { Captions }
+ @Tag { captions }
+@Begin
+@PP
+There are options for placing captions above, below, left, and right of
+captions.graphs @SubIndex { in graphs }
+the frame:
+@ID @OneRow @Code {
+"@Graph"
+" abovecaption { This appears above }"
+" belowcaption { This appears below }"
+" leftcaption { At left }"
+" rightcaption { At right }"
+"{"
+"}"
+}
+produces
+@CD @Graph
+ abovecaption { This appears above }
+ belowcaption { This appears below }
+ leftcaption { At left }
+ rightcaption { At right }
+{
+}
+The captions may be arbitrary Lout objects, so may include
+equations, {@Code "@Rotate"}, and so on. Each caption except
+@Code rightcaption is printed in the
+@Code "clines @Break" style, which means that multiple lines in one
+caption will be centred beneath each other. The @Code rightcaption
+option uses the @Code "lines @Break" style, in which the lines are
+left justified beneath each other. Incidentally, this example shows
+what happens if there is no data.
+@PP
+There are options for controlling the amount of space between each
+caption (when non-empty) and the frame. Here they are with their
+default values:
+@ID @OneRow @Code {
+"@Graph"
+" abovegap { 0.5 cm }"
+" belowgap { 0.5 cm }"
+" leftgap { 1.5 cm }"
+" rightgap { 0.5 cm }"
+"{"
+" ..."
+"}"
+}
+This is particularly important in the case of {@Code "leftgap"} (and
+@Code "rightgap" if @Code rticks is used), because
+Lout has no idea how wide the ticks and labels attached to the y axis
+are; 1.5 cm is just a wild guess and often needs adjustment. On the
+other hand, Lout does know how high the ticks and labels on the x axis
+are; it allows 1.7 times the current font size for them, and
+@Code "belowgap" is additional to this.
+@PP
+When a graph is to be presented as a centred display, it is generally
+best if the centring is done with respect to the frame alone, not the
+captions, ticks, and labels. The @Code "hidecaptions" option does this by
+making the left and right captions and gaps seem to Lout to have zero width:
+@ID @OneRow @Code {
+"@Graph"
+" hidecaptions { yes }"
+"{"
+" ..."
+"}"
+}
+Actually @Code "yes" has been made the default value, since the vast
+majority of graphs are centred displays. In the rare cases where
+this feature is not wanted (for example, if a graph appears as an entry
+in a table), use {@Code "hidecaptions { no }"}. The y and r ticks and labels
+seem to Lout to have zero width already, so do not need to be hidden.
+@End @Section
diff --git a/doc/user/gra_data b/doc/user/gra_data
new file mode 100644
index 0000000..323f155
--- /dev/null
+++ b/doc/user/gra_data
@@ -0,0 +1,267 @@
+@Section
+ @Title { Changing the appearance of the data }
+ @Tag { data }
+@Begin
+@PP
+The @Code "@Data" symbol has options for controlling the
+data. @Index @Code "@Data"
+appearance of its data. We have already seen the
+@Code "points" option, which controls what is printed at each data
+point:
+points.graphs @Index { @Code "points" option in graphs }
+@CD @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A ! @Col B ! @Col ! @Col @Code C ! @Col D }
+{
+@Rowa
+ A { cross }
+ B { @GraphCross }
+ C { plus }
+ D { @GraphPlus }
+@Rowa
+ A { square }
+ B { @GraphSquare }
+ C { filledsquare }
+ D { @GraphFilledSquare }
+@Rowa
+ A { diamond }
+ B { @GraphDiamond }
+ C { filleddiamond }
+ D { @GraphFilledDiamond }
+@Rowa
+ A { circle }
+ B { @GraphCircle }
+ C { filledcircle }
+ D { @GraphFilledCircle }
+@Rowa
+ A { triangle }
+ B { @GraphTriangle }
+ C { filledtriangle }
+ D { @GraphFilledTriangle }
+}
+If the @Code "points" option is omitted or empty, nothing is printed. The
+symbols are centred over the data point. There is a @Code "symbolsize"
+option which controls the size (radius) of all these symbols:
+symbolsize. @Index { @Code "symbolsize" option in graphs }
+@ID @OneRow @Code {
+"@Data"
+" symbolsize { 0.15 ft }"
+}
+shows the default, 0.15 times the current font size. More
+precisely, the default value is taken from an option
+to the @Code "@Graph" symbol, also called {@Code "symbolsize"}. By
+setting that option you can therefore set the symbol size of all data
+points in the graph at once; its default value is {@Code "0.15 ft"}.
+@PP
+The @Code "@Data" symbol also has a @Code "pairs" option which
+pairs. @Index { @Code "pairs" option in graphs }
+determines how each pair of points is connected. The choices are
+@Code none (not connected, the default), @Code solid (a solid line),
+@Code dashed (a dashed line), or @Code dotted (a dotted line). For
+example,
+@ID @OneRow @Code {
+"@Graph"
+" abovecaption { Estimated population of Boston, New York, and Philadelphia }"
+"{"
+" @Data points { plus } pairs { solid }"
+" { 1720 12000 1730 13000 1740 15601 1760 15631 1770 15877 }"
+""
+" @Data points { plus } pairs { dashed }"
+" { 1720 7000 1730 8622 1740 10451 1750 14255 1760 18000 1770 22667 }"
+""
+" @Data points { plus } pairs { dotted }"
+" { 1720 10000 1730 11500 1740 12654 1750 18202 1760 23750 1770 34583 }"
+"}"
+}
+produces
+@CD @Graph
+ abovecaption { Estimated population of Boston, New York, and Philadelphia
+}
+{
+ @Data points { plus } pairs { solid }
+ { 1720 12000 1730 13000 1740 15601 1760 15631 1770 15877 }
+
+ @Data points { plus } pairs { dashed }
+ { 1720 7000 1730 8622 1740 10451 1750 14255 1760 18000 1770 22667 }
+
+ @Data points { plus } pairs { dotted }
+ { 1720 10000 1730 11500 1740 12654 1750 18202 1760 23750 1770 34583 }
+
+}
+(R. C. Simmons, @I { The American Colonies }, W. W. Norton, New York,
+1981.) We will see in Section {@NumberOf key} how to add an explanatory key to
+this graph. If the points have symbols, these connecting lines will stop 1.5
+symbolsizes away from the data points, so as not to overstrike them. If
+the points have no symbols and @Code "pairs" is {@Code "dashed"}, the
+first and last dash in each segment will have half the length of the
+others.
+@PP
+A @Code "dashlength" option controls the length of dashes and also the
+separation between dots, and a @Code "linewidth" option controls the
+width (thickness) of the lines and dots:
+@ID @OneRow @Code {
+"@Data"
+" dashlength { 0.2 ft }"
+" linewidth { 0.5 pt }"
+"{"
+" ..."
+"}"
+}
+This shows the default values, {@Code "0.2 ft"} for @Code "dashlength"
+and {@Code "0.5 pt"} (half a point) for {@Code "linewidth"}. Actually
+the default value for @Code "linewidth" is whatever happens to be
+already in use, but Lout sets line widths to half a point initially.
+This option also controls the separation between bars in histograms.
+@PP
+The @Code "pairs" option is also used for producing histograms, like
+histograms. @Index { histograms }
+this:
+@ID @OneRow @Code {
+"@Graph"
+" hidecaptions { yes }"
+" abovecaption { Computer Science 3 Results (1993) }"
+" leftcaption { Number of"
+"students }"
+" belowcaption { Final mark (%) }"
+" yextra { 0 cm }"
+" ymax { 80 }"
+"{"
+" @Data pairs { yhisto }"
+" { 0 1 10 3 20 2 30 4 40 15 50 60 60 58 70 28 80 15 90 7 100 0 }"
+"}"
+}
+which has result
+@CD @Graph
+ hidecaptions { yes }
+ abovecaption { Computer Science 3 Results (1993) }
+ leftcaption { Number of
+students }
+ belowcaption { Final mark (%) }
+ yextra { 0 cm }
+ ymax { 80 }
+{
+ @Data
+ pairs { yhisto }
+ { 0 1 10 3 20 2 30 4 40 15 50 60 60 58 70 28 80 15 90 7 100 0 }
+}
+Note carefully that one y histogram rectangle occupies the space from
+one x value to the next, with height equal to the y value lying between
+these two x values. This means that the very last y value has no effect
+on the result (however, there must be a last y value anyway).
+@PP
+There is an alternative to @Code "yhisto" called {@Code "surfaceyhisto"}:
+@CD @Graph
+ hidecaptions { yes }
+ abovecaption { Computer Science 3 Results (1993) }
+ leftcaption { Number of
+students }
+ belowcaption { Final mark (%) }
+ yextra { 0 cm }
+ ymax { 80 }
+{
+ @Data
+ pairs { surfaceyhisto }
+ { 0 1 10 3 20 2 30 4 40 15 50 60 60 58 70 28 80 15 90 7 100 0 }
+}
+As you can see, @Code "surfaceyhisto" draws just the surface of the
+histogram, not the descending lines.
+@PP
+There are @Code "xhisto" and @Code "surfacexhisto" values of
+@Code "pairs" which produce a histogram whose bars are parallel to
+the x axis. There are also {@Code "filledyhisto" } and
+{@Code "filledxhisto" } values which produce filled rectangles rather
+than outlined ones:
+@ID @OneRow @Code {
+"@Graph"
+" abovecaption { Fertility rates in some developing countries }"
+" xextra { 0 cm }"
+" yextra { 0 cm }"
+" xmax { 8 }"
+" yticks {"
+" 1.5 (Turkey) 2.5 (Thailand)"
+" 3.5 (Indonesia) 4.5 (Costa Rica)"
+" 5.5 (Colombia) 6.5 (Cameroon)"
+" 7.5 (Botswana) 8.5 (Bangladesh)"
+" }"
+" yticklength { 0 cm }"
+"{"
+" @Data"
+" pairs { filledxhisto }"
+" { 0 1 3.2 2 2.2 3 3.0 4 3.5 5 2.8 6 5.9 7 4.8 8 5.3 9 }"
+"}"
+}
+produces
+@CD @Graph
+ abovecaption { Fertility rates in some developing countries
+ }
+ xextra { 0 cm }
+ yextra { 0 cm }
+ xmax { 8 }
+ yticks { 1.5 (Turkey) 2.5 (Thailand) 3.5 (Indonesia) 4.5 (Costa Rica)
+ 5.5 (Colombia) 6.5 (Cameroon) 7.5 (Botswana) 8.5 (Bangladesh) }
+ yticklength { 0 cm }
+{
+ @Data
+ pairs { filledxhisto }
+ { 0 1 3.2 2 2.2 3 3.0 4 3.5 5 2.8 6 5.9 7 4.8 8 5.3 9 }
+}
+(Bryant Robey, Shea O. Rutstein, and Leo Morros: The fertility decline in
+developing countries, @I { Scientific American }, December 1993.) Once
+again each bar goes from one y value to the next, with its x value
+equal to the x value lying between the two y values; this time the very
+first x value has no effect on the result.
+@PP
+The colour of one set of data can be changed with a @Code "colour"
+option:
+@ID @OneRow @Code {
+"@Data"
+" colour { blue }"
+}
+For the complete list of acceptable colour names, see Section
+{@NumberOf colour}. The @Code "colour" option's name may also be
+spelt @Code {"color"}.
+@PP
+It is also possible to paint the area between the data points and
+the x axis (or frame if @Code "style" is not {@Code "axes"}), using
+@ID @OneRow @Code {
+"@Data"
+" paint { yes }"
+}
+The paint colour is determined by the @Code "colour" option just
+introduced; it will be @Code "black" if no colour is specified. Paint
+(including white paint) hides paint, points, and lines drawn by previous
+data sets. However the points and lines of each data set are drawn after
+painting that set, so they cannot be hidden under their own paint; and
+axes and frames are drawn last so that they too are never hidden.
+@PP
+A @Code "dataformat" option is provided for changing the interpretation
+dataformat. @Index { @Code "dataformat" option in graphs }
+of the data. Ordinarily, as we know, the numbers are taken to be pairs of
+x and y coordinates, like this:
+@ID @OneRow @Code {
+"@Data"
+"{"
+" x y x y ... x y"
+"}"
+}
+However, by setting @Code "dataformat" to {@Code "yonly"}, the
+interpretation is changed to a sequence of y coordinates only:
+@ID @OneRow @Code {
+"@Data"
+" dataformat { yonly }"
+"{"
+" y y ... y"
+"}"
+}
+and x values 1, 2, and so on are inserted automatically, just as though
+the original input had been
+@ID @OneRow @Code {
+"@Data"
+"{"
+" 1 y 2 y ..."
+"}"
+}
+There is also {@Code "xonly"}, which inserts y values 1, 2, and so on. The
+default value, {@Code "xandy"}, gives the usual interpretation. The
+layout of data on lines has no effect on the interpretation.
+@End @Section
diff --git a/doc/user/gra_erro b/doc/user/gra_erro
new file mode 100644
index 0000000..3c123a3
--- /dev/null
+++ b/doc/user/gra_erro
@@ -0,0 +1,40 @@
+@Section
+ @Title { Errors }
+ @Tag { grerrors }
+@Begin
+@PP
+Lout normally produces output that will print without mishap on
+any PostScript device. However, some of the options of @Code "@Graph"
+and all of the data and labels are passed through Lout without
+checking. Any errors in this material will not be detected
+until the file is printed.
+@PP
+The most likely errors are @I { rangecheck errors}, for example if
+an attempt is made to divide by zero or take the square root of a
+negative number, and @I { undefined errors }, arising from symbols
+misspelt, use of @Code "x" outside an {@Code "xloop"}, etc. Less commonly,
+everything may be correct but the graph is too large in some
+way: too much data, expression too deeply nested, and so on.
+@PP
+When an error is detected, @Code "@Graph" arranges for the offending page
+to be printed up to the point where the error occurred, with a message
+nearby describing the error. Printing of the document is then
+aborted. The problem is usually easy to locate since it lies in whatever
+should have been printed next.
+@PP
+If you see @Code VMerror in an error message, it means that the printer
+has run out of memory. All the data is stored in the printer while the
+graph is being printed, and it remains there until the end of the current
+page, when it is discarded and all memory consumed by the graph is
+reclaimed. If you do run out of memory, one option is to try
+@ID @Code {
+"@Graph"
+" save { yes }"
+"..."
+}
+This causes the memory used by the graph to be reclaimed as soon as
+the graph is printed, which might well solve your problem if you have
+several graphs on one page. However, if the graph is nested
+inside some other major Lout package, notably {@Code "@Diag"}, this
+option could cause PostScript errors in that package.
+@End @Section
diff --git a/doc/user/gra_func b/doc/user/gra_func
new file mode 100644
index 0000000..d30e82c
--- /dev/null
+++ b/doc/user/gra_func
@@ -0,0 +1,179 @@
+@Section
+ @Title { Mathematical functions, loops, and tests }
+ @Tag { functions }
+@Begin
+@PP
+@Code "@Graph" offers quite a large selection of mathematical functions,
+mathematical.functions @Index { mathematical functions in graphs }
+available everywhere that x and y coordinates are required: within
+the @Code xticks and @Code yticks options, within the points within
+the @Code "objects" option, and within the right parameter of the
+@Code "@Data" symbol. For example,
+@ID @OneRow @Code {
+"@Data"
+" pairs { solid }"
+"{"
+" 0 0 pi sin { pi/2 }"
+"}"
+}
+draws a solid line from @Eq {(0, 0)} to @Eq {(pi, sin(pi "/" 2))}. Section
+{@NumberOf grsummary} lists all the functions; they include the four
+arithmetical operators @Eq { non + }, @Eq { non - }, @Eq { non * }, and
+@Eq { "/" }, as well as {@Code "sin"}, {@Code "cos"}, {@Code "sqrt"}, and
+many others. Braces are used for grouping, never parentheses.
+@PP
+For plotting functions there are three looping symbols, {@Code "xloop"},
+{@Code "yloop"}, and {@Code "zloop"}. For example, the following plots
+the two functions @Eq { y = 2 } and @Eq { y = sqrt { pi x "/" 4 } + 1 }
+for @Eq { x } from 10 to 500:
+@ID @OneRow @Code {
+"-2p @Font @Graph"
+" style { axes }"
+" xorigin { 0 }"
+" yorigin { 0 }"
+" width { 8 cm }"
+" xticks { 10@ 50@ 100@ 200@ 500@ }"
+" objects { @NE at { 300 2 } @I { Exponential }"
+" @SE at { 300 sqrt { pi*300/4 } + 1 } @I { Uniform } }"
+" belowcaption { @I n }"
+" belowgap { 0 cm }"
+" leftcaption { Right shell nodes }"
+"{"
+" @Data points { filledcircle }"
+" { 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 }"
+""
+" @Data points { filledcircle }"
+" { 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 }"
+""
+" @Data pairs { dashed }"
+" { 10 2 500 2 }"
+""
+" @Data pairs { dashed }"
+" {"
+" xloop from { 10 } to { 500 } by { 20 } do"
+" {"
+" x sqrt { pi*x / 4 } + 1"
+" }"
+" }"
+"}"
+}
+The @Code "do" option of @Code xloop is replicated repeatedly with each
+occurrence of @Code x replaced by 10, 30, 50, ... up to 490. The
+result is
+@FootNote { Source: Jeffrey H. Kingston, Analysis of tree algorithms
+for the simulation event list. @I { Acta Informatica } {@B 22},
+pp. 15--33 (1985). }
+@CD -2p @Font @Graph
+ style { axes }
+ xorigin { 0 }
+ yorigin { 0 }
+ width { 8 cm }
+ xticks { 10@ 50@ 100@ 200@ 500@ }
+ objects {
+ @NE at { 300 2 } @I { Exponential }
+ @SE at { 300 sqrt { pi*300/4 } + 1 } @I { Uniform }
+ }
+ belowcaption { @I n }
+ belowgap { 0 cm }
+ leftcaption { Right shell nodes }
+{
+ @Data points { filledcircle }
+ { 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 }
+
+ @Data points { filledcircle }
+ { 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 }
+
+ @Data pairs { dashed }
+ { 10 2 500 2 }
+
+ @Data pairs { dashed }
+ {
+ xloop from { 10 } to { 500 } by { 20 } do
+ {
+ x sqrt { pi*x / 4 } + 1
+ }
+ }
+}
+The points are connected by straight line segments as usual, but a
+smallish @Code "by" option of about one-twentieth of the range creates
+the illusion of a smooth curve quite well.
+@PP
+There is also an @Code "if" symbol which produces alternative results,
+depending on whether a condition evaluates to @Code "true" or
+{@Code"false"}:
+@ID @OneRow @Code {
+"xloop from { -5 } to { +5 } by { 0.2 } do"
+"{"
+" if cond { abs { x } > 0.1 } then { x 1/x } else {}"
+"}"
+}
+This plots the function @Eq { y = 1 "/" x }, skipping points near
+zero. Actually the @Code "else" part could be omitted since its default
+value is empty.
+@PP
+Adventurous users might enjoy nesting a @Code "yloop" or @Code "zloop"
+within an {@Code "xloop"}, or using loops to generate ticks, like this:
+@ID @OneRow @Code {
+"xticks {"
+" xloop from { 0 } to { 20 } do"
+" {"
+" x if cond { x mod 5 = 0 } then { @ }"
+" }"
+"}"
+}
+The missing @Code "by" option defaults to 1, so this produces x ticks at
+0, 1, 2, ..., 20, with labels at 0, 5, 10, 15, and 20. It is quite all
+right to mix @Code "@" and even labels in with numbers, as long as the
+final result obeys the rules of Section {@NumberOf ticks}.
+@PP
+You can define your own functions using Lout definitions, placed in your
+@Code "mydefs" file as explained in Section {@NumberOf definitions}. Here
+is an example of a function definition:
+@ID @OneRow @Code {
+"import @Graph @Data"
+"def @Tan"
+" precedence 40"
+" right x"
+"{"
+" sin x / cos x"
+"}"
+}
+This defines a function called @Code "@Tan" which implements the
+trigonometric tangent function. It may then be used in expressions
+just like any other function:
+@ID @OneRow @Code {
+"@Data {"
+" yloop from { 0 } to { 0.95 } by { 0.05 } do"
+" {"
+" y @Tan { y / pi }"
+" }"
+"}"
+}
+Following is a detailed explanation.
+@PP
+The first line, {@Code "import @Graph @Data"}, is the import clause. Its
+function is to grant the definition access to the three previously defined
+functions (symbols) that it uses, namely {@Code "sin"}, {@Code "cos"},
+and {@Code "/"}. These are found within the @Code "@Data" symbol within
+{@Code "@Graph"}.
+@PP
+After the import clause comes the @Code "def" keyword, meaning
+`define,' and then the name of the symbol being defined, in this case
+@Code "@Tan". We have chosen @Code "@Tan" rather than @Code "tan"
+because symbols defined by the user in this way are visible throughout
+the document, and we do not want the literal word @Code "tan" to be
+taken as a symbol.
+@PP
+Next comes the symbol's precedence, in this case the same as @Code "sin" and
+@Code "cos" (see Section {@NumberOf dia_summ} for the precedence of
+each symbol). Next is a list of the formal parameters, in this case
+just one, called {@Code "x"}, that is to be passed on the right.
+@PP
+Finally comes the body of the definition enclosed in braces. When
+@Code "@Tan" is invoked, its value will be this body with each occurrence
+of the formal parameter @Code "x" replaced by the object following the
+@Code "@Tan" symbol. For example, the @Code "do" option of the @Code
+"yloop" above becomes
+@ID @Code "y sin { y / pi } / cos { y / pi }"
+as you would expect.
+@End @Section
diff --git a/doc/user/gra_intr b/doc/user/gra_intr
new file mode 100644
index 0000000..28dfd1b
--- /dev/null
+++ b/doc/user/gra_intr
@@ -0,0 +1,51 @@
+@Section
+ @Title { Introduction }
+ @Tag { grintro }
+@Begin
+@PP
+The Lout definitions for graph formatting are kept in a file called
+{@Code "graph"}, which you must include at the start of your document if
+graph.file @Index { @Code "graph" file }
+you want graphs, like this:
+@ID @OneRow @Code {
+"@SysInclude { graph }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+Setup files for specialized packages, such as {@Code "graph"}, should be
+included before the main setup file. Once this is done, the @Code "@Graph"
+symbol used below will then be available for use anywhere within your document.
+@PP
+@Code "@Graph" distinguishes between the overall graph, produced by the
+@Code "@Graph" symbol itself, and the data sets to be placed within it,
+each of which is enclosed by a @Code "@Data" symbol:
+@ID @OneRow @Code {
+"@CentredDisplay @Graph"
+"{"
+" @Data points { plus }"
+" { 1 1.10 2 1.21 3 1.33 4 1.46 5 1.61 6 1.77 7 1.95 8 2.14 }"
+""
+" @Data points { circle }"
+" { 1 1.20 2 1.44 3 1.73 4 2.07 5 2.45 6 2.99 7 3.58 8 4.30 }"
+"}"
+}
+Although it is good practice to lay the input data out neatly, layout
+has no effect on the result. It is not necessary to have one data point
+per line, for example. The result of this example is
+@CentredDisplay @Graph
+{
+ @Data
+ points { plus }
+ { 1 1.10 2 1.21 3 1.33 4 1.46 5 1.61 6 1.77 7 1.95 8 2.14 }
+
+ @Data
+ points { circle }
+ { 1 1.20 2 1.44 3 1.73 4 2.07 5 2.45 6 2.99 7 3.58 8 4.30 }
+}
+We have used the @Code "@CentredDisplay" symbol from Section
+{@NumberOf displays} to produce a centred display, but the
+@Code "@Graph" symbol produces an object which may appear anywhere
+at all -- in a figure, for example, or as an entry in a table.
+@End @Section
diff --git a/doc/user/gra_keys b/doc/user/gra_keys
new file mode 100644
index 0000000..089139a
--- /dev/null
+++ b/doc/user/gra_keys
@@ -0,0 +1,104 @@
+@Section
+ @Title { Adding a key to the graph }
+ @Tag { key }
+@Begin
+@PP
+A @I key to a graph is an explanation of what each data set
+key. @Index { key in graph }
+represents. To assist you in constructing a key, some extra symbols
+are provided in addition to {@Code "@Graph"}:
+graph.cross @Index @Code "@GraphCross"
+graph.plus @Index @Code "@GraphPlus"
+graph.square @Index @Code "@GraphSquare"
+graph.filled.square @Index @Code "@GraphFilledSquare"
+graph.diamond @Index @Code "@GraphDiamond"
+graph.filled.diamond @Index @Code "@GraphFilledDiamond"
+graph.circle @Index @Code "@GraphCircle"
+graph.filled.circle @Index @Code "@GraphFilledCircle"
+graph.triangle @Index @Code "@GraphTriangle"
+graph.filled.triangle @Index @Code "@GraphFilledTriangle"
+graph.noline @Index @Code "@GraphNoLine"
+graph.solid @Index @Code "@GraphSolid"
+graph.dashed @Index @Code "@GraphDashed"
+graph.dotted @Index @Code "@GraphDotted"
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col B ! @Col @Code C ! @Col D }
+{
+@Rowa
+ A { "@GraphCross" }
+ B { @GraphCross }
+ C { "@GraphPlus" }
+ D { @GraphPlus }
+@Rowa
+ A { "@GraphSquare" }
+ B { @GraphSquare }
+ C { "@GraphFilledSquare" }
+ D { @GraphFilledSquare }
+@Rowa
+ A { "@GraphDiamond" }
+ B { @GraphDiamond }
+ C { "@GraphFilledDiamond" }
+ D { @GraphFilledDiamond }
+@Rowa
+ A { "@GraphCircle" }
+ B { @GraphCircle }
+ C { "@GraphFilledCircle" }
+ D { @GraphFilledCircle }
+@Rowa
+ A { "@GraphTriangle" }
+ B { @GraphTriangle }
+ C { "@GraphFilledTriangle" }
+ D { @GraphFilledTriangle }
+@Rowa
+@Rowa
+ A { "@GraphNoLine" }
+ B { @GraphNoLine }
+@Rowa
+ A { "@GraphSolid" }
+ B { @GraphSolid }
+@Rowa
+ A { "@GraphDashed" }
+ B { @GraphDashed }
+@Rowa
+ A { "@GraphDotted" }
+ B { @GraphDotted }
+}
+These extra symbols may be used anywhere in your document except within
+the right parameter of {@Code "@Graph"}; they are commonly used within
+the caption options of {@Code "@Graph"}:
+@ID @OneRow @Code {
+"@Graph"
+" rightcaption {"
+"@GraphPlus @GraphSolid @GraphPlus Boston"
+"@GraphPlus @GraphDashed @GraphPlus New York"
+"@GraphPlus @GraphDotted @GraphPlus Philadelphia"
+"}"
+}
+Recall that unlike the other captions, @Code rightcaption is set using
+the @Code "lines @Break" style rather than {@Code "clines @Break"}
+(Section {@NumberOf captions}). Adding this caption to the graph
+from Section {@NumberOf data}, the complete result is
+@CD @Graph
+ rightcaption {
+@GraphPlus @GraphSolid @GraphPlus Boston
+@GraphPlus @GraphDashed @GraphPlus New York
+@GraphPlus @GraphDotted @GraphPlus Philadelphia
+}
+{
+ @Data points { plus } pairs { solid }
+ { 1720 12000 1730 13000 1740 15601 1760 15631 1770 15877 }
+
+ @Data points { plus } pairs { dashed }
+ { 1720 7000 1730 8622 1740 10451 1750 14255 1760 18000 1770 22667 }
+
+ @Data points { plus } pairs { dotted }
+ { 1720 10000 1730 11500 1740 12654 1750 18202 1760 23750 1770 34583 }
+
+}
+The first eight symbols have a @Code "symbolsize" option with the
+usual meaning and the usual default value ({@Code "0.15 ft"}). The
+last four symbols have @Code "dashlength" and @Code "linewidth" options
+with the usual default values, {@Code "0.2 ft"} and {@Code "0.5 pt"}
+respectively, and a @Code "length" option, which determines the length
+of the line drawn by each symbol; its default value is {@Code "1.0 ft"}.
+@End @Section
diff --git a/doc/user/gra_over b/doc/user/gra_over
new file mode 100644
index 0000000..1b9653a
--- /dev/null
+++ b/doc/user/gra_over
@@ -0,0 +1,179 @@
+@Section
+ @Title { Changing the overall appearance of the graph }
+ @Tag { overall }
+@Begin
+@PP
+The overall appearance of the graph is controlled by options to the
+@Code "@Graph" symbol. As usual, these options follow the @Code "@Graph"
+symbol, with their values enclosed in braces; they may appear in any order,
+and if omitted are assigned some sensible default value.
+@PP
+There is a @Code "style" option for controlling the overall style of the
+style.graph @Index { @Code "style" option of @Code "@Graph" }
+axes. @Index { axes in graphs }
+graph, whose value may be either {@Code "frame"}, {@Code "none"},
+or {@Code "axes"}. The default value is {@Code "frame"}, and it produces
+a frame around the graph with ticks and labels along its left and bottom
+edges, as in previous examples. The {@Code "none"} style prints
+nothing (no frame, no ticks, no labels), which is useful for producing
+graphs that don't look like graphs, as it were.
+@PP
+If the other value, {@Code "axes"}, is chosen, two other options called
+{@Code xorigin} and {@Code yorigin} become compulsory:
+@ID @OneRow @Code {
+"-2p @Font @Graph"
+" style { axes }"
+" xorigin { 0 }"
+" yorigin { 0 }"
+" width { 12 cm }"
+" height { 7 cm }"
+" leftcaption { 90d @Rotate { counts (%) } }"
+" leftgap { 1.0 cm }"
+" belowcaption { time (min) }"
+" belowgap { 0 cm }"
+"{"
+" @Data"
+" points { filledsquare }"
+" pairs { solid }"
+" { 0 0.0 1 4.8 2 7.0 3 15.2 4 19.8 5 20.0 6 21.0 7 25.0"
+" 10 29.5 15 31.2 20 35.0 30 40.0 60 50.8"
+" }"
+""
+" @Data"
+" points { square }"
+" pairs { solid }"
+" {"
+" 0 0.0 1 3.7 1.5 43.1 2 99.1 3 85.6 4 69.1 5 47.0 6 44.1 7 40.8"
+" 10 35.0 15 29.4 20 25.0 30 21.1 60 15.5"
+" }"
+"}"
+}
+We have requested a smaller font size for this graph as a whole by
+preceding it with {@Code "-2p @Font"}, meaning two points smaller, and
+we have used some other options which will be explained shortly. The
+resulting graph has an x axis and a y axis instead of a frame, like this:
+@CD -2p @Font @Graph
+ style { axes }
+ xorigin { 0 }
+ yorigin { 0 }
+ width { 12 cm }
+ height { 7 cm }
+ leftcaption { 90d @Rotate { counts (%) } }
+ leftgap { 1.0 cm }
+ belowcaption { time (min) }
+ belowgap { 0 cm }
+{
+ @Data
+ points { filledsquare }
+ pairs { solid }
+ { 0 0.0 1 9.5 2 15.0 3 18.2 4 20.1 5 22.1 7 25.0
+ 10 28.3 15 31.2 20 35.0 30 40.0 60 50.8
+ }
+
+ @Data
+ points { square }
+ pairs { solid }
+ {
+ 0 0.0 1 3.7 1.5 43.1 2 99.1 3 85.6 4 69.1 5 47.0 6 44.1 7 40.8
+ 10 35.0 15 29.4 20 25.0 30 21.1 60 15.5
+ }
+}
+The point where the axes cross is ({@Code xorigin}, {@Code yorigin}).
+@PP
+Although @Code "@Graph" does not provide explicit support for
+multiple axes, you can simulate them by overstriking two
+separate graphs of equal size. There is an @Code "@OverStrike"
+overstrike. @Index @Code "@OverStrike"
+symbol which overstrikes two objects, so
+@ID @Code "@Graph { ... } @OverStrike @Graph { ... }"
+will do the job. Typically one of the graphs would have y ticks,
+and the other would have r ticks (adjacent to the right-hand side of the
+frame).
+@PP
+There are @Code "xlog" and @Code "ylog" options which produce
+logarithmic.axes @Index { logarithmic axes in graphs }
+logarithmic x and y axes:
+@ID @OneRow @Code {
+"@Graph"
+" xlog { 10 }"
+" ylog { 10 }"
+"{"
+" ..."
+"}"
+}
+The value is the base of the logarithm, usually 10 or 2, or
+{@Code none} (the default) meaning not logarithmic. Logarithms
+to different bases differ only by a constant factor, so the main effect
+of different bases is on the choice of ticks and labels. An @Code "xlog"
+option will be ignored if there are any negative or zero x data points,
+x ticks, or {@Code "xorigin"} or {@Code "xmin"} options; and similarly
+for {@Code "ylog"}.
+@PP
+There are @Code "width" and @Code "height" options for setting the size
+of the total area enclosed:
+@ID @OneRow @Code {
+"@Graph"
+" width { 6.0 cm }"
+" height { 4.0 cm }"
+"{"
+" ..."
+"}"
+}
+This shows the default width and height, six centimetres and four
+centimetres. These lengths and others discussed below can be specified
+using a variety of units of measurement (see Section {@NumberOf grsummary}
+for the details).
+@PP
+Within the frame or axes, a small margin is kept free of data points. The
+size of this margin is controlled by @Code "xextra" and @Code "yextra"
+options:
+@ID @OneRow @Code {
+"@Graph"
+" xextra { 0.5 cm }"
+" yextra { 0.5 cm }"
+"{"
+" ..."
+"}"
+}
+Setting @Code "xextra" to @Code "0.5 cm" (the default value if the
+@Code style option is {@Code frame}) means that the smallest x value
+will be placed 0.5 centimetres to the right of the left boundary, and
+the largest will be placed 0.5 centimetres to the left of the right
+boundary. It is quite safe to set @Code "xextra" to @Code "0 cm" if
+desired, and indeed this is the default value when @Code style is
+{@Code axes} or {@Code none}. The @Code "yextra" option works in
+exactly the same way for y values.
+@PP
+The @Code "xdecreasing" option plots the x values in decreasing order
+instead of increasing:
+@ID @Code {
+"@Graph"
+" xdecreasing { yes }"
+" abovecaption { New South Wales road deaths, 1960--1990"
+"(fatalities per 100 million vehicle km) }"
+"{"
+" @Data"
+" points { plus }"
+" pairs { dashed }"
+" {"
+" 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0"
+" }"
+"}"
+}
+produces
+@CD @Graph
+ xdecreasing { yes }
+ abovecaption { New South Wales road deaths, 1960--1990
+(fatalities per 100 million vehicle km) }
+{
+ @Data
+ points { plus }
+ pairs { dashed }
+ {
+ 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0
+ }
+}
+The value of @Code "xdecreasing" should be either @Code "no" (the default
+value) or {@Code "yes"}. A similar @Code "ydecreasing" option does the same
+thing to the y axis.
+@End @Section
diff --git a/doc/user/gra_plac b/doc/user/gra_plac
new file mode 100644
index 0000000..7084eb2
--- /dev/null
+++ b/doc/user/gra_plac
@@ -0,0 +1,51 @@
+@Section
+ @Title { Placing arbitrary objects on the graph }
+ @Tag { arbobj }
+@Begin
+@PP
+As we have just seen, the repertoire of symbols that @Code "@Data" is
+able to place on the graph is quite limited. However, there is a way
+to place any number of arbitrary Lout objects anywhere on the graph,
+using the @Code objects option to the @Code "@Graph" symbol:
+@ID @OneRow @Code {
+"@Graph"
+" objects {"
+" @CTR at {2.5 6.0} @Eq { y = x sup 2 }"
+" @CTR at {4.5 7.0} @Eq { y = x sup 3 }"
+" }"
+}
+where we have used the @Code "@Eq" symbol from Chapter {@NumberOf equations}
+twice to place two equations onto the graph at the points {@Code "2.5 6.0"}
+and {@Code "4.5 7.0"} respectively. An example result appears in the next
+section.
+@PP
+In addition to {@Code "@CTR"}, there are eight other symbols which may
+be used within the @Code "objects" option in the same way: {@Code "@NW"},
+{@Code "@SW"}, {@Code "@SE"}, {@Code "@NE"}, {@Code "@N"}, {@Code "@W"},
+{@Code "@S"}, and {@Code "@E"}. These place the object just to the
+northwest of the point, to the southwest, and so on instead of centring
+it over the point. By `to the northwest' we mean that the object's bottom
+right corner coincides with the point, and similarly for the other symbols.
+@PP
+Each of these symbols has a @Code "margin" option which enlarges the
+object by adding a margin around it before placing it:
+@ID @Code "@NW at {2.5 6.0} margin { 0.3 ft } @Eq { y = x sup 2 }"
+shows the default value, 0.3 times the current font size. As the margin
+is increased, the object moves further away from the point.
+@PP
+The major advantage of the @Code "objects" option over the @Code "@Data"
+symbol is that arbitrary Lout objects may be used. The @Code "@Data"
+symbol however is able to place many copies of its symbols onto the graph,
+and also allow for them when connecting points together with lines. Also,
+the points within the @Code "objects" option are not taken into account
+when deciding on the permissible range of x and y values, whereas the
+points within the @Code "@Data" symbol are. Altogether it seems best
+to use the @Code "@Data" symbol for the bulk of the data points, and to
+use the @Code "objects" option for adding a small number of labels or
+other decorations.
+@PP
+The @Code "objects" option may contain @Code "@Graph" symbols, but in
+that case, owing to a deficiency in the implementation, those symbols
+will need to have their @Code save options (Section {@NumberOf grerrors})
+set to {@Code yes}.
+@End @Section
diff --git a/doc/user/gra_summ b/doc/user/gra_summ
new file mode 100644
index 0000000..ea074b9
--- /dev/null
+++ b/doc/user/gra_summ
@@ -0,0 +1,466 @@
+@Section
+ @Title { Summary }
+ @Tag { grsummary }
+@Begin
+@PP
+The options to the @Code "@Graph" symbol, their default values, and
+their possible values are:
+@ID -2.1px @Break -1p @Font @Tab
+ hmargin { 0.15c }
+ @Fmta { @Col @Code { " "A } ! @Col @Code "{" ! @Col @Code B !
+ @Col @Code "}" ! @Col ! @Col ! @Col C }
+ @Fmtb { @Col @Code A ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col }
+{
+@Rowb
+ A { "@Graph" }
+@Rowa
+ A { style }
+ B { frame }
+ C { {@Code frame}, {@Code axes}, or {@Code none} }
+@Rowa
+ A { width }
+ B { 6.0 cm }
+ C { any @I distance }
+@Rowa
+ A { height }
+ B { 4.0 cm }
+ C { any @I distance }
+@Rowa
+ A { xextra }
+ B { 0.5 cm }
+ C { any @I distance ({@Code axes} and {@Code none} default is {@Code "0 cm"}) }
+@Rowa
+ A { yextra }
+ B { 0.5 cm }
+ C { any @I distance ({@Code axes} and {@Code none} default is {@Code "0 cm"}) }
+@Rowa
+ A { xdecreasing }
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { ydecreasing }
+ B { no }
+ C { @Code yes or @Code no }
+@Rowa
+ A { leftcaption }
+ B { }
+ C { any Lout object }
+@Rowa
+ A { rightcaption }
+ B { }
+ C { any Lout object }
+@Rowa
+ A { abovecaption }
+ B { }
+ C { any Lout object }
+@Rowa
+ A { belowcaption }
+ B { }
+ C { any Lout object }
+@Rowa
+ A { leftgap }
+ B { 1.5 cm }
+ C { any @I distance }
+@Rowa
+ A { rightgap }
+ B { 0.5 cm }
+ C { any @I distance }
+@Rowa
+ A { abovegap }
+ B { 0.5 cm }
+ C { any @I distance }
+@Rowa
+ A { belowgap }
+ B { 0.5 cm }
+ C { any @I distance }
+@Rowa
+ A { hidecaptions }
+ B { yes }
+ C { @Code yes or @Code no }
+@Rowa
+ A { xorigin }
+ B { none }
+ C { {@Code none} or any @I number }
+@Rowa
+ A { yorigin }
+ B { none }
+ C { {@Code none} or any @I number }
+@Rowa
+ A { xlog }
+ B { none }
+ C { {@Code none} or any @I number greater than 1 }
+@Rowa
+ A { ylog }
+ B { none }
+ C { {@Code none} or any @I number greater than 1 }
+@Rowa
+ A { xmin }
+ B { none }
+ C { @Code none or any {@I number} }
+@Rowa
+ A { xmax }
+ B { none }
+ C { @Code none or any {@I number} }
+@Rowa
+ A { ymin }
+ B { none }
+ C { @Code none or any {@I number} }
+@Rowa
+ A { ymax }
+ B { none }
+ C { @Code none or any {@I number} }
+@Rowa
+ A { xticksep }
+ B { none }
+ C { {@Code none} or any @I number greater than 0 }
+@Rowa
+ A { yticksep }
+ B { none }
+ C { {@Code none} or any @I number greater than 0 }
+@Rowa
+ A { rticksep }
+ B { none }
+ C { {@Code none} or any @I number greater than 0 }
+@Rowa
+ A { xticks }
+ B { auto }
+ C { @I sequence (of numbers and strings), or @Code auto meaning
+automatic }
+@Rowa
+ A { yticks }
+ B { auto }
+ C { @I sequence (of numbers and strings), or @Code auto meaning
+automatic }
+@Rowa
+ A { rticks }
+ B { }
+ C { @I sequence (of numbers and strings), or @Code auto meaning
+automatic }
+@Rowa
+ A { xticklength }
+ B { 0.5 ft }
+ C { any @I distance }
+@Rowa
+ A { yticklength }
+ B { 0.5 ft }
+ C { any @I distance }
+@Rowa
+ A { rticklength }
+ B { 0.5 ft }
+ C { any @I distance }
+@Rowa
+ A { objects }
+ B { }
+ C { sequence of {@Code "@CTR"}, {@Code "@NW"}, {@Code "@SW"}, {@Code "@SE"},
+{@Code "@NE"}, {@Code "@N"}, {@Code "@W"}, {@Code "@S"}, {@Code "@E"} symbols }
+@Rowa
+ A { points }
+ B { none }
+ C { {@Code none}, {@Code plus}, {@Code cross}, {@Code square},
+{@Code filledsquare}, {@Code diamond}, {@Code filleddiamond},
+{@Code circle}, {@Code filledcircle}, {@Code triangle}, {@Code filledtriangle} }
+@Rowa
+ A { pairs }
+ B { none }
+ C { {@Code none}, {@Code solid}, {@Code dashed}, {@Code dotted},
+{@Code yhisto}, {@Code xhisto}, {@Code filledyhisto}, {@Code filledxhisto},
+{@Code surfaceyhisto}, {@Code surfacexhisto} }
+@Rowa
+ A { "colour/color" }
+ B { none }
+ C { {@Code none} or any colour name from Section {@NumberOf colour}}
+@Rowa
+ A { paint }
+ B { no }
+ C { {@Code no} or {@Code yes} }
+@Rowa
+ A { dataformat }
+ B { xandy }
+ C { {@Code xandy}, {@Code yonly}, {@Code xonly} }
+@Rowa
+ A { dashlength }
+ B { 0.2 ft }
+ C { any @I distance }
+@Rowa
+ A { linewidth }
+ B { 0.5 pt }
+ C { any @I distance }
+@Rowa
+ A { symbolsize }
+ B { 0.15 ft }
+ C { any @I distance }
+}
+@I Number means an ordinary decimal number; @I distance means a number
+followed by at least one space followed by any one of the following
+units of measurement:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { cm }
+ B { centimetres }
+@Rowa
+ A { in }
+ B { inches }
+@Rowa
+ A { em }
+ B { Ems (12 ems = 1 inch) }
+@Rowa
+ A { pt }
+ B { Points (72 points = 1 inch) }
+@Rowa
+ A { ft }
+ B { @Code "1 ft" is the size of the current font }
+@Rowa
+ A { sp }
+ B { @Code "1 sp" is the width of the space character in the current font }
+@Rowa
+ A { vs }
+ B { @Code "1 vs" is the current inter-line spacing }
+}
+In general, numbers denote x or y values while distances denote lengths
+on the printed result.
+@PP
+The minimum plottable x value is the minimum of all the x data,
+{@Code xticks}, {@Code xorigin}, {@Code xmin}, and {@Code xmax} whenever
+these are not {@Code none}. If @Code xticks is {@Code none}, this
+minimum may be reduced further to a `round' number. The maximum plottable
+x value is the maximum of the same values, and it may be increased further
+if {@Code xticks} is {@Code none}. Similar remarks apply to y values.
+@PP
+The value of the @Code "objects" option is a sequence of zero or more of
+the following:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col { @Code "at {" @I expression @I expression
+@Code "}" } ! @Col @I object }
+{
+@Rowa A { @Code "@CTR" }
+@Rowa A { @Code "@NW" }
+@Rowa A { @Code "@SW" }
+@Rowa A { @Code "@SE" }
+@Rowa A { @Code "@NE" }
+@Rowa A { @Code "@N" }
+@Rowa A { @Code "@W" }
+@Rowa A { @Code "@S" }
+@Rowa A { @Code "@E" }
+}
+where @I object is an arbitrary Lout object. Each of these nine symbols
+also has a @Code "margin" option whose value may be any non-negative
+distance, with default value {@Code "0.3 ft"}.
+@PP
+The options to the @Code "@Data" symbol, their default values, and
+their possible values are:
+@ID 0.85vx @Break @Tab
+ hmargin { 0.15c }
+ @Fmta { @Col @Code { " "A } ! @Col @Code "{" ! @Col @I inherited !
+ @Col @Code "}" ! @Col ! @Col ! @Col C }
+ @Fmtb { @Col A ! @Col ! @Col ! @Col ! @Col ! @Col ! @Col }
+{
+@Rowb
+ A { @Code "@Data" }
+@Rowa
+ A { points }
+ C { {@Code none}, {@Code plus}, {@Code cross}, {@Code square},
+{@Code filledsquare}, {@Code diamond}, {@Code filleddiamond},
+{@Code circle}, {@Code filledcircle},
+{@Code triangle}, {@Code filledtriangle} }
+@Rowa
+ A { pairs }
+ C { {@Code none}, {@Code solid}, {@Code dashed}, {@Code dotted},
+{@Code yhisto}, {@Code xhisto}, {@Code filledyhisto}, {@Code filledxhisto},
+{@Code surfaceyhisto}, {@Code surfacexhisto} }
+@Rowa
+ A { "colour/color" }
+ C { {@Code none}, or any colour name from Section {@NumberOf colour} }
+@Rowa
+ A { paint }
+ C { {@Code no} or {@Code yes} }
+@Rowa
+ A { dataformat }
+ C { {@Code xandy}, {@Code yonly}, {@Code xonly} }
+@Rowa
+ A { dashlength }
+ C { any @I distance }
+@Rowa
+ A { linewidth }
+ C { any @I distance }
+@Rowa
+ A { symbolsize }
+ C { any @I distance }
+@Rowb
+ A { @Code "{" @I sequence @Code "}" }
+ C { any @I sequence }
+}
+@I Inherited means that the default value is taken from the
+@Code "@Graph" option with the same name.
+@PP
+The right parameter of @Code "@Data" contains a @I sequence of zero
+or more {@I expressions}. The {@Code xticks}, {@Code yticks}, and
+{@Code rticks} options also are sequences, which may contain @Code "@"
+and labels as well as expressions. An @I expression is any of the
+following (operators are shown in decreasing precedence order, with
+the precedence, if relevant, at right):
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col ! @Col B }
+{
+@Rowa
+ A { @I number }
+@Rowa
+ A { @Code x (within @Code xloop only) }
+@Rowa
+ A { @Code y (within @Code yloop only) }
+@Rowa
+ A { @Code z (within @Code zloop only) }
+@Rowa
+ A { @Code pi }
+@Rowa
+ A { @Code e }
+@Rowa
+ A { @Code "{" @I expression @Code "}" }
+@Rowa
+ A { @Code "sqrt" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "abs" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "ceiling" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "floor" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "truncate" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "round" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "cos" @I expression }
+ B { 40 }
+@Rowa
+ A { @Code "sin" @I expression }
+ B { 40 }
+@Rowa
+ A { @I expression @Code "atan" @I expression }
+ B { 39 }
+@Rowa
+ A { @I expression @Code "exp" @I expression }
+ B { 38 }
+@Rowa
+ A { @I expression @Code "log" @I expression }
+ B { 37 }
+@Rowa
+ A { @I expression @Code "rand" @I expression }
+ B { 36 }
+@Rowa
+ A { @I expression @Eq { non * } @I expression }
+ B { 35 }
+@Rowa
+ A { @I expression @Code "/" @I expression }
+ B { 34 }
+@Rowa
+ A { @I expression @Code "idiv" @I expression }
+ B { 34 }
+@Rowa
+ A { @I expression @Code "mod" @I expression }
+ B { 34 }
+@Rowa
+ A { @I expression @Eq { non - } @I expression }
+ B { 33 }
+@Rowa
+ A { @Eq { non - } @I expression }
+ B { 33 }
+@Rowa
+ A { @I expression @Code "+" @I expression }
+ B { 32 }
+@Rowa
+ A { @Code "+" @I expression }
+ B { 32 }
+@Rowa
+ A { @Code "if cond {" @I boolean @Code "} then {" @I expression
+@Code "} else {" @I expression @Code "}" }
+}
+A @Eq { non - } immediately followed by a digit or decimal point is
+always taken to be a minus sign, never a subtraction. The left
+parameter of @Code "exp" and @Code "log" is the base of the
+exponentiation and logarithm respectively; @Code "idiv" is integer
+division; and @Code "rand" returns a uniform random integer lying between
+its two parameters (inclusive). Now a @I sequence is zero or more of
+the following:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A }
+{
+@Rowa
+ A { 2c @Wide "@" (within {@Code xticks}, {@Code yticks}, and {@Code rticks} only) }
+@Rowa
+ A { 2c @Wide { ({@I label}) } (within {@Code xticks}, {@Code yticks}, and {@Code rticks} only) }
+@Rowa
+ A { @I expression }
+@Rowa
+ A { @Code "xloop from {" @I expression @Code "} to {" @I expression
+@Code "} by {" @I expression @Code "} do {" @I sequence @Code "}" }
+@Rowa
+ A { @Code "yloop from {" @I expression @Code "} to {" @I expression
+@Code "} by {" @I expression @Code "} do {" @I sequence @Code "}" }
+@Rowa
+ A { @Code "zloop from {" @I expression @Code "} to {" @I expression
+@Code "} by {" @I expression @Code "} do {" @I sequence @Code "}" }
+@Rowa
+ A { @Code "if cond {" @I boolean @Code "} then {" @I sequence
+@Code "} else {" @I sequence @Code "}" }
+}
+The @Code "by" part of the loop symbols is optional with default
+value 1; the @Code "else" part of @Code "if" is optional with
+default value equal to the empty sequence. A @I boolean is any one of
+the following things, again shown in decreasing precedence order, with
+the precedence at right:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col A ! @Col ! @Col B }
+{
+@Rowa
+ A { @Code true }
+@Rowa
+ A { @Code false }
+@Rowa
+ A { @Code "{" @I boolean @Code "}" }
+@Rowa
+ A { @I expression @Code = @I expression }
+ B { 30 }
+@Rowa
+ A { @I expression @Code != @I expression }
+ B { 30 }
+@Rowa
+ A { @I expression @Code < @I expression }
+ B { 30 }
+@Rowa
+ A { @I expression @Code <= @I expression }
+ B { 30 }
+@Rowa
+ A { @I expression @Code > @I expression }
+ B { 30 }
+@Rowa
+ A { @I expression @Code >= @I expression }
+ B { 30 }
+@Rowa
+ A { @Code not @I boolean }
+ B { 25 }
+@Rowa
+ A { @I boolean @Code and @I boolean }
+ B { 24 }
+@Rowa
+ A { @I boolean @Code xor @I boolean }
+ B { 23 }
+@Rowa
+ A { @I boolean @Code or @I boolean }
+ B { 22 }
+@Rowa
+ A { @Code "if cond {" @I boolean @Code "} then {" @I boolean
+@Code "} else {" @I boolean @Code "}" }
+}
+@End @Section
diff --git a/doc/user/gra_tick b/doc/user/gra_tick
new file mode 100644
index 0000000..f6079cf
--- /dev/null
+++ b/doc/user/gra_tick
@@ -0,0 +1,205 @@
+@Section
+ @Title { Ticks and labels }
+ @Tag { ticks }
+@Begin
+@PP
+@I Ticks are the short lines that mark off intervals along the axes, and
+ticks.graph @Index { ticks in graphs }
+labels.graph @Index { labels in graphs }
+@I labels are the numbers appearing near the ticks (not to be confused
+with captions). {@Code "@Graph"} produces ticks and labels automatically
+with some care, so it is probably best not to worry about them unless the
+result is not pleasing, in which case there are options for controlling them.
+@PP
+One simple way to control the production of x ticks is with the
+{@Code xmin}, {@Code xmax}, and {@Code xticksep} options to @Code
+"@Graph". For example,
+@ID @OneRow @Code {
+"@Graph"
+" xmin { 0 }"
+" xmax { 5 }"
+" xticksep { 0.5 }"
+}
+specifies that x values in the range 0 to 5 are to be expected, and that
+a tick and label is to appear every 0.5 units along the x axis. One or
+both of @Code "xmin" and @Code "xmax" may be omitted, in which case
+suitable values will be inferred from the data as usual.
+@PP
+Alternatively, complete control over the appearance of x ticks and labels
+is provided by the @Code "xticks" option. For example,
+xticks.graph @Index { @Code "xticks" option to @Code "@Graph" }
+@ID @OneRow @Code {
+"@Graph"
+" xticks { 0@ 5 10@ 15 20@ }"
+}
+specifies that x ticks are to be drawn at 0, 5, 10, 15, and 20. An
+@Code "@" following a number indicates that a label is to be printed as
+well, so the above example will produce labels at 0, 10, and 20. For
+even finer control, @Code "@" may be replaced by a label enclosed
+in parentheses:
+@ID @OneRow @Code {
+"@Graph"
+" xticks { 1 (Democrat) 2 (Republican) 3 (Other) }"
+}
+As this example shows, a label does not have to be a number; it can be
+any string of characters, including spaces and balanced parentheses;
+but it may not be an arbitrary Lout object.
+@PP
+The character @Code "^" in a label indicates that the
+remainder is to be treated as an exponent:
+@ID @OneRow @Code {
+"@Graph"
+" xlog { 10 }"
+" xticks { 1 (1) 10 (10) 100 (10^2) 1000 (10^3) 10000 (10^4) 100000 (10^5) }"
+"{"
+" @Data points { plus }"
+" { 1 2.1 10 3.4 100 4.9 1000 6.1 10000 7.2 100000 7.6 }"
+"}"
+}
+In fact, the labels inserted automatically when @Code xticks is omitted have
+exponents when the axis is logarithmic, so @Code xticks is hardly necessary
+in this example. Anyway the result is
+@CD @Graph
+ height { 3 cm }
+ xlog { 10 }
+ xticks { 1 (1) 10 (10) 100 (10^2) 1000 (10^3) 10000 (10^4) 100000 (10^5) }
+{
+ @Data points { plus }
+ {
+ 1 2.1 10 3.4 100 4.9 1000 6.1 10000 7.2 100000 7.6
+ }
+}
+Setting @Code "xticks" to empty produces no x ticks (this is not the
+same as omitting {@Code xticks}).
+@PP
+Similar options control ticks and labels on the y axis: {@Code "ymin"},
+{@Code "ymax"}, {@Code "yticksep"}, and {@Code "yticks"}. There are
+yticks.graph @Index { @Code "yticks" option to @Code "@Graph" }
+also @Code "xticklength" and @Code "yticklength" options which set
+the length of ticks:
+@ID @OneRow @Code {
+"@Graph"
+" xticklength { 0.5 ft }"
+" yticklength { 0.5 ft }"
+}
+shows the default values, half the current font size in both cases.
+@PP
+There is also an {@Code "rticks"} option which is similar to
+{@Code "yticks"} except that the ticks it controls appear on the
+right-hand side of the frame (this option is relevant only when
+the @Code style option is {@Code frame}). Unlike @Code "xticks" and
+{@Code "yticks"}, {@Code "rticks"} has empty default value, which is
+why you don't usually see r ticks. They are most useful when overstriking
+two graphs using @Code "@OverStrike" as explained earlier; one graph will
+have y ticks in the usual way, the other will have r ticks and empty
+y ticks:
+@CD {
+
+@Graph
+ style { frame }
+ width { 6c }
+ height { 8c }
+ xextra { 0 cm }
+ yextra { 0 cm }
+ rightcaption { -90d @Rotate { Precipitation mm } }
+ rightgap { 3.0f }
+ hidecaptions { no }
+ xmin { 0 }
+ xmax { 12 }
+ ymin { 0 }
+ ymax { 450 }
+ xticks { }
+ xticklength { 0 cm }
+ rticks { 0@ 50@ 100@ 150@ 200@ 250@ 300@ 350@ 400@ 450@ }
+ yticks {}
+{
+ @Data
+ pairs { filledyhisto }
+ colour { blue }
+ linewidth { 1 pt }
+ {
+ 0 340
+ 1 410
+ 2 430
+ 3 340
+ 4 290
+ 5 175
+ 6 140
+ 7 125
+ 8 110
+ 9 100
+ 10 85
+ 11 175
+ 12 0
+ }
+}
+
+@OverStrike
+
+@Graph
+ style { frame }
+ width { 6c }
+ height { 8c }
+ xextra { 0 cm }
+ yextra { 0 cm }
+ leftcaption { 90d @Rotate { Temperature {@Degree}C } }
+ leftgap { 2.5f }
+ hidecaptions { no }
+ xmin { 0 }
+ xmax { 12 }
+ ymin { -30 }
+ ymax { 50 }
+ xticks {
+ 0.5 (J)
+ 1.5 (F)
+ 2.5 (M)
+ 3.5 (A)
+ 4.5 (M)
+ 5.5 (J)
+ 6.5 (J)
+ 7.5 (A)
+ 8.5 (S)
+ 9.5 (O)
+ 10.5 (N)
+ 11.5 (D)
+ }
+ xticklength { 0 cm }
+ yticks { -30@ -20@ -10@ 0@ 10@ 20@ 30@ 40@ }
+{
+ @Data
+ pairs { solid }
+ colour { red }
+ linewidth { 1 pt }
+ {
+ 0.0 24
+ 1.0 24
+ 2.0 25
+ 3.0 26
+ 4.0 26
+ 5.0 26
+ 6.0 26
+ 7.0 27
+ 8.0 26
+ 9.0 27
+ 10.0 28
+ 11.0 28
+ 12.0 26
+ }
+}
+
+}
+Here the first graph has
+@ID @Code {
+"rticks { 0@ 50@ 100@ 150@ 200@ 250@ 300@ 350@ 400@ 450@ }"
+"yticks {}"
+}
+for its ticks.
+@PP
+Lout has only a hazy idea of how much space is occupied by ticks and
+labels. Unless @Code "xticks" is empty, Lout allows 1.7 times the
+current font size below the graph for x ticks and labels, which is
+usually about right; but it does not allow any space for y and r ticks and
+labels since it has no idea how wide the labels will be. The discussion
+of captions in Section {@NumberOf captions} explains how to use the
+@Code "leftgap" and @Code "rightgap" options to work around this deficiency.
+@End @Section
diff --git a/doc/user/letterbook b/doc/user/letterbook
new file mode 100644
index 0000000..269f073
--- /dev/null
+++ b/doc/user/letterbook
@@ -0,0 +1,356 @@
+###############################################################################
+# #
+# Lout setup file for books #
+# #
+# Jeffrey H. Kingston #
+# 5 February 1999 #
+# #
+###############################################################################
+
+
+###############################################################################
+# #
+# @SysInclude commands for standard packages. #
+# #
+###############################################################################
+
+ @SysInclude { fontdefs } # font definitions
+ @SysInclude { langdefs } # language definitions
+ @SysInclude { bsf } # BasicSetup package
+ @SysInclude { dsf } # DocumentSetup package
+ @SysInclude { bookf } # BookSetup extension
+
+
+###############################################################################
+# #
+# @Include command for reading personal definitions from current directory. #
+# #
+###############################################################################
+
+ @Include { mydefs }
+
+###############################################################################
+# #
+# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. #
+# #
+# To change the default value of any option, delete the # at the start of #
+# its line and change the value between braces. #
+# #
+###############################################################################
+
+@Use { @BasicSetup
+ # @InitialFont { Times Base 12p } # initial font
+ # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+ # @InitialSpace { lout } # initial space style
+ # @InitialLanguage { English } # initial language
+ # @InitialColour { black } # initial colour
+ # @OptimizePages { No } # optimize page breaks?
+ # @HeadingFont { Bold } # font for @Heading
+ # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs
+ # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP
+ # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays
+ # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent
+ # @DefaultIndent { 0.5rt } # @Display indent
+ # @DisplayNumStyle { (num) } # style of display numbers
+ # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent
+ # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent
+ # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items
+ # @ListIndent { 0s } # indent of list items
+ # @ListRightIndent { 0s } # right indent of list items
+ # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags
+ # @NumberSeparator { . } # separates nums like 2.3.7
+}
+
+
+###############################################################################
+# #
+# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. #
+# #
+# To change the default value of any option, delete the # at the start of #
+# its line and change the value between braces. #
+# #
+###############################################################################
+
+@Use { @DocumentSetup
+ @PageType { Letter @OrIfPlain Other} # page type (width, height)
+ # @PageWidth { 80s } # page width if type Other
+ # @PageHeight { 66f } # page height if type Other
+ # @PageOrientation { Portrait } # Portrait, Landscape, etc.
+ # @PageBackground { } # background of each page
+ # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages
+ # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages
+ # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages
+ # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages
+ # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages
+ # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages
+ # @PageBoxType { None } # None Box CurveBox ShadowBox
+ # @PageBoxMargin { 1.00c } # page box margin
+ # @PageBoxLineWidth { } # page box line thickness
+ # @PageBoxPaint { none } # page box paint
+ # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox
+ # @ColumnNumber { 1 } # number of columns (1 to 10)
+ # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap
+ # @FigureLocation { PageTop } # default figure location
+ # @TableLocation { PageTop } # default table location
+ # @FigureFormat { @CC @Body } # default figure format
+ # @TableFormat { @CC @Body } # default table format
+ # @FigureWord { figure } # "Figure" word else anything
+ # @TableWord { table } # "Table" word else anything
+ # @FigureNumbers { Arabic } # method of numbering figures
+ # @TableNumbers { Arabic } # method of numbering tables
+ # @FigureCaptionPos { Below } # Above or Below
+ # @TableCaptionPos { Below } # Above or Below
+ # @CaptionFont { } # figure, table caption font
+ # @CaptionBreak { } # figure, table caption break
+ # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format
+ # @MakeFigureContents { No } # list of figures at start
+ # @MakeTableContents { No } # list of tables at start
+ # @MakeContents { No } # make contents? Yes or No
+ @MakeContents { Yes } # make contents? Yes or No
+ # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry
+ # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry
+ # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry
+ # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry
+ # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry
+ # @ContentsFormat { number @DotSep title } # contents entry format
+ # @ContentsLeader { .. } # leader symbol in contents
+ # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders
+ # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width
+ # @MakeReferences { Yes } # make references? Yes or No
+ # @RefCiteStyle { [cite] } # citation style
+ # @RefCiteLabels { @RefNum } # citation items
+ # @RefNumbers { Arabic } # reference numbers
+ # @RefListFormat { Labels } # NoLabels, Labels, etc.
+ # @RefListLabels { [@RefNum] } # ref list label format
+ # @RefListTitle { references } # title of reference list
+ # @ChapRefListTitle { references } # title of chapter ref list
+ # @RefListIndent { 0s } # indent to left of labels
+ # @RefListRightIndent { 0s } # indent to right of items
+ # @RefListGap { @ListGap } # gap between ref list items
+ # @RefListFont { } # font used in reference list
+ # @RefListBreak { } # break style of ref list
+ # @RefListLabelWidth { @ListLabelWidth } # Labels column width
+ # @RefListSortKey { @Tag } # sorting key
+ # @MakeIndex { No } # make index? Yes or No
+ @MakeIndex { Yes } # make index? Yes or No
+ # @IndexFont { } # index entries font
+ # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+ # @IndexColumnNumber { 2 } # index columns (1 to 10)
+ # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap
+ # @MakeIndexA { No } # make index A? Yes or No
+ # @IndexAFont { } # index A entries font
+ # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+ # @IndexAColumnNumber { 2 } # index A columns (1 to 10)
+ # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap
+ # @MakeIndexB { No } # make index B? Yes or No
+ # @IndexBFont { } # index B entries font
+ # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+ # @IndexBColumnNumber { 2 } # index B columns (1 to 10)
+ # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap
+ # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures
+ # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text
+ # @FootNoteNumbers { Arabic } # footnote numbers
+ # @FootNoteThrough { No } # numbered through chapter?
+ # @FootNoteLocation { ColFoot } # where the footnote appears
+ # @FootNoteFont { 0.80f } # font for footnotes
+ # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes
+ # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line
+ # @FootAboveGap { @DisplayGap } # gap above footnote line
+ # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes
+ # @MarginNoteFont { 0.80f } # font of margin notes
+ # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes
+ # @MarginNoteHGap { 0.5c } # horizontal gap to notes
+ # @MarginNoteVGap { @DisplayGap } # min vertical gap between
+ # @MarginNoteWidth { 1.50c } # width of margin notes
+ # @EndNoteNumbers { Arabic } # endnote numbers
+ # @EndNoteFont { 0.80f } # font of endnotes
+ # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes
+ # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes
+ # @TheoremWord { theorem } # "Theorem" word, etc.
+ # @DefinitionWord { definition } # "Definition" word, etc.
+ # @ClaimWord { claim } # "Claim" word, etc.
+ # @PropositionWord { proposition } # "Proposition" word, etc.
+ # @LemmaWord { lemma } # "Lemma" word, etc.
+ # @CorollaryWord { corollary } # "Corollary" word, etc.
+ # @ExampleWord { example } # "Example" word, etc.
+ # @ProofWord { proof } # "Proof" word, etc.
+ # @PageHeaders { Simple } # None Simple Titles NoTitles
+ @PageHeaders { Titles } # None Simple Titles NoTitles
+ # @PageNumbers { Arabic } # page numbers
+ # @FirstPageNumber { 1 } # number of first page
+ # @IntroPageNumbers { Roman } # intro page numbers
+ # @IntroFirstPageNumber{ 1 } # number of first intro page
+ # @StructPageNums { No } # make structured page numbers
+
+ # @OddTop { @Centre{- @PageNum -} } # Simple page headers
+ # @OddFoot { @Null }
+ # @EvenTop { @Centre{- @PageNum -} }
+ # @EvenFoot { @Null }
+ # @StartOddTop { @Null }
+ # @StartOddFoot { @Null }
+ # @StartEvenTop { @Null }
+ # @StartEvenFoot { @Null }
+ # @IntroOddTop { @Null }
+ # @IntroOddFoot { @Centre @PageNum }
+ # @IntroEvenTop { @Null }
+ # @IntroEvenFoot { @Centre @PageNum }
+ # @IntroStartOddTop { @Null }
+ # @IntroStartOddFoot { @Null }
+ # @IntroStartEvenTop { @Null }
+ # @IntroStartEvenFoot { @Null }
+
+ # Titles, NoTitles headers
+ # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+ # @RunningOddFoot { @Null }
+ # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+ # @RunningEvenFoot { @Null }
+ # @RunningStartOddTop { @Null }
+ # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum }
+ # @RunningStartEvenTop { @Null }
+ # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum }
+ # @RunningIntroOddTop { @Null }
+ # @RunningIntroOddFoot { @Right @PageNum }
+ # @RunningIntroEvenTop { @Null }
+ # @RunningIntroEvenFoot { @PageNum }
+ # @RunningIntroStartOddTop { @Null }
+ # @RunningIntroStartOddFoot { @Null }
+ # @RunningIntroStartEvenTop { @Null }
+ # @RunningIntroStartEvenFoot { @Null }
+}
+
+
+###############################################################################
+# #
+# The @BookSetup @Use clause - options specific to books. #
+# #
+###############################################################################
+
+@Use { @BookSetup
+ # @TitlePageFont { Helvetica Base} # title page font (not size)
+ # @SeparateIntroNumbering { Yes } # separate intro page numbers
+ # @PrefaceAfterContents { No } # Yes or No
+ # @ChapterStartPages { Any } # Any, Odd, or Even
+ # @ReferencesBeforeAppendices { No } # references before appendices
+ # @PrefaceWord { preface } # word for "Preface"
+ # @ContentsWord { contents } # word for "Contents"
+ # @FigureListWord { figurelist } # word for "List of Figures"
+ # @TableListWord { tablelist } # word for "List of Tables"
+ # @IntroductionWord { introduction } # word for "Introduction"
+ # @ChapterWord { chapter } # word for "Chapter"
+ # @AppendixWord { appendix } # word for "Appendix"
+ # @IndexWord { index } # word for "Index"
+ # @IndexAWord { index } # word for "Index" (A)
+ # @IndexBWord { index } # word for "Index" (B)
+ # @ChapterNumbers { Arabic } # kind of chapter numbers
+ # @FirstChapterNumber { 1 } # first chapter number (Arabic)
+ # @SectionNumbers { Arabic } # kind of section numbers
+ # @FirstSectionNumber { 1 } # first section number (Arabic)
+ # @SubSectionNumbers { Arabic } # kind of subsection numbers
+ # @FirstSubSectionNumber { 1 } # first subsect number (Arabic)
+ # @SubSubSectionNumbers { Arabic } # kind of sub-subs. numbers
+ # @FirstSubSubSectionNumber { 1 } # first sub-sub number (Arabic)
+ # @AppendixNumbers { UCAlpha } # kind of appendix numbers
+ # @FirstAppendixNumber { 1 } # first appendix num (Arabic)
+ # @SubAppendixNumbers { Arabic } # kind of subappendix numbers
+ # @FirstSubAppendixNumber { 1 } # first sub-app num (Arabic)
+ # @SubSubAppendixNumbers { Arabic } # kind of sub-subapp. numbers
+ # @FirstSubSubAppendixNumber { 1 } # first sub-sub num (Arabic)
+ # @PartHeadingFont { Helvetica Base 2.50f } # part head font
+ # @PartHeadingBreak { clines 1.2fx nohyphen } # part head break
+ # @PartHeadingFormat { @CD number @DP @CD title } # part head format
+ # @ChapterHeadingFont { Bold 2.00f } # chapter head font
+ # @ChapterHeadingBreak { ragged 1.2fx nohyphen } # chapter head break
+ # @ChapterHeadingFormat { number @DotSep title } # format of chap. head
+ # @SectionHeadingFont { Bold } # section head font
+ # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section head break
+ # @SectionHeadingFormat { number @DotSep title } # section head fmt
+ # @SubSectionHeadingFont { Bold } # subs. head font
+ # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subs. head break
+ # @SubSectionHeadingFormat { number @DotSep title } # subs. head fmt
+ # @SubSubSectionHeadingFont { Slope } # sub-subs. head font
+ # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subs. head break
+ # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subs. head fmt
+ # @AppendixHeadingFont { Bold 2.00f } # appendix head font
+ # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix head break
+ # @AppendixHeadingFormat { number @DotSep title } # appendix head fmt
+ # @SubAppendixHeadingFont { Bold } # subapp. head font
+ # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subapp. head break
+ # @SubAppendixHeadingFormat { number @DotSep title } # subapp. head fmt
+ # @SubSubAppendixHeadingFont { Slope } # sub-suba. head font
+ # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-suba. head break
+ # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-suba. head fmt
+ # @AbovePartGap { 4.00f } # gap above part title
+ # @AboveChapterGap { 3.00f } # above major titles
+ # @SectionGap { 2.0v @OrIfPlain 3f } # between sections
+ # @SubSectionGap { 1.5v @OrIfPlain 2f } # between subsects
+ # @SubSubSectionGap { 1.5v @OrIfPlain 2f } # between sub-subs.
+ # @SubAppendixGap { 2.0v @OrIfPlain 3f } # between subappendices
+ # @SubSubAppendixGap { 1.5v @OrIfPlain 2f } # between sub-subapps
+ # @IntroductionInContents { Yes } # add introduction to contents
+ # @PartInContents { Yes } # add parts to contents
+ # @ChapterInContents { Yes } # add chapters to contents
+ # @SectionInContents { Yes } # add sections to contents
+ # @SubSectionInContents { Yes } # add subsections to contents
+ # @SubSubSectionInContents { No } # add sub-subsects to contents
+ # @AppendixInContents { Yes } # add appendices to contents
+ # @SubAppendixInContents { Yes } # add subappendices to contents
+ # @SubSubAppendixInContents { No } # add sub-subapps to contents
+ # @ReferencesInContents { Yes } # add ref. section to contents
+ # @IndexInContents { Yes } # add index to contents
+ # @IndexAInContents { Yes } # add index A to contents
+ # @IndexBInContents { Yes } # add index B to contents
+ # @PartContentsIndent { 0.5rt } # indent of part contents entry
+ # @ChapterNumInTheorems { Yes } # theorem num has chapter num
+ # @SectionNumInTheorems { No } # theorem num has section num
+ # @SubSectionNumInTheorems { No } # theorem num has subsect num
+ # @SubSubSectionNumInTheorems { No } # theorem num has sub-ss. num
+ # @AppendixNumInTheorems { Yes } # theorem num has appendix num
+ # @SubAppendixNumInTheorems { No } # theorem num has sub-app num
+ # @SubSubAppendixNumInTheorems{ No } # theorem num has sub-sa. num
+ # @ChapterNumInDisplays { Yes } # display num has chapter num
+ # @SectionNumInDisplays { Yes } # display num has section num
+ # @SubSectionNumInDisplays { No } # display num has subsect num
+ # @SubSubSectionNumInDisplays { No } # display num has sub-ss. num
+ # @AppendixNumInDisplays { Yes } # display num has appendix num
+ # @SubAppendixNumInDisplays { Yes } # display num has sub-app num
+ # @SubSubAppendixNumInDisplays{ No } # display num has sub-sa. num
+ # @ChapterNumInFigures { Yes } # figure num has chapter num
+ # @SectionNumInFigures { No } # figure num has section num
+ # @SubSectionNumInFigures { No } # figure num has subsect num
+ # @SubSubSectionNumInFigures { No } # figure num has sub-ss. num
+ # @AppendixNumInFigures { Yes } # figure num has appendix num
+ # @SubAppendixNumInFigures { No } # figure num has sub-app num
+ # @SubSubAppendixNumInFigures { No } # figure num has sub-sa. num
+ # @ChapterNumInTables { Yes } # table num has chapter num
+ # @SectionNumInTables { No } # table num has section num
+ # @SubSectionNumInTables { No } # table num has subsect num
+ # @SubSubSectionNumInTables { No } # table num has sub-ss. num
+ # @AppendixNumInTables { Yes } # table num has appendix num
+ # @SubAppendixNumInTables { No } # table num has sub-app num
+ # @SubSubAppendixNumInTables { No } # table num has sub-sa. num
+ # @SectionNumInRunners { Yes } # runners have section num
+ # @SubSectionNumInRunners { No } # runners have subsect num
+ # @SubSubSectionNumInRunners { No } # runners have sub-ss. num
+ # @SubAppendixNumInRunners { Yes } # runners have sub-app num
+ # @SubSubAppendixNumInRunners { No } # runners have sub-sa. num
+ # @PrefacePrefix { } # for structured page nums
+ # @ContentsPrefix { } # for structured page nums
+ # @FigureContentsPrefix { } # for structured page nums
+ # @TableContentsPrefix { } # for structured page nums
+ # @IntroductionPrefix { } # for structured page nums
+ # @ChapterPrefix { } # for structured page nums
+ # @AppendixPrefix { } # for structured page nums
+ # @ReferencesPrefix { } # for structured page nums
+ # @IndexPrefix { } # for structured page nums
+ # @IndexAPrefix { } # for structured page nums
+ # @IndexBPrefix { } # for structured page nums
+}
+
+
+###############################################################################
+# #
+# @Database (and @SysDatabase) clauses go here. #
+# #
+###############################################################################
+
+@SysDatabase @RefStyle { refstyle } # reference printing styles
diff --git a/doc/user/mydefs b/doc/user/mydefs
new file mode 100644
index 0000000..2ef9639
--- /dev/null
+++ b/doc/user/mydefs
@@ -0,0 +1,203 @@
+
+ ###################################################
+ # #
+ # Lout keywords and @Code symbol. #
+ # #
+ ###################################################
+
+ def @Code right x
+ { { Helvetica Base -1p } @Font lines @Break x }
+
+ def @@BackEnd { @Code "@BackEnd" }
+ 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 @@Char { @Code "@Char" }
+ def @@Galley { @Code "@Galley" }
+ def @@Graphic { @Code "@Graphic" }
+ def @@HAdjust { @Code "@HAdjust" }
+ def @@HContract { @Code "@HContract" }
+ def @@HCover { @Code "@HCover" }
+ def @@HExpand { @Code "@HExpand" }
+ def @@HScale { @Code "@HScale" }
+ def @@High { @Code "@High" }
+ def @@HShift { @Code "@HShift" }
+ def @@Include { @Code "@Include" }
+ def @@Insert { @Code "@Insert " }
+ def @@IncludeGraphic { @Code "@IncludeGraphic" }
+ def @@Key { @Code "@Key" }
+ def @@LClos { @Code "@LClos" }
+ def @@LEnv { @Code "@LEnv" }
+ def @@LInput { @Code "@LInput" }
+ def @@LVis { @Code "@LVis" }
+ 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 @@PAdjust { @Code "@PAdjust" }
+ def @@PrependGraphic { @Code "@PrependGraphic" }
+ def @@Rotate { @Code "@Rotate" }
+ def @@Scale { @Code "@Scale" }
+ def @@SetColor { @Code "@SetColor" }
+ def @@SetColour { @Code "@SetColour" }
+ def @@Language { @Code "@Language" }
+ def @@CurrLang { @Code "@CurrLang" }
+ def @@Space { @Code "@Space" }
+ def @@SysDatabase { @Code "@SysDatabase" }
+ def @@SysInclude { @Code "@SysInclude" }
+ def @@SysIncludeGraphic { @Code "@SysIncludeGraphic" }
+ def @@SysPrependGraphic { @Code "@SysPrependGraphic" }
+ def @@Tag { @Code "@Tag" }
+ def @@Tagged { @Code "@Tagged" }
+ def @@Use { @Code "@Use" }
+ def @@VAdjust { @Code "@VAdjust" }
+ def @@VContract { @Code "@VContract" }
+ def @@VCover { @Code "@VCover" }
+ def @@VExpand { @Code "@VExpand" }
+ def @@VScale { @Code "@VScale" }
+ def @@VShift { @Code "@VShift" }
+ def @@Wide { @Code "@Wide" }
+ def @@Yield { @Code "@Yield" }
+
+
+ ###################################################
+ # #
+ # Miscellaneous symbols used in the guide. #
+ # #
+ ###################################################
+
+ def @TeX
+ { @OneCol { T &0.4fo {-0.2f @VShift E} &0.45fo X }
+ }
+
+ def @LaTeX
+ { @OneCol { L &0.3fo { +0.1f @VShift 0.8f @Font A } &0.4fo @TeX }
+ }
+
+ import @BasicSetup
+ def @Batlow { Batlow Food Distributors Pty. Ltd. }
+
+ import @BasicSetup
+ def @GreyBox right x { @Box paint { lightgrey } x }
+
+ import @BasicSetup
+ def @HeadingBox left x right y
+ {
+ @Box { @CentredDisplay @Heading x y }
+ }
+
+ def @FilledBox
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto"
+ "closepath fill"
+ } @Graphic { 0.6f @High ^/ 0.4f @High 4f @Wide }
+ }
+ PDF @Yield {
+ { "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h f"
+ } @Graphic { 0.6f @High ^/ 0.4f @High 4f @Wide }
+ }
+ }
+ }
+
+ import @Eq
+ def epi { p sub i ` log sub 2 ` p sub i }
+
+ import @Eq
+ def ep right x { p sub x ` log sub 2 ` p sub x }
+
+ def @Dbl left x right y
+ { 1.95i @Wide
+ { 1.25i @Wide { |1rt @Code x } |0.2i @Eq {non y} }
+ }
+
+ import @Eq
+ def @ExA { 1 over sqrt { 1 - 4 x sup 2 } }
+
+ def @@Diag { @Code "@Diag" }
+
+ extend @DiagSetup @Diag
+ macro @MyNode {
+ @Node
+ outline {
+ LR:: { xsize 0 }
+ LR:< 0d
+ UL:: { 0 ysize }
+ UL:< 270d
+ 0 0 LR UL 0 0
+ }
+ }
+
+ extend @DiagSetup @Diag
+ macro @MyLink {
+ @Link
+ path {
+ FROM:: from
+ TO:: to
+ FROM TO
+ }
+ }
+
+ def @ShowHMark
+ named linewidth { 0.015 cm }
+ named linestyle { dashed }
+ named dashlength { 0.15 cm }
+ named paint { light }
+ right x
+ {
+ @Fig
+ {
+ @Figure
+ shape {
+ @BackEnd @Case {
+ PostScript @Yield {
+ -0.3 cm ymark
+ {xsize ymark} ++ {0.3 cm 0}
+ }
+ PDF @Yield { "" # VT: PDF currently has no output
+ }
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+ }
+
+ def @ZeroWidth right x { @OneCol { |0io x |0io } }
+
+ def @SomeText
+ {
+Johnson suddenly uttered, in a strong determined tone, an apophegm, at
+which many will start: `Patriotism is the last refuge of a scoundrel.'
+ }
+
+ import @DiagSetup
+ def @OpenCircle { @Diag { @Circle margin { 0.2f } } }
+
+ import @DiagSetup
+ def @ClosedCircle { @Diag { @Circle paint { black } margin { 0.2f } } }
+
+ import @TblSetup @BasicSetup
+ def @AmberLight
+ {
+ @OneRow @Tbl
+ aformat { @Cell A }
+ marginhorizontal { 0i }
+ marginvertical { 0i }
+ strut { no }
+ rule { no }
+ paint { no }
+ {
+ @Rowa A { @OpenCircle }
+ @MarkRowa A { @ClosedCircle }
+ @Rowa A { @OpenCircle }
+ }
+ }
diff --git a/doc/user/pascal b/doc/user/pascal
new file mode 100644
index 0000000..41376df
--- /dev/null
+++ b/doc/user/pascal
@@ -0,0 +1,162 @@
+@Chapter
+ @Title { Pascal and Modula-2 Programs }
+@Begin
+@LP
+There is a @Code "@Pas" symbol for printing Pascal programs
+pascal @Index { Pascal programs }
+pas. @Index @Code "@Pas"
+@Cite { $jensen1975pascal }. No attempt is made to follow any
+particular printing standard; the design simply reflects this author's
+taste. To use {@Code "@Pas"}, place @Code "@SysInclude { pas }" at the
+start of your document in the usual way. A Pascal program or program
+fragment is entered like this:
+@ID @Code {
+"@ID @Pas {"
+"procedure PriDelete(x: PriEntry; var Q: PriorityQueue);"
+" var i: integer;"
+"begin"
+" with Q^ do begin"
+" size := size - 1;"
+" if x^.back <= size then"
+" begin"
+" i := x^.back;"
+" A[i] := A[size + 1];"
+" A[i]^.back := i;"
+" PriAddRoot(i, Q);"
+" PriAddLeaf(i, Q)"
+" end"
+" end"
+"end;"
+"}"
+}
+This produces
+@ID @Pas {
+procedure PriDelete(x: PriEntry; var Q: PriorityQueue);
+ var i: integer;
+begin
+ with Q^ do begin
+ size := size - 1;
+ if x^.back <= size then
+ begin
+ i := x^.back;
+ A[i] := A[size + 1];
+ A[i]^.back := i;
+ PriAddRoot(i, Q);
+ PriAddLeaf(i, Q)
+ end
+ end
+end;
+}
+Blank lines, line breaks, indents and spaces in the input are respected,
+with a tab being considered equal to eight spaces. @Code "@Pas" can also
+be used within a paragraph to produce a fragment like
+@OneCol @Pas { A[i..j] }. Use @Code "@OneCol @Pas { ... }" to prevent the
+result from breaking over two lines.
+@PP
+@Code "@Pas" does not attempt to rearrange the program in any way. Each
+item is simply printed according to the following plan:
+@ID {
+7c @Wide {
+ @Code and |2.5ct @Pas { and }
+//1vx @Code array |2.5ct @Pas { array }
+//1vx @Code begin |2.5ct @Pas { begin }
+//1vx @Code case |2.5ct @Pas { case }
+//1vx @Code const |2.5ct @Pas { const }
+//1vx @Code div |2.5ct @Pas { div }
+//1vx @Code do |2.5ct @Pas { do }
+//1vx @Code downto |2.5ct @Pas { downto }
+//1vx @Code else |2.5ct @Pas { else }
+//1vx @Code end |2.5ct @Pas { end }
+//1vx @Code file |2.5ct @Pas { file }
+//1vx @Code for |2.5ct @Pas { for }
+//1vx @Code forward |2.5ct @Pas { forward }
+//1vx @Code function |2.5ct @Pas { function }
+//1vx @Code goto |2.5ct @Pas { goto }
+//1vx @Code if |2.5ct @Pas { if }
+//1vx @Code in |2.5ct @Pas { in }
+//1vx @Code label |2.5ct @Pas { label }
+//1vx @Code mod |2.5ct @Pas { mod }
+//1vx @Code nil |2.5ct @Pas { nil }
+//1vx @Code not |2.5ct @Pas { not }
+//1vx @Code of |2.5ct @Pas { of }
+//1vx @Code or |2.5ct @Pas { or }
+//1vx @Code otherwise |2.5ct @Pas { otherwise }
+//1vx @Code packed |2.5ct @Pas { packed }
+//1vx @Code procedure |2.5ct @Pas { procedure }
+//1vx @Code program |2.5ct @Pas { program }
+//1vx @Code record |2.5ct @Pas { record }
+//1vx @Code repeat |2.5ct @Pas { repeat }
+//1vx @Code set |2.5ct @Pas { set }
+//1vx @Code then |2.5ct @Pas { then }
+//1vx @Code to |2.5ct @Pas { to }
+//1vx @Code type |2.5ct @Pas { type }
+//1vx @Code until |2.5ct @Pas { until }
+//1vx @Code var |2.5ct @Pas { var }
+//1vx @Code while |2.5ct @Pas { while }
+//1vx @Code with |2.5ct @Pas { with }
+} | 7c @Wide {
+ @Code "0" |2.5ct @Pas { 0 }
+//1vx @Code "1" |2.5ct @Pas { 1 }
+//1vx @Code "2" |2.5ct @Pas { 2 }
+//1vx @Code "3" |2.5ct @Pas { 3 }
+//1vx @Code "4" |2.5ct @Pas { 4 }
+//1vx @Code "5" |2.5ct @Pas { 5 }
+//1vx @Code "6" |2.5ct @Pas { 6 }
+//1vx @Code "7" |2.5ct @Pas { 7 }
+//1vx @Code "8" |2.5ct @Pas { 8 }
+//1vx @Code "9" |2.5ct @Pas { 9 }
+//1vx @Code "." |2.5ct @Pas { . }
+//1vx @Code "," |2.5ct @Pas { , }
+//1vx @Code ":" |2.5ct @Pas { : }
+//1vx @Code ";" |2.5ct @Pas { ; }
+//1vx @Code "'" |2.5ct @Pas { ' }
+//1vx @Code "`" |2.5ct @Pas { ` }
+//1vx @Code "+" |2.5ct @Pas { + }
+//1vx @Code "-" |2.5ct @Pas { - }
+//1vx @Code "*" |2.5ct @Pas { * }
+//1vx @Code "/" |2.5ct @Pas { / }
+//1vx @Code "(" |2.5ct @Pas { ( }
+//1vx @Code ")" |2.5ct @Pas { ) }
+//1vx @Code "[" |2.5ct @Pas { [ }
+//1vx @Code "]" |2.5ct @Pas { ] }
+//1vx @Code "^" |2.5ct @Pas { ^ }
+//1vx @Code ".." |2.5ct @Pas { .. }
+//1vx @Code "=" |2.5ct @Pas { = }
+//1vx @Code "<" |2.5ct @Pas { < }
+//1vx @Code ">" |2.5ct @Pas { > }
+//1vx @Code "<>" |2.5ct @Pas { <> }
+//1vx @Code "<=" |2.5ct @Pas { <= }
+//1vx @Code ">=" |2.5ct @Pas { >= }
+//1vx @Code ":=" |2.5ct @Pas { := }
+}
+}
+Anything not mentioned here will appear in italic font.
+@PP
+Unlike the @Code "@CP" symbol from the previous chapter, the @Code "@Pas"
+symbol is a quick-and-dirty production which does not offer you any options,
+or indeed attempt to solve every problem of Pascal formatting. In
+particular, Pascal strings need attention before formatting by
+{@Code "@Pas"}. Their interiors are best enclosed in double quotes to
+prevent the above transformations from occurring inside them. Any
+@Code "\\" or @Code "\"" characters inside strings will need to be
+replaced by @Code "\\\\" and @Code "\\\"" respectively, and the opening
+quote should be replaced by {@Code "`"}.
+@PP
+Similar remarks apply to Pascal comments; don't forget that @Code "{"
+and @Code "}" must be enclosed in double quotes. Alternatively, a
+@Code "@Com" symbol can be placed in front of a comment enclosed
+in braces. It will add literal braces:
+@ID @Code {
+"@Com { A Pascal comment }"
+}
+has result
+@ID @Pas {
+@Com { A Pascal comment }
+}
+It may still be necessary to enclose the interior in double quotes.
+@PP
+There is a @Code "@Modula" symbol which allows you to format Modula-2
+programs in the same way as @Code "@Pas" does for Pascal. You get it
+via {@Code "@SysInclude { modula }"}, and once again it is a quick-and-dirty
+production.
+@End @Chapter
diff --git a/doc/user/preface b/doc/user/preface
new file mode 100644
index 0000000..eada554
--- /dev/null
+++ b/doc/user/preface
@@ -0,0 +1,66 @@
+@Preface @Begin
+@LP
+This User's Guide brings together in one document everything needed
+for the day-to-day use of Version 3 of the Lout document formatting
+system.
+@IndexBlanks
+@PP
+There are three other documents describing Lout: the Expert's Guide
+@Cite { $kingston1995lout.expert }, which you need if you want to add
+new features to Lout; a journal paper on the design and implementation
+of Lout @Cite { $kingston1993lout.design }; and a set of overhead
+transparencies @Cite { $kingston1994lout.overheads } that cover much
+the same ground as this Guide. These documents are all distributed
+with the software.
+@PP
+Lout is distributed free of charge under the GNU Public License. The
+gnu. @Index { GNU Public License }
+primary source is directory
+@ID @Code "ftp://ftp.cs.su.oz.au/jeff/lout"
+in which may be found a gzipped tar file containing the main distribution
+(currently {@Code "lout-3.17.tar.gz"}), and various other things including
+a PostScript version of this guide. The distribution contains source code,
+libraries, documentation, license, and installation instructions.
+@PP
+A mailing list has been set up for discussion of all topics related to
+Lout. To subscribe, send email to @Code "lout-request@ptc.spbu.ru"
+containing the word @Code "subscribe" in the Subject line. To post an
+item, send email to {@Code "lout@ptc.spbu.ru"}; it will be forwarded to
+all subscribers via email. To unsubscribe, send email to
+@Code "lout-request@ptc.spbu.ru" containing the word @Code "unsubscribe"
+in the Subject line.
+@PP
+Lout began in 1984 as a research project into the design of a high-level
+language for document formatting. At that time my name for the subject
+was `document layout,' and this terminology survives in the name
+`Lout'. The initial design
+was strongly influenced by Brian W. Kernighan and Lorinda L. Cherry's eqn
+kernighan @Index { Kernighan, Brian W. }
+cherry.l @Index { Cherry, Lorinda L.}
+eqn. @Index { @Code eqn equation formatter }
+equation formatter @Cite { $kernighan1975eqn }, and also by Brian K. Reid's
+Scribe system @Cite { $reid1980scribe }. That
+scribe.influence @SubIndex { influence on Lout }
+reid.b @Index { Reid, Brian K. }
+research phase ended in October 1991 with the first public release of Lout.
+@PP
+Since then the system has been steadily improved and extended. Optimal
+paragraph breaking and automatic hyphenation were copied from Donald
+knuth @Index { Knuth, D. E. }
+tex. @Index { @TeX }
+E. Knuth's @TeX system @Cite { $knuth1984tex }, and the optimal paragraph
+breaking algorithm was applied to the problem of producing optimal page
+breaks. The first implementations of horizontal galleys and optimal
+page breaking were by my student Gabor Inokai. Vincent Tan contributed
+the PDF back end. The strongest influence during this period has come from
+Lout's users; indeed the number of people who have offered comments and
+suggestions is so great that it is quite out of my power to acknowledge them
+individually. I hope that seeing their ideas adopted will be thanks enough.
+@DP
+@RLD lines @Break {
+Jeffrey H. Kingston
+Basser Department of Computer Science
+The University of Sydney 2006, Australia
+@Code "jeff@cs.usyd.edu.au"
+}
+@End @Preface
diff --git a/doc/user/ref b/doc/user/ref
new file mode 100644
index 0000000..6ea5782
--- /dev/null
+++ b/doc/user/ref
@@ -0,0 +1,31 @@
+@Chapter
+ @Title { References }
+ @Tag { biblio }
+@Begin
+@LP
+The simple way to make a list of references is to put them in a numbered
+references. @Index { references }
+or tagged list at the end of your document. If you use references only
+rarely, that is probably the best way, but if you use them frequently this
+chapter will save you hours of work in the long run.
+@PP
+Some good general principles and many examples have been given by van Leunen
+van.leunen. @Index { van Leunen, Mary-Claire }
+@Cite { $vanleunen1992handbook }. Broadly speaking Lout follows her
+recommendations, with some unification and scaling back as is inevitable
+with software. Scribe @Cite { $reid1980scribe }
+latex. @Index @LaTeX
+scribe. @RawIndex Scribe
+scribe.reference @SubIndex { reference formatting }
+and @LaTeX @Cite { $lamport1986latex } followed the first edition of the
+same source, so translation from Scribe and @LaTeX references is
+fairly straightforward.
+@BeginSections
+@Include { ref_sett }
+@Include { ref_cite }
+@Include { ref_labe }
+@Include { ref_entr }
+@Include { ref_chan }
+@Include { ref_crea }
+@EndSections
+@End @Chapter
diff --git a/doc/user/ref_chan b/doc/user/ref_chan
new file mode 100644
index 0000000..f7114fb
--- /dev/null
+++ b/doc/user/ref_chan
@@ -0,0 +1,200 @@
+@Section
+ @Title { Changing the appearance of citations and the reference list }
+ @Tag { changeref }
+@Begin
+@PP
+By default, citations appear like this @Cite { $kingston1995lout.expert },
+and the reference list appears like the one at the end of this
+document, with the entries numbered, and sorted by their @Code "@Tag"
+options. This section explains how to change all this, by setting
+options in the setup file.
+@PP
+For a general introduction to setup files and their options, see
+Section {@NumberOf setup}. Here we just describe the setup
+file options that relate to references. Here they are, with their
+default values:
+@ID @OneRow @Code {
+"@MakeReferences { Yes }"
+"@RefCiteStyle { [cite] }"
+"@RefCiteLabels { @RefNum }"
+"@RefNumbers { Arabic }"
+"@RefListFormat { Labels }"
+"@RefListLabels { [@RefNum] }"
+"@RefListTitle { references }"
+"@ChapRefListTitle { references }"
+"@RefListIndent { 0c }"
+"@RefListRightIndent { 0c }"
+"@RefListGap { 1.00v }"
+"@RefListFont { }"
+"@RefListBreak { }"
+"@RefListLabelWidth { 2.00f }"
+"@RefListSortKey { @Tag }"
+}
+makereferences.sym @Index { @Code "@MakeReferences" }
+Setting @Code "@MakeReferences" to @Code "No" will cause Lout to ignore
+all citation symbols and omit all reference lists.
+@PP
+@Code "@RefCiteStyle" and @Code "@RefCiteLabels" combine to
+refcitestyle.sym @Index { @Code "@RefCiteStyle" }
+determine the appearance of citations. The result of each @Code "@Cite"
+symbol is the value of @Code "@RefCiteStyle" with the @Code "cite"
+symbol replaced by the object following the @Code "@Cite" symbol. For
+example, the default value shown above encloses each citation in
+brackets. The @Code "cite" symbol must appear exactly once within
+{@Code "@RefCiteStyle"}.
+@PP
+@Code "@RefCiteLabels" determines the appearance of each label within
+refcitelabels.sym @Index { @Code "@RefCiteLabels" }
+the citation. Within it, the @Code "@RefNum" symbol will produce the
+number of the reference, and you may also use any of the options of the
+@Code "@Reference" symbol listed at the beginning of Section
+{@NumberOf entries}:
+@ID @OneRow @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "@RefCiteLabels { @RefNum }" }
+ B { [3] }
+@Rowa
+ A { "@RefCiteLabels { @Label }" }
+ B { [Kin93] }
+@Rowa
+ A { "@RefCiteLabels { @Author, @Year }" }
+ B { [Jeffrey H. Kingston, 1993] }
+}
+The value of @Code "@RefCiteLabels" may be any object. The @Code "@Label"
+symbol will produce the @Code "label" option of @Code "$" or @Code "@Ref"
+if there is one, rather than the @Code "@Label" option of the reference;
+this @Code "label" option is explained in Section {@NumberOf labelled}.
+@PP
+@Code "@RefNumbers" determines the kind of numbering produced by the
+refnumbers.sym @Index { @Code "@RefNumbers" }
+@Code "@RefNum" symbol used within @Code "@RefCiteLabels" above and
+@Code "@RefListLabels" below. Its value may be {@Code Arabic},
+{@Code Roman}, {@Code UCRoman}, {@Code Alpha}, or {@Code UCAlpha}, as
+usual for numbering in Lout. If you don't use {@Code "@RefNum"},
+@Code "@RefNumbers" has no effect.
+@PP
+The remaining eleven setup file options are all concerned with the
+appearance of the reference list. The first, {@Code "@RefListFormat"},
+reflistformat.sym @Index { @Code "@RefListFormat" }
+determines the overall format of the list. Here is what its four
+@NoCite { $strunk1979style } possible values do:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col @OneCol B }
+ vmargin { 0.3v }
+{
+@Rowa
+ A { "@RefListFormat { NoLabels }" }
+ B { @RefPrint strunk1979style }
+@Rowa
+@Rowa
+ A { "@RefListFormat { Labels }" }
+ B { 2f @Wide {{@NumberOf strunk1979style}.} | @RefPrint strunk1979style }
+@Rowa
+@Rowa
+ A { "@RefListFormat { DropLabels }" }
+ B { {@NumberOf strunk1979style}. //1vx
+ 2f @Wide {} | @RefPrint strunk1979style
+ }
+@Rowa
+@Rowa
+ A { "@RefListFormat { InLabels }" }
+ B { {@NumberOf strunk1979style}. &2s @RefPrint strunk1979style }
+}
+@Code "@RefListFormat" is not concerned with the appearance of the
+labels and references, only with where they appear.
+@PP
+@Code "@RefListLabels" determines the appearance of the labels in the
+reflistlabels.sym @Index { @Code "@RefListLabels" }
+reference list (and so has no effect if @Code "@RefListFormat" is
+{@Code "NoLabels"}). It is a combination of @Code "@RefCiteStyle"
+and {@Code "@RefCiteLabels"}; you can use @Code "@RefNum" and all the
+options of @Code "@Reference" within it. The default value,
+@ID @Code "@RefListLabels { @RefNum. }"
+produces a numbered reference list in the style of
+{@Code "@NumberedList"}. Another useful value is
+@ID @Code "@RefListLabels { [@Label] }"
+which produces the @Code "@Label" option of the reference, or the
+@Code "label" option of the citation if there is one, enclosed in
+brackets. If you do switch to non-numeric labels you will need to
+either use @Code "DropLabels" or else increase the
+@Code "@RefListLabelWidth" option described below.
+@PP
+@Code "@RefListTitle" determines the heading placed just before the
+reflisttitle.sym @Index { @Code "@RefListTitle" }
+reference list at the end of the document:
+@ID @Code "@RefListTitle { Further Reading }"
+Two special values, @Code "references" and {@Code "bibliography"},
+produce References and Bibliography in English and their equivalents
+in other languages. @Code "@ChapRefListTitle" is the same as
+chapreflisttitle.sym @Index { @Code "@ChapRefListTitle" }
+{@Code "@RefListTitle"}, but applied to the reference list at the end
+of each chapter of a book when @Code "@ChapCite" is used.
+@PP
+{@Code "@RefListIndent"}, {@Code "@RefListRightIndent"}, and
+reflistindent.sym @Index { @Code "@RefListIndent" }
+reflistrightindent.sym @Index { @Code "@RefListRightIndent" }
+reflistgap.sym @Index { @Code "@RefListGap" }
+{@Code "@RefListGap"} determine the left indent, right indent, and gap
+between reference list items, analogously to the {@Code "indent"},
+{@Code "rightindent"}, and {@Code "gap"} options of the @Code "@List"
+symbol (Section {@NumberOf lists}). @Code "@RefListFont" and
+@Code "@RefListBreak" determine the font and
+reflistfont.sym @Index { @Code "@RefListFont" }
+reflistbreak.sym @Index { @Code "@RefListBreak" }
+paragraph breaking style of the reference list. For example,
+@ID @OneRow @Code {
+"@RefListFont { -2p }"
+"@RefListBreak { 1.2fx outdent }"
+}
+switches to a smaller size with outdented paragraphs (these work well
+with {@Code NoLabels}). The empty default values produce the same
+font and break style as in the document as a whole.
+@PP
+@Code "@RefListLabelWidth" determines the distance from the left
+reflistlabelwidth.sym @Index { @Code "@RefListLabelWidth" }
+edge of the labels to the left edge of the references, when
+@Code "@RefListFormat" is @Code Labels or {@Code DropLabels} (it
+has no effect when @Code "@RefListFormat" is @Code NoLabels or
+{@Code "InLabels"}). This is different to {@Code "@RefListIndent"},
+which determines the distance from the edge of the column to the
+left edge of the item.
+@PP
+Particular care is needed when @Code "@RefListFormat"
+is @Code Labels and the labels are non-numeric, for then if the
+labels are too wide they will overstrike the references. The default
+value, {@Code 2.00f}, is twice the current font size. It may be
+changed to any length (Section {@NumberOf objects}). Regrettably,
+Lout is not clever enough to choose a good value by itself.
+@PP
+Finally, @Code "@RefListSortKey" determines the sorting key used when
+sort.ref @Index { sorting of reference lists }
+reflistsortkey.sym @Index { @Code "@RefListSortKey" }
+ordering the reference list. The default value,
+@ID @Code "@RefListSortKey { @Tag }"
+sorts by tag; the other popular possibility is to sort by the
+@Code "@Label" option:
+@ID @Code "@RefListSortKey { @Label }"
+As usual @Code "@Label" will use the value of a @Code "label" option
+to the citation if there is one. There is no way to sort by order of
+first appearance in the document.
+@PP
+@Code "@RefListSortKey" may be any sequence of words
+and options from the @Code "@Reference" symbol, but not @Code "@RefNum"
+for obvious reasons. A possible more elaborate sorting key is
+@ID @Code "@RefListSortKey { @Author:@Year:@Tag }"
+sorting first by author, then by year within each author, and finally
+by tag. However you
+are supposed to choose tags which have this effect, and that is more
+reliable since the modern practice is to put the authors' surnames
+after their given names. There seems to be little practical use for
+sorting keys other than {@Code "@Tag"} and {@Code "@Label"}.
+@PP
+A colon within the @Code "@RefListSortKey" option is converted by Lout
+into a character smaller than any printable character, which ensures that
+the sorting is carried out separately on the three fields. It is essential
+that the sort key uniquely identify the reference, because if two sort
+keys are equal only one of the references will be printed. The easiest
+way to ensure this is to always include @Code "@Tag" in the sort key.
+@End @Section
diff --git a/doc/user/ref_cite b/doc/user/ref_cite
new file mode 100644
index 0000000..89958b9
--- /dev/null
+++ b/doc/user/ref_cite
@@ -0,0 +1,90 @@
+@Section
+ @Title { Citation }
+ @Tag { citation }
+@Begin
+@PP
+To cite one or more references, use the @Code "@Cite" symbol like this:
+citing @Index { citing references }
+cite. @Index @Code "@Cite"
+@ID @Code {
+"This feature is beyond our scope @Cite { $kingston1995lout.expert, page 97 }."
+}
+The following object must be enclosed in braces. It may be an arbitrary
+object as usual. Within it the @Code "$" character is a symbol with a
+special meaning: it causes a citation to be made of the reference whose
+@Code "@Tag" option is the word following the @Code "$" symbol:
+@ID {
+This feature is beyond our scope @Cite { $kingston1995lout.expert, page 97 }.
+}
+The reference itself will appear automatically in a reference list at
+the end of the document, and the citation(s) will be enclosed in brackets
+as shown. There is no need to write @Code "${kingston1995lout.expert},"
+as would normally be the case, because within @Code "@Cite" special
+arrangements are made to prevent commas and semicolons from being a
+nuisance.
+@PP
+A reference may be cited many times, but it will appear in the
+reference list only once. The references will ordinarily be sorted by
+tag and labelled with Arabic numbers, although this can be changed by
+setting options in the setup file (Section {@NumberOf changeref}).
+@PP
+If you are making a book, there is a @Code "@ChapCite" symbol which is
+chap.cite @Index @Code "@ChapCite"
+the same as @Code "@Cite" except that its references come out at the
+end of the current preface, introduction, chapter, or appendix, rather
+than at the end of the document.
+@PP
+It is quite all right to cite a reference from within a footnote, figure,
+table, or index entry. The reference will appear in the closest
+reference list following the citation point in the final printed document,
+or if there is no such list, the closest preceding reference list. This
+is fine in documents with just one reference list; but when using
+@Code "@ChapCite" in books, if the citation point appears after the intended
+reference list (because the footnote or figure has floated past the reference
+list at the end of the chapter), the reference will come out in the wrong list.
+@PP
+Although it is frowned upon by the authorities, some people include
+references which are not cited anywhere in the body of their document. For
+this there is {@Code "@NoCite"}:
+no.cite @Index @Code "@NoCite"
+@ID @Code {
+"... our scope @NoCite { $kingston1995lout.expert, $kingston1993lout.design }."
+}
+produces
+@ID {
+... our scope @NoCite { $kingston1995lout.expert, $kingston1993lout.design }.
+}
+with the @Code "@NoCite" symbol and any preceding space removed. The
+references will nevertheless appear in the reference list as usual. There
+is a @Code "@NoChapCite" symbol that combines @Code "@NoCite" and
+no.chap.cite @Index @Code "@NoChapCite"
+{@Code "@ChapCite"}. For compatibility with previous versions of Lout,
+there is a @Code "@Ref" symbol:
+ref. @Index @Code "@Ref"
+@ID @Code "@Ref kingston1995lout.expert"
+is the same as @Code "@Cite { $kingston1995lout.expert }" without the
+brackets. There are analogous {@Code "@ChapRef"}, {@Code "@NoRef"},
+and {@Code "@NoChapRef"}
+chap.ref @Index @Code "@ChapRef"
+no.ref @Index @Code "@NoRef"
+no.chap.ref @Index @Code "@NoChapRef"
+symbols, which are not recommended.
+@PP
+The @Code "@RefPrint" symbol will print a reference on the spot:
+ref.print @Index @Code "@RefPrint"
+resume. @Index { resumes }
+curriculum. @Index { curriculum vitae }
+@ID @Code "@RefPrint kingston1995lout.expert"
+has result
+@ID @RefPrint kingston1995lout.expert
+unrelated to any reference list. For example,
+@ID @OneRow @Code {
+"@Heading { Journal Articles }"
+"@NumberedList"
+"@LI @RefPrint kingston1985tree"
+"..."
+"@LI @RefPrint kingston1993lout.design"
+"@EndList"
+}
+might appear in someone's resume.
+@End @Section
diff --git a/doc/user/ref_crea b/doc/user/ref_crea
new file mode 100644
index 0000000..994f8d3
--- /dev/null
+++ b/doc/user/ref_crea
@@ -0,0 +1,139 @@
+@Section
+ @Title { Creating your own entry types and formats }
+ @Tag { refstyles }
+@Begin
+@PP
+Although the set of options to the @Code "@Reference" symbol
+({@Code "@Tag"}, {@Code "@Type"}, {@Code "@Author"}, etc.) is fixed, you
+can add your own reference types and change the formatting of existing types.
+@PP
+To do this you must be using your own setup file, as explained in
+Section {@NumberOf setup}. At the end of the setup file you will find
+this line:
+reference.print @Index { reference printing style }
+ref.style @Index @Code "@RefStyle"
+@ID @Code "@SysDatabase @RefStyle { refstyle }"
+This tells Lout to consult a database file of reference styles called
+{@Code "refstyle.ld"}. These are not references, they are formatting
+styles, one for each reference type. The @Code "Sys" in @Code "@SysDatabase"
+sys.database @Index @Code "@SysDatabase"
+means that this file is stored in the @I { Lout system database directory },
+system.database.dir @Index { system database directory }
+refstyle.ld.file @Index { @Code "refstyle.ld" file}
+which is where all the standard databases are kept. To change the
+formatting of a reference type, or to add your own types, you need to
+create your own reference styles database file by copying and modifying
+{@Code "refstyle.ld"}.
+@PP
+To find out the name of the Lout system database directory, type the
+Unix command
+@ID @Code "lout -V"
+Then, supposing that the Lout system database directory is
+{@Code "/usr/lout/data"}, type
+@ID @Code "cp /usr/lout/data/refstyle.ld mystyle.ld"
+to place a copy of the @Code "refstyle.ld" database file in your
+mystyle.ld.file @Index { @Code "mystyle.ld" file}
+directory, renaming it {@Code "mystyle.ld"}. Since @Code "refstyle.ld"
+is read-only, you may also need to change the mode of @Code "mystyle.ld"
+to be writable (by @Code "chmod +w mystyle.ld" in Unix). Now replace
+@ID @Code "@SysDatabase @RefStyle { refstyle }"
+at the end of your setup file by
+@ID @Code "@Database @RefStyle { mystyle }"
+and Lout will read its reference styles from @Code "mystyle.ld" instead
+of {@Code "refstyle.ld"}. Since the two are at
+present identical, this has changed nothing so far; but now any changes
+you make to @Code "mystyle.ld" will affect your document. Changing
+@Code "@SysDatabase" to @Code "@Database" makes Lout search your
+current directory for {@Code "mystyle.ld"}, whereas @Code "@SysDatabase"
+searches only the system directory.
+@PP
+In practice you will probably want to store your database of reference
+styles in some library directory, so that it can be used by
+many documents. A Unix pathname is appropriate for this:
+@ID @Code "@Database @RefStyle { \"/usr/jeff/lib/mystyle\" }"
+Quotes are needed because of the @Code "/" characters.
+@PP
+The database entries within @Code "refstyle.ld" and @Code "mystyle.ld"
+might look something like this:
+@ID @OneRow @Code {
+"{ Book @RefStyle @Style"
+" { @Reference&&reftag @Open"
+" {"
+" @Author. @I @Title. @Publisher, @Year."
+" }"
+" }"
+"}"
+}
+The meaning of the first two lines is beyond our scope, except that
+@Code "Book" on the first line means that this is the entry which
+defines how references of type @Code Book will be printed. Fortunately,
+apart from this one word these two lines are the same in every
+reference style entry so you don't need to understand them. The
+important part is in the middle:
+@ID @Code "@Author. @I @Title. @Publisher, @Year."
+The meaning should be clear: first print the author option and a full
+stop, then the title option and another full stop in italics, and so
+on. To change the formatting of books, change this object. To create
+a new reference type, copy the entire database entry, change @Code Book
+to a new name of your choice, and change the middle part. Don't forget
+to delete the index file @Code "mystyle.li" afterwards, if there is one,
+so that Lout knows to generate it afresh.
+@PP
+Although the entry shown above is perfectly viable, the real entry for
+@Code Book is much more complicated, in part because there are more
+options than those basic four, but mainly because the real entry goes
+to great lengths to do the right thing when options are omitted:
+@ID @Tab
+ vmargin { 0.45vx }
+ @Fmta { @Col @Code A ! @Col @Code B }
+{
+@Rowa A { "{ Book @RefStyle @Style" }
+@Rowa A { " { @Reference&&reftag @Open" }
+@Rowa A { " {" }
+@Rowa A { " { @Author. {}" } B { "} @If @Author" }
+@Rowa A { " { @I @Title" } B { "} @If @Title" }
+@Rowa A { " { @Word&&notitle" } B { "} @If @Not @Title" }
+@Rowa A { " { , @Pinpoint" } B { "} @If @Pinpoint" }
+@Rowa A { " { , @Word&&pages @NumSep @Pages" } B { "} @If @Pages" }
+@Rowa A { " { , @Word&&page @NumSep @Page" } B { "} @If @Page" }
+@Rowa A { " { . @TitleNote" } B { "} @If @TitleNote" }
+@Rowa A { " { . @HowPublished" } B { "} @If @HowPublished" }
+@Rowa A { " { . @Publisher" } B { "} @If @Publisher" }
+@Rowa A { " { . @Organization" } B { "} @If @Organization" }
+@Rowa A { " { . @Institution" } B { "} @If @Institution" }
+@Rowa A { " { , @Address" } B { "} @If @Address" }
+@Rowa A { " { . @Edition" } B { "} @If @Edition" }
+@Rowa A { " { , @Month @Year" } B { "} @If @Year @And @Month" }
+@Rowa A { " { , @Year " } B { "} @If @Year @And @Not @Month" }
+@Rowa A { " { ." } B { "} @If @True" }
+@Rowa A { " { {} URL @URL." } B { "} @If @URL" }
+@Rowa A { " { {} @Note" } B { "} @If @Note" }
+@Rowa A { " }" }
+@Rowa A { " }" }
+@Rowa A { "}" }
+}
+The meaning is that each object to the left of an @Code "@If" will be
+if. @Index @Code "@If"
+printed only if the condition to the right of the @Code "@If" is
+true. The condition may contain options, which are considered to be
+true if they are not omitted (non-empty), and it may contain {@Code "@And"},
+and. @Index @Code "@And"
+or. @Index @Code "@Or"
+not. @Index @Code "@Not"
+true. @Index @Code "@True"
+{@Code "@Or"}, {@Code "@Not"}, and @Code "@True" with the usual precedence
+and meaning. Sub-conditions may be enclosed in braces if desired, although
+it is best to keep the conditions as simple as possible given the
+complexity of the whole setup.
+@PP
+The objects subject to @Code "@If" are printed with no space preceding
+them; any space in the final print will be the result of space within
+them, not between them. This is why @Code "@If @True" is not redundant.
+@PP
+The object @Code "@Word&&notitle" produces @Code "No title" in the
+current language; @Code "@Word&&pages" produces {@Code pages} in the
+current language, and so on. Consult database @Code "standard.ld" for
+standard.ld.file @Index { @Code "standard.ld" file }
+other standard words and phrases, and page {@PageOf numsep} for
+{@Code "@NumSep"}.
+@End @Section
diff --git a/doc/user/ref_entr b/doc/user/ref_entr
new file mode 100644
index 0000000..63516b2
--- /dev/null
+++ b/doc/user/ref_entr
@@ -0,0 +1,293 @@
+@Section
+ @Title { Constructing database entries }
+ @Tag { entries }
+@Begin
+@PP
+Here is the complete, fixed list of options that you may give to the
+@Code "@Reference" symbol:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { "{ @Reference" }
+@Rowa
+ A { " @Tag {}" }
+ B { Used to cite this reference }
+@Rowa
+ A { " @Type {}" }
+ B { The type of reference, for example {@Code Book}, {@Code Article} }
+@Rowa
+ A { " @Abstract {}" }
+ B { Not used, intended to hold an abstract }
+@Rowa
+ A { " @Address {}" }
+ B { The address of a publisher, organization, or institution }
+@Rowa
+ A { " @Annote {}" }
+ B { Not used, intended for annotations }
+@Rowa
+ A { " @Author {}" }
+ B { The author(s) or editor(s) }
+@Rowa
+ A { " @Day {}" }
+ B { The day of the month, for newspaper articles }
+@Rowa
+ A { " @Edition {}" }
+ B { The edition, for example @Code "Second Edition" }
+@Rowa
+ A { " @HowPublished {}" }
+ B { How something strange has been published }
+@Rowa
+ A { " @InAuthor {}" }
+ B { The author of the work that the cited work appears within }
+@Rowa
+ A { " @InTitle {}" }
+ B { The title of the work that the cited work appears within }
+@Rowa
+ A { " @Institution {}" }
+ B { The institution or school }
+@Rowa
+ A { " @Journal {}" }
+ B { The journal name }
+@Rowa
+ A { " @Keywords {}" }
+ B { Not used, intended to hold keywords }
+@Rowa
+ A { " @Label {}" }
+ B { The label of a labelled reference }
+@Rowa
+ A { " @Month {}" }
+ B { The month of publication or writing }
+@Rowa
+ A { " @Note {}" }
+ B { Any additional helpful information }
+@Rowa
+ A { " @Number {}" }
+ B { The number of a technical report }
+@Rowa
+ A { " @Organization {}" }
+ B { The organization sponsoring the work }
+@Rowa
+ A { " @Page {}" }
+ B { Page number if only one, for example @Code "23" }
+@Rowa
+ A { " @Pages {}" }
+ B { Page numbers if more than one, for example @Code "23--47" }
+@Rowa
+ A { " @Pinpoint {}" }
+ B { A point or part of the work, for example @Code "Chapter VI" }
+@Rowa
+ A { " @Publisher {}" }
+ B { The publisher of the work }
+@Rowa
+ A { " @Title {}" }
+ B { The title of the work }
+@Rowa
+ A { " @TitleNote {}" }
+ B { Additional title information (series, editor, etc.) }
+@Rowa
+ A { " @TRType {}" }
+ B { The type of a technical report, for example @Code "Research Note" }
+@Rowa
+ A { " @URL {}" }
+ B { The URL of the reference }
+@Rowa
+ A { " @Volume {}" }
+ B { The volume of a journal }
+@Rowa
+ A { " @Year {}" }
+ B { The year of publication or writing }
+@Rowa
+ A { "}" }
+}
+Every reference may contain any of these options, although, depending
+on the {@Code "@Type"} option, only some will be printed. You can't give
+an option twice; in particular, multiple authors must be placed
+within one @Code "@Author" option, arranged as you want them to appear. Here
+is the complete set of values that you may give to the @Code "@Type" option:
+@ID @Tab
+ vmargin { 0.5vx }
+ @Fmta { @Col @Code A ! @Col @Code B ! @Col @Code C ! @Col @Code D }
+{
+ @Rowa
+ A { Book }
+ B { TechReport }
+ C { Article }
+ D { InBook }
+ @Rowa
+ A { Proceedings }
+ B { MastersThesis }
+ C {}
+ D { InProceedings }
+ @Rowa
+ A { PhDThesis }
+ B { Misc }
+ C {}
+ D {}
+}
+Each column represents one broad category of reference type: the first
+contains large works; the second contains small works not appearing
+within anything else (although possibly part of a series); the third
+contains small works appearing within an ongoing forum for such works;
+and the fourth contains small works appearing within large works. In each
+case, the reference may be to the work as a whole, or to one point or part
+of it (known as pinpointing).
+@PP
+Some care is needed when choosing the @Code "@Tag" option, since references
+are both cited and sorted by tag. It is best to choose a three-part
+tag consisting of the first author's surname and possibly initial, the
+year of publication, and a brief reminder of the contents:
+@ID @Code "@Tag { kingston1995lout.expert }"
+Keep to lower-case letters, since mixed cases confuse the sorting, and
+give the full four digits of the year to avoid trouble in the year
+2000. Multi-word tags are possible but not recommended.
+@PP
+Unusually for Lout, you can have unquoted @Code "/" and @Code "~"
+characters inside the @Code "@URL" option:
+@ID @Code "@URL { ftp://ftp.cs.su.oz.au/jeff/lout }"
+In fact it is better not to use quotes because then Lout will
+be able to break lines at @Code "/" characters, which is very useful
+since URLs tend to be long and prone to causing bad line breaks.
+@PP
+Since the types within each broad category are similar, our plan is to
+give one example of each and briefly note how the others differ. Here
+is a @Code Book entry showing all its options:
+book.ref.type @Index { @Code Book reference type }
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { homer.odyssey }"
+" @Type { Book }"
+" @Author { Homer }"
+" @Title { The Odyssey }"
+" @TitleNote { Translated by E. V. Rieu }"
+" @Pinpoint { Chapter VI }"
+" @Pages { 102--111 }"
+" @Page { 102 }"
+" @Publisher { Penguin Books }"
+" @Address { Harmondsworth, Middlesex }"
+" @Edition { Penguin Classics Edition }"
+" @Month { August }"
+" @Year { 1942 }"
+" @Note { The date of composition is unknown,"
+"but is thought to be about the tenth century BC. }"
+"}"
+}
+And here is what it produces:
+@ID @RefPrint homer.odyssey
+The only compulsory options are {@Code "@Tag"}, {@Code "@Type"}, and
+{@Code "@Title"}, and Lout will carefully adjust the formatting to the
+right thing when you omit others. A basic book would have just
+{@Code "@Tag"}, {@Code "@Type"}, {@Code "@Author"}, {@Code "@Title"},
+{@Code "@Publisher"}, and {@Code "@Year"} options.
+@PP
+@Code Proceedings is similar, except you
+proceedings.ref.type @Index { @Code Proceedings reference type }
+may have an @Code "@Organization" or @Code "@Institution" option for
+the sponsoring organization if you wish, and the author will either be
+absent or an editor:
+@ID @Code "@Author { P. W. Lamb, editor }"
+There is no option specifically for editors, translators, and so forth.
+@PP
+@Code PhDThesis is very similar again, with @Code "@Institution"
+phdthesis.ref.type @Index { @Code PhDThesis reference type }
+instead of {@Code "@Publisher"}, and the phrase `Ph.D. thesis'
+appearing by magic in the right spot. Like all words and phrases
+introduced automatically by Lout, it will be translated into the current
+language if this is not English.
+@PP
+Moving now to the second broad category, here is a typical {@Code TechReport}:
+techreport.ref.type @Index { @Code TechReport reference type }
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { christofides1976tsp }"
+" @Type { TechReport }"
+" @Author { Christofides, N. }"
+" @Title { Worst-case analysis of a new heuristic"
+"for the travelling salesman problem }"
+" @Number { 388 }"
+" @Institution { Graduate School of Industrial"
+"Administration, Carnegie-Mellon University }"
+" @Address { Pittsburgh, PA }"
+" @Year { 1976 }"
+"}"
+}
+Here is the result:
+@ID @RefPrint christofides1976tsp
+The two novelties here are the @Code "@Number" option, which is the
+number of the report, and the `Tech. Rep.' phrase. If you
+need some other phrase instead, use the @Code "@TRType" option:
+@ID @Code "@TRType { Programmer's Manual }"
+or whatever. The phrase will be `Master's Thesis' in the
+current language for type {@Code MastersThesis}, and absent in type
+mastersthesis.ref.type @Index { @Code MastersThesis reference type }
+misc.ref.type @Index { @Code Misc reference type }
+{@Code Misc}. You may use the pinpointing options ({@Code "@Pinpoint"},
+{@Code "@Page"}, and {@Code "@Pages"}) and {@Code "@TitleNote"},
+{@Code "@Month"}, and {@Code "@Note"} in the same way as for books.
+@PP
+Journal articles are referenced by journal name, volume, number, and
+page(s):
+article.ref.type @Index { @Code Article reference type }
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { kingston1993lout.design }"
+" @Type { Article }"
+" @Author { Jeffrey H. Kingston }"
+" @Title { The design and implementation of the"
+"Lout document formatting language }"
+" @Journal { Software---Practice and Experience }"
+" @Volume { 23 }"
+" @Pages { 1001--1041 }"
+" @Year { 1993 }"
+"}"
+}
+The result of this is
+@ID @RefPrint kingston1993lout.design
+All are optional, as usual. Notice that @Code "@Pages" and @Code "@Page"
+refer to the whole article so are not available for pinpointing here,
+but you may still use {@Code "@Pinpoint"}.
+@PP
+Finally, small works that appear within large works have @Code "@Author"
+inbook.ref.type @Index { @Code InBook reference type }
+and @Code "@Title" options for the work itself, and @Code "@InAuthor" and
+@Code "@InTitle" for the work that it appears within:
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { rieu1942intro }"
+" @Type { InBook }"
+" @Author { E. V. Rieu }"
+" @Title { Introduction to @I { The Odyssey } }"
+" @InAuthor { Homer }"
+" @InTitle { The Odyssey }"
+" @Publisher { Penguin }"
+" @Year { 1942 }"
+"}"
+}
+@Code "@InAuthor" would often be absent or an editor. The result is
+@ID @RefPrint rieu1942intro
+The other options are as for large works. Type @Code InProceedings is
+inproceedings.ref.type @Index { @Code InProceedings reference type }
+similar to {@Code InBook}.
+@PP
+A database usually has a long life, and some day it might find itself
+used in a document whose language is not the one its original compiler
+had in mind. For this reason, a truly meticulous compiler of database
+entries would enclose @I all language-specific options in
+@Code "@Language" symbols:
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { zimand1986size.sets.strings }"
+" @Type { Article }"
+" @Author { French @Language { M. Zimand } }"
+" @Title { English @Language { On the topological size of sets of random strings } }"
+" @Journal { German @Language { Zeitschr. f. math. Logik und Grundlagen d. Math. } }"
+" @Volume { 32 }"
+" @Pages { 81--88 }"
+" @Year { 1986 }"
+"}"
+}
+(My apologies to M. Zimand if he or she is not French.) This ensures
+correct hyphenation whatever the language of the document in which the
+reference appears.
+@End @Section
diff --git a/doc/user/ref_labe b/doc/user/ref_labe
new file mode 100644
index 0000000..1b8cc54
--- /dev/null
+++ b/doc/user/ref_labe
@@ -0,0 +1,65 @@
+@Section
+ @Title { Labelled (as opposed to numbered) references }
+ @RunningTitle { Labelled references }
+ @Tag { labelled }
+@Begin
+@PP
+Lout ordinarily assigns a number to each reference, and prints this
+labelled.refs @Index { labelled references }
+number beside the reference in the reference list and at the point(s)
+of citation. There is a way to make Lout use a label of your choice
+instead of a number for each reference. First change the following
+setup file options to the values shown (these options are explained
+in Section {@NumberOf changeref}):
+@ID @OneRow @Code {
+"@RefCiteLabels { @Label }"
+"@RefListLabels { @Label. }"
+"@RefListLabelWidth { 4.00f }"
+"@RefListSortKey { @Label }"
+}
+Then make sure that every reference you cite has a {@Code "@Label"} option:
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { kingston1995lout.expert }"
+" @Type { TechReport }"
+" @Label { Kin94 }"
+" ..."
+"}"
+}
+@Code "@Label" may contain several words, and even font changes, but not
+an arbitrary object.
+@PP
+The effect of these changes is that your references will now be labelled
+with their @Code "@Label" options instead of with numbers, and they will
+be sorted by label instead of by tag. However, tags are still used when
+citing.
+@PP
+The big problem with labels is that they vary from document to
+document, either because of a change of style or because the usual
+first few letters of the authors' names plus year has to be augmented
+with {@Code a}, {@Code b}, {@Code c} etc. to distinguish publications
+by the same authors in the same year. To help you overcome these
+problems, the @Code "$" symbol has a @Code "label" option:
+@ID @Code {
+"@Cite { $ label { Kin94a } kingston1995lout.expert, ... }"
+}
+The @Code "@Ref" and @Code "@ChapRef" symbols also have a @Code label
+option. If you use this option, it will be used to label the reference
+instead of the @Code "@Label" option from the @Code "@Reference" symbol
+(indeed, the @Code "@Reference" symbol need have no @Code "@Label" option
+in this case). But note that using @Code "label" does not itself give
+you labelled references; you get them with the setup file options as
+explained above.
+@PP
+If your labels turn out to be too wide for the space allowed for them
+in the reference list, you have two alternatives. One is to increase
+the @Code "@RefListLabelWidth" setup file option shown above, since it
+determines this space. The other is to change the @Code "@RefListFormat"
+setup file option to {@Code "DropLabels"}, which produces drop items:
+@ID @OneRow {
+@RawTaggedList
+@DTI { Kin94a. } @RefPrint kingston1995lout.expert
+@RawEndList
+}
+Then it won't matter how wide your labels are.
+@End @Section
diff --git a/doc/user/ref_sett b/doc/user/ref_sett
new file mode 100644
index 0000000..283cb11
--- /dev/null
+++ b/doc/user/ref_sett
@@ -0,0 +1,95 @@
+@Section
+ @Title { Setting up a bibliographic database }
+ @Tag { databases }
+@Begin
+@PP
+The basic idea is to store your references in a separate
+database.file @Index { database file }
+@I { database file }, in a form which does not include formatting
+details such as font changes. This makes it easy to use the same
+references in many documents, and it leaves the formatting to Lout. Here
+is an example of a reference as it would appear in a database file:
+@ID @OneRow @Code {
+"{ @Reference"
+" @Tag { vanleunen1992 }"
+" @Type { Book }"
+" @Author { Mary-Claire van Leunen }"
+" @Title { A Handbook for Scholars }"
+" @Publisher { Oxford }"
+" @Edition { Revised Edition }"
+" @Year { 1992 }"
+"}"
+}
+reference. @Index @Code "@Reference"
+@Code "@Reference" is a symbol, and {@Code "@Tag"}, {@Code "@Type"},
+{@Code "@Author"}, and so on are its options. The database file as
+a whole consists of a sequence of references, each enclosed in braces
+as shown.
+@PP
+The @Code "@Tag" option is compulsory: since you cite a reference by
+giving its tag, there must be one. The @Code "@Type" option is also
+type. @Index { @Code "@Type" option }
+compulsory, since it says whether the reference is to a book, a journal
+article, or whatever, and this determines what other options are
+required. Section {@NumberOf entries} describes all the types provided
+by Lout, and Section {@NumberOf refstyles} explains how to add your own.
+@PP
+Lout database file names must end in {@Code ".ld"}, so now suppose that
+you have made one called
+ld.file @Index { @Code ".ld" file }
+refs.ld.file @Index { @Code "refs.ld" file }
+@Code "refs.ld" and put it in the same directory as your document. Next,
+place
+@ID @Code "@Database @Reference { refs }"
+database. @Index @Code "@Database"
+at the start of your document, just before {@Code "@Doc"},
+{@Code "@Document"}, {@Code "@Report"}, or whatever. Alternatively,
+you may place it at the end of your setup file. It informs Lout that
+you might be referring to @Code "@Reference" symbols in database
+@Code "refs" (that is, in file {@Code "refs.ld"}).
+@PP
+If you want to maintain a central database, used by many documents, you
+won't want it in the same directory as any one of them. A Unix
+pathname will be more appropriate:
+@ID @Code "@Database @Reference { \"/usr/jeff/lib/refs\" }"
+or whatever. Quotes are needed because of the @Code "/" characters.
+@PP
+With the database file created and the @Code "@Database" line in place,
+you are ready to start citing references. The first time that the
+database.index.file @Index { database index file }
+index.file @Index { index file }
+database is used, Lout will create an @I { index file } whose purpose
+is to speed up the retrieval of your references. Thanks to this file
+you can have hundreds or even thousands of references in your database,
+without slowing Lout down very much. However, whenever you change your
+database file @I { you must remove its corresponding index file }, so
+that Lout knows to create it afresh.
+@FootNote {
+Depending on how it was installed on your system, Lout may be able to
+use the time of last modification of the database file and its index
+file to determine automatically whether the index file needs to be
+created afresh, thus saving you the trouble of removing it. You can
+find out whether this is true of your system by typing the command
+{@Code "lout -V"}.
+}
+ The index file is stored in the
+same directory as the database file, and it has the same name except
+that it ends in @Code ".li" rather than @Code ".ld" (e.g.
+li.file @Index { @Code ".li" file }
+{@Code "refs.li"}).
+@PP
+If a separate database file is not convenient for some reason, perhaps
+because you need a self-contained document in a single file, the
+@Code "@Reference" symbols may be incorporated into the document
+itself, anywhere that ordinary text may appear. Nothing will appear
+where they are typed in, but Lout will notice them and treat them as if
+they had come from a database file. In this case no @Code "@Database"
+symbol is needed unless you are referring to a database as well.
+@PP
+You may have multiple databases, like this:
+@ID @OneRow @Code {
+"@Database @Reference { myrefs }"
+"@Database @Reference { \"/usr/pub/refs/theoryrefs\" }"
+}
+Lout will search the databases in the order you list them.
+@End @Section
diff --git a/doc/user/str b/doc/user/str
new file mode 100644
index 0000000..0312dfb
--- /dev/null
+++ b/doc/user/str
@@ -0,0 +1,19 @@
+@Chapter
+ @Title { Adding Structure to Documents }
+ @Tag { structure }
+@Begin
+@BeginSections
+@Include { str_disp }
+@Include { str_list }
+@Include { str_foot }
+@Include { str_marg }
+@Include { str_theo }
+@Include { str_figs }
+@Include { str_larg }
+@Include { str_cros }
+@Include { str_cont }
+@Include { str_indx }
+@Include { str_colu }
+@Include { str_defs }
+@EndSections
+@End @Chapter
diff --git a/doc/user/str_colu b/doc/user/str_colu
new file mode 100644
index 0000000..b54a404
--- /dev/null
+++ b/doc/user/str_colu
@@ -0,0 +1,40 @@
+@Section
+ @Title { Multiple columns }
+ @Tag { columns }
+@Begin
+@PP
+You can change the number of columns of text per page, and the width of
+columns. @Index columns
+multiple.columns @Index { multiple columns }
+the gap between the columns, by changing these two setup file options:
+columnnumber. @Index @Code "@ColumnNumber"
+columngap. @Index @Code "@ColumnGap"
+@ID @OneRow @Code {
+"@ColumnNumber { 1 }"
+"@ColumnGap { 1.00c }"
+}
+If you are using your own setup file (Section {@NumberOf setup}), you can
+find and change them there. If not, @Code "@ColumnNumber" may be changed
+at the beginning of your document (Section {@NumberOf ordinary}).
+@PP
+@Code "@ColumnNumber" may be any number between 1 and 10, with default
+value 1 as shown, and @Code "@ColumnGap" may be any length (Section
+{@NumberOf objects}). The column width is derived from these options
+column.width @RawIndex { column width }
+column.width.pages @SubIndex { on pages }
+using the obvious formula
+@ID @Eq { columnwidth = { pagewidth - margins -
+({@Code "@ColumnNumber"} - 1) times {@Code "@ColumnGap"} }
+over @Code "@ColumnNumber"
+}
+You must ensure that this comes to something reasonable.
+@PP
+These two options do not apply to pages containing an index. For them
+there are similar setup file options called @Code "@IndexColumnNumber"
+and @Code "@IndexColumnGap" (Section {@NumberOf indexes}).
+@PP
+Most document types permit you to have multiple columns, but certain
+things will be kept full width regardless of the @Code "@ColumnNumber"
+option: figures and tables, chapter headings, and so on. The details
+vary with the document type, so are deferred to Chapter {@NumberOf types}.
+@End @Section
diff --git a/doc/user/str_cont b/doc/user/str_cont
new file mode 100644
index 0000000..148447e
--- /dev/null
+++ b/doc/user/str_cont
@@ -0,0 +1,83 @@
+@Section
+ @Title { Tables of contents }
+ @Tag { contents }
+@Begin
+@PP
+Lout takes note of the titles of all your large-scale structure symbols
+contents. @Index { contents, tables of }
+tables.of.contents. @Index { tables of contents }
+(Section {@NumberOf largescale}) and what pages they begin on, and it
+uses this information to produce a table of contents like the one at
+the start of the present document. It is totally automatic; you do
+nothing.
+@PP
+Some details of the appearance of the table of contents, including
+whether to make one or not, are controlled by options in the setup
+file. The default setting is to make one in books but not to in
+other types of documents, but by changing the setup file you can have
+a table of contents in any type of document.
+@PP
+Section @NumberOf setup describes setup files in general and how to
+change the options within them. The options relevant to tables of
+contents and their default values are:
+@ID @OneRow @Code {
+"@MakeContents { No }"
+"@ContentsGap { 0.20v }"
+"@ContentsGapAbove { 0.80v }"
+"@ContentsGapBelow { 0.00v }"
+"@ContentsLeader { .. }"
+"@ContentsLeaderGap { 4s }"
+"@ContentsRightWidth { 3f }"
+}
+The @Code "@MakeContents" option may be @Code Yes or {@Code No}, and
+makecontents. @Index @Code "@MakeContents"
+determines whether a table of contents is made or not. Its default
+value is @Code No but it is set to @Code Yes in the @Code book setup
+file.
+@PP
+@Code "@ContentsGap" determines how much vertical space to leave
+contentsgap. @Index @Code "@ContentsGap"
+above each line of the table of contents, in addition to the usual
+single line spacing; its value may be any length (Section
+{@NumberOf objects}). The default value, {@Code "0.20v"}, is twenty
+percent of the current inter-line spacing.
+@PP
+Some entries, such as those for chapters and appendices in books, are
+more important than others. @Code "@ContentsGap" does not apply to these
+entries; instead, @Code "@ContentsGapAbove" and @Code "@ContentsGapBelow"
+contentsgapabove. @Index @Code "@ContentsGapAbove"
+contentsgapbelow. @Index @Code "@ContentsGapBelow"
+are used above and below each of them, again in addition to the usual
+single line spacing.
+@PP
+@Code "@ContentsLeader" is the object which is repeated across the page
+contentsleader. @Index @Code "@ContentsLeader"
+to connect each entry with its page number; popular values are @Code ".."
+and @Code "." and the empty object. @Code "@ContentsLeaderGap" determines
+contentsleadergap. @Index @Code "@ContentsLeaderGap"
+how far apart these objects are; the default value, {@Code "4s"}, is
+four times the width of a space character. @Code "@ContentsLeaderGap"
+may be {@Code "0s"}, but only if @Code "@ContentsLeader" is non-empty.
+@PP
+@Code "@ContentsRightWidth" reserves some
+contentsrightwidth. @Index @Code "@ContentsRightWidth"
+space at the far right for page numbers. Any entry wide enough to
+intrude into this space is broken into two or more lines to keep it
+clear.
+@PP
+In addition to these options, each document type has options that
+determine which large-scale structure symbols will be listed in the
+table of contents. For example, among the options to the
+@Code "@BookSetup" symbol in the @Code book setup file are these:
+@ID @OneRow @Code {
+"@ChapterInContents { Yes }"
+"@SectionInContents { Yes }"
+"@SubSectionInContents { Yes }"
+"@SubSubSectionInContents { No }"
+"@AppendixInContents { Yes }"
+"@SubAppendixInContents { Yes }"
+"@SubSubAppendixInContents { No }"
+}
+Each may be either {@Code "Yes"} or {@Code "No"}; these default values
+produce entries for everything except sub-subsections and sub-subappendices.
+@End @Section
diff --git a/doc/user/str_cros b/doc/user/str_cros
new file mode 100644
index 0000000..7eb74c3
--- /dev/null
+++ b/doc/user/str_cros
@@ -0,0 +1,112 @@
+@Section
+ @Title { Cross references }
+ @Tag { cross }
+@Begin
+@PP
+Cross references are a useful feature of documents, but they are a
+cross.ref @Index { cross references }
+problem for authors. Suppose that at one point of your document
+you have
+@ID @OneRow @Code {
+"We hold these truths to be self-evident, that all men are created equal,"
+"that they are endowed by their Creator with certain inalienable Rights,"
+"that among these are Life, Liberty, and the pursuit of Happiness..."
+}
+and that at some other point, earlier or later, you have
+@ID @OneRow @Code {
+"The anti-slavery cause, founded as it was on the Declaration"
+"of Independence (page 181), could appeal to patriotic as"
+"well as moral sentiments..."
+}
+This is a @I { cross reference }, and the problem is that as the document
+is revised, the Declaration of Independence might move to page 185, and
+the cross reference must be found and changed.
+@PP
+Lout has a simple solution to this problem. Instead of writing the
+pageof. @Index @Code "@PageOf"
+page number, write
+@ID @OneRow @Code {
+"The anti-slavery cause, founded as it was on the Declaration"
+"of Independence (page @PageOf { decl.of.ind }), could appeal to"
+"patriotic as well as moral sentiments..."
+}
+instead, and at the point referred to, write
+pagemark. @Index @Code "@PageMark"
+@ID @OneRow @Code {
+"We @PageMark decl.of.ind hold these truths to be self-evident, that..."
+}
+Inserting @Code "@PageMark decl.of.ind" will not affect the result,
+but Lout makes a note of the number of the page on which the word
+preceding it appears, and inserts that number in place of
+{@Code "@PageOf decl.of.ind"}. The tag, {@Code "decl.of.ind"}, may be
+tag. @Index { tag }
+any simple word (actually Lout will accept a multi-word tag, but they
+are very inconvenient and better avoided). The braces are there, as
+usual, to control grouping: we don't want the following punctuation
+characters in the tag.
+@PP
+One tag called @Code "last.page" is created automatically
+"last.page.tag" @Index { @Code "last.page" tag }
+for you. @Code "@PageOf last.page" gives the number of the last page
+of the document. For example, the result for this document is
+{@PageOf last.page}.
+@PP
+Cross referencing also applies to large-scale structure symbols such as
+@Code "@Chapter" and @Code "@Section" (any symbol with a @Code "@Title"
+option), as well as @Code { "@FootNote" }, @Code { "@EndNote" },
+@Code { "@Figure" }, @Code { "@Table" }, the numbered display
+symbols, and @Code "@ListItem" and @Code "@DropListItem" (but not
+@Code "@TagItem" and {@Code "@DropTagItem"}). Each of these symbols
+has a @Code "@Tag" option:
+tag.sym @Index @Code "@Tag"
+@ID @OneRow @Code {
+"@Section"
+" @Title { Cross references }"
+" @Tag { cross }"
+"@Begin"
+"@PP"
+"Cross references are a useful ..."
+}
+Now you can use the @Code "@PageOf" symbol to find the
+number of the page on which the symbol's result begins, and the
+@Code "@NumberOf" symbol to find its number:
+numberof. @Index @Code "@NumberOf"
+@ID @OneRow @Code {
+"For further information on this point, please consult"
+"Section @NumberOf cross (page @PageOf { cross })."
+}
+produces
+@QD {
+For further information on this point, please consult
+Section @NumberOf cross (page @PageOf { cross }).
+}
+Like all tags, the value of the @Code "@Tag" option should be a simple
+word (although Lout does accept multi-word tags). Cross referencing of
+list items yields just the number of the item, in Arabic, Roman, or
+whatever; it does not include the surrounding parentheses or other
+decorations introducted by the list's @Code "style" option.
+@PP
+To work cross references out, Lout has to process your document more
+multiple.runs @Index { multiple runs, why needed }
+than once, storing information between runs in special files it
+creates whose names end in @Code ".li" and {@Code ".ld"}. A complex
+document like this Guide requires five runs, but since every run
+produces a perfectly good PostScript file suitable for proof reading,
+in fact you need two runs to start with and one run per cycle of
+revision thereafter, only one more than would have been necessary
+in any case.
+@PP
+The cross referencing system assumes that each Unix directory contains
+directories @Index { directories, Lout files and }
+only one Lout document (possibly spread over many files). If you keep
+several documents in one directory you can turn off the cross referencing
+with the @Code "-s" flag:
+@ID @Code "lout -s simple > simple.ps"
+Since this will cause question marks to replace footnote and section
+numbers, and other products of cross referencing, it is only feasible
+for simple documents. Alternatively, you can reset cross referencing
+when switching from one document to another, by removing file
+lout.li @Index { @Code lout.li file }
+{@Code "lout.li"}. You should also remove this file if your document
+changes radically -- from a report to a book, say.
+@End @Section
diff --git a/doc/user/str_defs b/doc/user/str_defs
new file mode 100644
index 0000000..71bd71e
--- /dev/null
+++ b/doc/user/str_defs
@@ -0,0 +1,134 @@
+@Section
+ @Title { Defining new symbols }
+ @Tag { definitions }
+@Begin
+@PP
+Whenever you find yourself typing the same thing repeatedly, you can
+definitions. @Index definitions
+save a lot of time by defining your own personal symbol to stand for that
+thing. For example, suppose you type your company's name, @Batlow,
+frequently. You can define your own symbol, {@Code "@Batlow"} say,
+so that
+@ID @Code {
+"Concerning your crate supply contract with @Batlow, @Batlow wishes to ..."
+}
+produces
+@ID {
+Concerning your crate supply contract with @Batlow, @Batlow wishes to ...
+}
+You will never have to type @Batlow again.
+@PP
+The method is to create a file called @Code "mydefs" in your current
+mydefs.file @Index { @Code mydefs file }
+directory, containing definitions like this:
+@ID @OneRow @Code {
+"import @BasicSetup"
+"def @Batlow { Batlow Food Distributors Pty. Ltd. }"
+}
+The meaning of the first line, {@Code "import @BasicSetup"}, will
+be explained shortly. After that comes @Code "def" for `define,'
+then the name of the symbol being defined, then its value between
+braces. So this example defines a symbol called @Code "@Batlow" to
+stand for the object following it between braces. Lout will read this
+file during its setup phase (Section {@NumberOf setup}).
+@PP
+Your symbols may have any names you wish made from letters and
+{@Code "@"}. However, it is good practice to have exactly one
+{@Code "@"}, at the start, and to choose distinctive names that
+have no chance of being the same as the name of any existing
+symbol. @Code "@Batlow" is a good choice, for example.
+@PP
+The object between braces is quite arbitrary; in particular, it may
+contain symbols. For example, suppose you frequently need a small grey box:
+@ID @OneRow @Code {
+"import @BasicSetup"
+"def @GreyBox { @Box paint { lightgrey } {} }"
+}
+This defines a @Code "@GreyBox" symbol that produces {@GreyBox}. Most
+of the symbols in this guide are from the @I {BasicSetup package},
+import. @Index @Code import
+which is why @Code "import @BasicSetup" is required: it makes
+these symbols available to the definition, and can actually be omitted
+before definitions like the one for @Code "@Batlow" which do not use
+any symbols. However it does no harm, so we place it in front of every
+definition as a matter of course.
+@FootNote {
+Later chapters of this guide introduce specialized symbols for producing
+tables, equations, diagrams, graphs, and computer programs. You need a
+different @Code "import" clause when using those symbols within a
+definition, because they are not from the BasicSetup package. Examples
+may be found in the chapters concerned.
+}
+@PP
+Now suppose you frequently need a grey box, but enclosing different
+things: @GreyBox ENTRY one moment, @GreyBox EXIT the next. You could
+try omitting the @Code "{}" from the definition above, but that does
+not work, because Lout notices the missing object while reading the
+definition, and inserts an empty object in the usual way (Section
+{@NumberOf empty}).
+@PP
+However, there is a way to define a @Code "@GreyBox" symbol so that
+@Code "@GreyBox ENTRY" produces {@GreyBox ENTRY}, @Code "@GreyBox EXIT"
+produces {@GreyBox EXIT}, and so on:
+@ID @OneRow @Code {
+"import @BasicSetup"
+"def @GreyBox right x { @Box paint { lightgrey } x }"
+}
+The addition of @Code "right x" immediately after the symbol's name
+places @Code "@GreyBox" into that class of symbols, like {@Code "@I"}
+and @Code {"@Box"}, which consume and transform the object to their
+right. The @Code "x" in @Code "right x" means that the object to the
+right will be referred to as @Code "x" within the definition. So in
+@ID @Code "@GreyBox { Hello world }"
+@Code "@GreyBox" consumes the following object, which becomes
+{@Code "x"}, so that the value is
+@ID @Code "@Box paint { lightgrey } { Hello world }"
+which produces @GreyBox { Hello world }.
+@PP
+It is a good principle to choose symbol names that refer to what the symbol
+is for, rather than how it does what it does. Here is a good example:
+@ID @OneRow @Code {
+"import @BasicSetup"
+"def @Poetry right x { lines @Break @I x }"
+}
+This kind of name is very pleasant to use, since it allows you to
+forget about what is going on behind the scenes:
+@ID @OneRow @Code {
+"@IndentedDisplay @Poetry {"
+"Teach me to hear Mermaides singing,"
+"Or to keep off envies stinging,"
+" And finde"
+" What winde"
+"Serves to'advance an honest minde."
+"}"
+}
+Most of Lout's symbols follow this principle.
+@PP
+You can define symbols that consume the object to their left as well
+as the object to their right, as the {@Code "@Font"}, {@Code "@Break"},
+and {@Code "@Colour"} symbols do:
+@ID @OneRow @Code {
+"import @BasicSetup"
+"def @HeadingBox left x right y"
+"{ @Box { @CentredDisplay @Heading x y }"
+"}"
+}
+This definition occupies several lines only because it is long; as
+usual, end of line is the same as one space. Now
+@ID @OneRow @Code {
+"Cheating @HeadingBox {"
+"The Department uses assignments ... of that student alone."
+"}"
+}
+is much easier to type than the equivalent example in Section
+{@NumberOf boxes}. The result is the same:
+@QD Cheating @HeadingBox {
+The Department uses assignments both as a teaching device and as a
+major component of its assessment of each student. It therefore
+requires that all programs, exercises etc. handed in bearing an
+individual student's name be the work of that student alone.
+}
+Do not use a paragraph, display, or list symbol at the beginning or end
+of a definition, since the result is not what people who do it are
+hoping for.
+@End @Section
diff --git a/doc/user/str_disp b/doc/user/str_disp
new file mode 100644
index 0000000..4634103
--- /dev/null
+++ b/doc/user/str_disp
@@ -0,0 +1,94 @@
+@Section
+ @Title { Displays }
+ @Tag { displays }
+@Begin
+@PP
+The @Code "@Display" symbol displays the following object in the centre
+displays. @Index displays
+display. @Index @Code "@Display"
+of the page or column:
+@ID @Code "@Display @I { Invitation to Afternoon Tea }"
+has result
+@Display @I { Invitation to Afternoon Tea }
+Space is inserted automatically above and below the display; no
+paragraph symbols are needed.
+@PP
+To make the display appear at the left margin instead of centred, use
+leftdisplay. @Index @Code "@LeftDisplay"
+{@Code "@LeftDisplay"} instead of {@Code "@Display"}. To make an indented
+display, use {@Code "@IndentedDisplay"} or {@Code "@QuotedDisplay"};
+indenteddisplay. @Index @Code "@IndentedDisplay"
+quoteddisplay. @Index @Code "@QuotedDisplay"
+the latter indents at the right margin as well as at the left. There are
+also @Code "@CentredDisplay" and @Code "@CenteredDisplay" symbols which
+centreddisplay. @Index @Code "@CentredDisplay"
+centereddisplay. @Index @Code "@CenteredDisplay"
+centre the display just like {@Code "@Display"} does, and
+rightdisplay. @Index @Code "@RightDisplay"
+@Code "@RightDisplay" which right-justifies the display.
+@PP
+If you use displays frequently you might prefer abbreviated forms of
+their names. These are made from @Code "@" and the capital letters of
+d. @Index @Code "@D"
+ld. @Index @Code "@LD"
+id. @Index @Code "@ID"
+qd. @Index @Code "@QD"
+cd. @Index @Code "@CD"
+the full name: {@Code "@D"}, {@Code "@LD"}, {@Code "@ID"}, {@Code "@QD"},
+and {@Code "@CD"}. Owing to a clash with the name of another symbol,
+{@Code "@RightDisplay"} has no abbreviation.
+@PP
+Displays often need to be set using a different font, paragraph
+breaking style, and so on to the surrounding text. It's best to set
+out such displays like this:
+@ID @OneRow @Code {
+"@CentredDisplay @I clines @Break {"
+"Invitation to Afternoon Tea"
+"with"
+"Mr. and Mrs. Gilbert Newington-Smith"
+"}"
+}
+You can have as many of these symbols as you like, including specialized
+ones like {@Code "@CurveBox"} and {@Code "@Tbl"}. The only rule is that
+the display symbol must come first: @Code "@I @Display ..." is wrong.
+@PP
+It's not a good idea to have one display immediately followed by
+another one, because there will be too much vertical space between
+them. Use a list instead (Section {@NumberOf lists}). Displays
+at the ends of paragraphs look awkward and are best avoided.
+@PP
+A display may come out partly on one page or column and partly on
+the next, if it has places where it obviously can be broken in two. For
+example, a display which is an ordinary paragraph of text might be
+broken in two between any two lines. To force a display to keep
+together on one page or column, use the @Code "@OneRow" symbol like
+this: @Code "@Display @OneRow { ... }".
+@PP
+Other display symbols produce aligned and numbered displays, and raw
+displays (i.e. without vertical space). Although these can display any
+object as usual, in practice they are used for mathematics, so they are
+described in Section {@NumberOf mathdisplays}.
+@PP
+Three setup file options control the appearance of displays. (For a
+general introduction to setup files and their options, consult
+Section {@NumberOf setup}.) Here they are with their default values:
+@ID @OneRow @Code {
+"@DisplayGap { 1.00v }"
+"@DefaultIndent { 0.5rt }"
+"@DisplayIndent { 2.00f }"
+}
+@Code "@DisplayGap" is the amount of vertical space inserted before and
+display.gap. @Index @Code "@DisplayGap"
+after displays, and may be any length (Section {@NumberOf objects}). The
+default value, @Code {"1.00v"}, is equal to the current inter-line spacing.
+@PP
+@Code "@DefaultIndent" is the indent produced by
+default.indent @Index @Code "@DefaultIndent"
+{@Code "@Display"}; {@Code "0.5rt"} produces centring, although why it does
+so is beyond our scope
+@Cite { $kingston1995lout.expert }. @Code "@DisplayIndent" is the
+display.indent. @Index @Code "@DisplayIndent"
+indent for {@Code "@IndentedDisplay"}, and used at both margins by
+{@Code "@QuotedDisplay"}. Its default value, {@Code "2.00f"}, is twice
+the current font size.
+@End @Section
diff --git a/doc/user/str_figs b/doc/user/str_figs
new file mode 100644
index 0000000..285e097
--- /dev/null
+++ b/doc/user/str_figs
@@ -0,0 +1,270 @@
+@Section
+ @Title { Figures and tables }
+ @Tag { figures }
+@Begin
+@PP
+Figures are created in a similar way to footnotes:
+figures. @Index { figures }
+@ID @OneRow @Code {
+"@Figure"
+" @Caption { Basser Lout }"
+"@Diag vstrut { yes } treehsep { 1c } {"
+" @HTree { @Box Lout @FirstSub arrow { yes } @Box PostScript }"
+"}"
+}
+The @Code "@Figure" symbol places the following object (which in this example is
+figure. @Index @Code "@Figure"
+created using the advanced graphics features of Chapter {@NumberOf diagrams})
+at the top of the following column or page,
+@Figure
+ @Tag { figex }
+ @Caption { Basser Lout }
+@Diag vstrut { yes } treehsep { 1c } {
+ @HTree { @Box Lout @FirstSub arrow { yes } @Box PostScript }
+}
+labelled by the @Code "@Caption" option and automatically numbered. You
+captions. @RawIndex { captions }
+captions.figures @SubIndex { in @Code "@Figure" and @Code "@Table" }
+can see this example at the top of page {@PageOf figex}. Tables are
+table. @Index @Code "@Table"
+obtained in the same way using {@Code "@Table"} instead of {@Code "@Figure"}.
+@PP
+@Code "@Figure" and @Code "@Table" each have an @Code "@InitialLanguage"
+option which determines the language of the figure or table. If this is
+omitted, the language of the document as a whole will be used, not the
+language where the figure or table occurs.
+@PP
+The two symbols also have a @Code "@CaptionPos" option, which determines
+whether the caption appears above or below the figure or table. The
+default is {@Code "Below"}, the alternative is {@Code "Above"}.
+@PP
+The question of what is a suitable running header to print on pages
+containing figures and tables (possibly from different sections) is a
+rather awkward one. On any page with a figure or table at the top, Lout
+uses whatever running header was appropriate for the text on the previous
+page. In practice it seems to work quite well.
+@PP
+If your document contains many figures, large figures, or multi-page
+figures, you are likely to encounter cases where Lout's assignment of
+figures to pages is not pleasing. In that case, you can improve things
+by moving the figures around within the body text, and by using the
+@Code "@Location" option of the @Code "@Figure" symbol, which determines
+location. @Index @Code "@Location"
+where the figure will appear. Its possible values are
+@DP @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@FirstRowa
+ A { PageTop }
+ B { The figure will appear at the top of the following page, occupying
+the full page width; or, if there is insufficient space there (owing to other
+figures already present), at the top of the first subsequent page with
+sufficient space. }
+@Rowa
+ A { EvenPageTop }
+ B { Like @Code PageTop except that the first page of the figure
+or table will be an even-numbered (left-hand or verso) page -- useful
+for double-pace spreads. }
+@Rowa
+ A { FullPage }
+ B { Like {@Code PageTop} except that nothing else will appear on the
+same page as the figure except the usual running headers and footers, and
+possibly other @Code FullPage figures and tables.
+@FootNote { This location replaces the @Code "@FullPage" option of
+earlier versions of Lout, which has been withdrawn. }
+}
+@Rowa
+ A { EvenFullPage }
+ B { Like {@Code FullPage} except that the first page of the figure
+or table will be an even-numbered (left-hand or verso) page, like
+{@Code EvenPageTop}.
+}
+@Rowa
+ A { PageFoot }
+ B { The figure will appear at the foot of the current page, occupying
+the full page width; or, if there is insufficient space there, at the top
+of the following page and so on as for {@Code PageTop}. }
+@Rowa
+ A { ColTop }
+ B { The figure will appear at the top of the following column,
+occupying the column width; or, if there is insufficient space there,
+at the top of the first subsequent column with sufficient space. This
+is different from @Code PageTop only in multi-column documents. }
+@Rowa
+ A { ColFoot }
+ B { The figure will appear at the foot of the current column,
+occupying the column width; or, if there is insufficient space there, at
+the top of the following column as for {@Code ColTop}. This differs
+from @Code PageFoot only in multi-column documents. }
+@Rowa
+ A { ColEnd }
+ B { The figure will appear in a column at the end of the document
+(or chapter, appendix etc. in the case of books). There is no
+@Code PageEnd value corresponding to {@Code ColEnd}. }
+@Rowa
+ A { AfterLine }
+ B { The figure will appear as a column-width display immediately after
+the line in the final printed document in which it occurs. }
+@Rowa
+ A { TryAfterLine }
+ B { The same as @Code {AfterLine} unless there is insufficient space
+in the current column to hold the displayed figure, in which case it
+switches to @Code {ColTop} instead. }
+@Rowa
+ A { Display }
+ B { The figure will appear as a display at the point it occurs. There
+is no @Code TryDisplay value corresponding to {@Code Display}. }
+@Rowa
+ A { Raw }
+ B { The figure will appear as an object, with no extra spacing, at
+the point it occurs. This is useful, for example, for getting two figures
+side by side in one display: use a displayed table containing two raw
+figures. }
+}
+@DP
+The @Code "@Table" symbol also has this option. The default location is
+{@Code "PageTop"}, but this can be changed by changing the
+figurelocation. @Index @Code "@FigureLocation"
+tablelocation. @Index @Code "@TableLocation"
+@Code "@FigureLocation" and @Code "@TableLocation" setup file options.
+@PP
+The numbers assigned to figures and tables, and their ordering in any list
+of figures or tables, is based on where they appear in the final printed
+document, not on where they appear in the source files. This is better for
+the reader in the unusual case of a fixed figure being overtaken by a
+floating one. If a section number is printed as part of a figure number,
+and the figure floats forward from one section into another, the figure
+number will reflect the later section, not the earlier one as it should.
+You can fix this problem by moving the figure to an earlier point in
+the section, or by not having section numbers in figures (see below).
+@PP
+@Code "@Figure" and @Code "@Table" each have a @Code "@OnePage" option,
+whose value may be @Code "Yes" or {@Code No}. Setting @Code "@OnePage"
+to @Code Yes causes the figure or table and its caption to be kept
+together on one page or column (enclosing the body of the figure or table
+in @Code "@OneRow" would have the same effect except that it would not
+incorporate the caption, hence the need for this option). You need to be
+certain that the whole assembly will fit on one page when setting
+@Code "@OnePage" to {@Code "Yes"}.
+@PP
+The @I default value of the @Code "@OnePage" option for each figure or
+table depends on the value of its @Code "@Location" option as follows:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col ! @Col @Code B }
+{
+@Rowa
+ A { No }
+ B { PageTop ColTop ColEnd Raw }
+@Rowa
+ A { Yes }
+ B { PageFoot ColFoot Display AfterLine TryAfterLine }
+}
+These choices represent a guess that figures that the user is happy to
+see at the page foot or in a display are probably going to be small enough
+to keep on one page, but that other figures may not be. In any case, these
+are only default values and you may set @Code "@OnePage" as you wish.
+@PP
+By default, the body of the figure will be centred, and this usually looks
+best, at least for small figures. @Code "@Figure" and @Code "@Table" each
+have a @Code "@Format" option which controls this format:
+@ID @Code {
+"@Figure"
+" @Format { @CurveBox @HExpand @CC @Body }"
+}
+Within the @Code "@Format" option, the @Code "@Body" symbol stands for the
+body of the figure or table; it must appear exactly once. Display symbols
+such as @Code "@CentredDisplay" may not be applied to the {@Code "@Body"}
+symbol; instead, there are {@Code "@II"}, {@Code "@QQ"}, {@Code "@CC"}, and
+{@Code "@RR"}, which indent, quote, centre, or right-justify the following
+object. The example just given centres the figure inside a @Code "@CurveBox"
+which is horizontally expanded (by the @Code "@HExpand" symbol, which is not
+specific to figures) to occupy the full width of the page or column, rather
+than fitting snugly around the figure.
+@PP
+The @Code "@Format" option applies to just the body of the figure, not to
+its caption. It applies to each page or column of a multi-page or
+multi-column figure; for example, the above format will draw a box around
+each page of a multi-page figure, and each page will be separately centred.
+@Code "ColEnd" and @Code "Raw" figures are exceptions to this rule: they
+always apply the format to the figure as a whole. This means that you cannot
+box multi-page figures of these two types, since the result would be an
+unbreakable object too large to fit on one page.
+@PP
+There are setup file options for controlling the appearance of figures and
+tables. Only those for figures will be given here, since the ones for tables
+are identical except that @Code Table replaces @Code Figure in their
+names. Here they all are:
+@FootNote { These are as of Version 3.15 and above. Prior to that
+there were {@Code "@CaptionFont"}, {@Code "@CaptionBreak"}, and
+{@Code "@CaptionFormat"} options, and {@Code "@CaptionFormat"}
+took values that did not include the @Code "caption" symbol. }
+@ID @OneCol @Code {
+"@FigureLocation { PageTop }"
+"@FigureFormat { @CC @Body }"
+"@FigureWord { figure }"
+"@FigureNumbers { Arabic }"
+"@FigureCaptionPos { Below }"
+"@FigureCaptionFont { }"
+"@FigureCaptionBreak { }"
+"@FigureCaptionFormat { @B { word @NumSep number. &2s } @Insert caption }"
+"@MakeFigureContents { No }"
+"@FigureListWord { figurelist }"
+}
+@Code "@FigureLocation" is the default value of the @Code "@Location"
+option of figures. Changing it, for example to
+{@Code "FullPage"}, changes the location of all figures at
+once. You may still override this location for any individual figure,
+however, by giving that figure a @Code "@Location" option. In a similar way,
+figureformat. @Index @Code "@FigureFormat"
+tableformat. @Index @Code "@TableFormat"
+@Code "@FigureFormat" is the default value of the @Code "@Format"
+option (this shows why figures are centred by default) and
+figurecaptionpos. @Index @Code "@FigureCaptionPos"
+tablecaptionpos. @Index @Code "@TableCaptionPos"
+@Code "@FigureCaptionPos" is the default value of {@Code "@CaptionPos"}.
+@PP
+@Code "@FigureWord" determines the word that is part of the figure
+number. The default value, {@Code figure}, produces `Figure' or its
+equivalent in the current language; any other value produces itself.
+@PP
+@Code "@FigureNumbers"
+figurenumbers. @Index @Code "@FigureNumbers"
+tablenumbers. @Index @Code "@TableNumbers"
+determines whether figures are
+numbered automatically or not; the choices are
+{@Code "None"}, {@Code "Arabic"}, {@Code "Roman"}, {@Code "UCRoman"},
+{@Code "Alpha"}, and {@Code "UCAlpha"}. Depending on the document
+type and where the figure or table occurs, the number might include
+a chapter number as well. This is determined by options in the
+setup file for your document type; for example,
+@ID @Code "@SectionNumInFigures { No }"
+appears in the @Code "report" setup file, and means that a section
+number will not appear in the figure number (unless you change the
+option to {@Code Yes}).
+@PP
+@Code "@FigureCaptionFont" and @Code "@FigureCaptionBreak" determine the
+font and paragraph breaking style used in the captions of figures. Their
+default values are empty, meaning to use the initial font and break styles;
+but, for example, you could have
+@ID @Code "@FigureCaptionFont { -2p }"
+in your setup file to get a smaller font size in your captions.
+@PP
+The @Code "@FigureCaptionFormat" option determines the format of the
+caption. Within it, the symbol @Code word stands for the `Figure'
+word as defined by {@Code "@FigureWord"}); the @Code number
+symbol stands for the number of the figure; and @Code caption stands
+for the body of the caption. The default value shown above prints
+the word and number and a period in bold, inserted together with a
+gap of two spaces into the first paragraph of the caption. If you
+don't use the @Code "@Insert" symbol you'll run into problems with
+multi-paragraph captions.
+@PP
+You can get a list of figures at the start of your document by setting
+the @Code "@MakeFigureContents" setup file option to {@Code Yes}. The
+format of these lists will follow the format of tables of contents. These
+lists are only available in books (Section {@NumberOf books}). The
+title printed above the list of figures is determined by the
+@Code "@FigureListWord" option; the default value, {@Code "figurelist"},
+produces `List of Figures' or its equivalent in the current language; any
+other value produces itself.
+@End @Section
diff --git a/doc/user/str_foot b/doc/user/str_foot
new file mode 100644
index 0000000..70e50a2
--- /dev/null
+++ b/doc/user/str_foot
@@ -0,0 +1,150 @@
+@Section
+ @Title { Footnotes and endnotes }
+ @Tag { footnotes }
+@Begin
+@PP
+A footnote is created by typing
+footnote. @Index @Code "@FootNote"
+@ID @Code "@FootNote { Like this. }"
+after the word that the footnote refers to. It will be numbered
+automatically and placed at the foot of the page or column;
+@FootNote { Like this. }
+or, if space there is insufficient, it may start on or run onto the
+following page or column. The footnote must be enclosed in braces.
+@PP
+The @Code "@FootNote" symbol has a @Code "@Location" option which
+determines where it goes:
+@ID @Code {
+"@FootNote"
+" @Location { ColFoot }"
+"{ ... }"
+}
+places the footnote at the bottom of the column, and
+@ID @Code {
+"@FootNote"
+" @Location { PageFoot }"
+"{ ... }"
+}
+places it at the bottom of the current page, occupying the full page
+width even in a multi-column document (this is occasionally
+useful for footnotes to headings). Of course, in a single-column
+document there is no difference anyway. The default value of the
+@Code "@Location" option is {@Code "ColFoot"}.
+@PP
+Endnotes work in exactly the same way as footnotes, except that the
+endnote. @Index @Code "@EndNote"
+symbol to use is @Code "@EndNote" and they appear either at the end
+of the document or at the end of some major part of it, depending on
+the type of document (Chapter {@NumberOf types}). Endnotes are
+always column width and so have no @Code "@Location" option.
+@PP
+Footnotes are usually labelled with consecutive Arabic numberals, but
+you can tell Lout to label a footnote (not an endnote) with something
+else, like this:
+@ID @OneRow @Code @Verbatim {
+@FootNote
+ @Label { @Dagger }
+{ This footnote will be labelled with a dagger, not a number. }
+}
+whose result should appear at the bottom of this page.
+@FootNote
+ @Label { @Dagger }
+{ This footnote will be labelled with a dagger, not a number. }
+Symbols commonly used for footnote labels include @Code "@Dagger" (@Dagger),
+@Code "@DaggerDbl" (@DaggerDbl), @Code "@Star" (@Star),
+@Code "@SectSym" (@SectSym), and @Code "@ParSym" (@ParSym),
+but you can use any object. If you want no label at all,
+use an empty object like this:
+@ID @OneRow @Code @Verbatim {
+@FootNote
+ @Label {}
+}
+Footnotes with a @Code "@Label" option are excluded from the automatic
+numbering that applies to other footnotes.
+@PP
+The language of a footnote or endnote will be the language of the
+document as a whole. This is not necessarily the same as the
+current language at the point where the footnote or endnote occurs,
+or even the language of the enclosing large-scale structure symbol. It
+may be necessary to enclose the body of the footnote in a language
+symbol, like this:
+@ID @Code "@FootNote { French @Language { ... } }"
+Doing it the other way ({@Code "French @Language @FootNote ..."}) is
+not effective.
+@PP
+A footnote attached to the very last line of a chapter or appendix of
+a book occasionally runs onto the first page of the following chapter
+or appendix, and this looks very poor. If this happens, the solution
+is to place an @Code "@LP" after the last line (including the footnote).
+@PP
+In the rare case where more than one footnote is attached to one word,
+use @Code "@AnotherFootNote" for the second and subsequent footnotes:
+anotherfootnote. @Index @Code "@AnotherFootNote"
+@ID @Code {
+"something or other."
+"@FootNote { The first footnote. }"
+"@AnotherFootNote { The second footnote. }"
+}
+This ensures that the superscripts will be separated by
+commas, as convention demands.
+@PP
+The setup file contains a number of options for controlling the
+appearance of footnotes. (See Section @NumberOf setup for a general
+introduction to setup files and their options.) Here are all the
+options, with their default values:
+@ID @OneRow @Code {
+"@FootNoteThrough { No }"
+"@FootNoteLocation { ColFoot }"
+"@FootNoteNumbers { Arabic }"
+"@FootNoteFont { 0.80f }"
+"@FootNoteBreak { 1.20fx }"
+"@FootNoteFormat { { number &0.05f } @Insert body }"
+"@FootLen { 2.00c }"
+"@FootAboveGap { 1.00v }"
+"@FootGap { 0.20c }"
+}
+There are also setup file options for controlling endnotes. Since
+they are quite similar to the ones for footnotes, we won't say any
+more about them here.
+@PP
+@Code "@FootNoteThrough" may be @Code "Yes" or @Code { "No" };
+footnotethrough. @Index @Code "@FootNoteThrough"
+@Code "Yes" means that the footnotes are numbered continuously
+through the document (or through each chapter in the case of books);
+@Code "No" means that the numbering begins afresh on each
+page. @Code "@FootNoteLocation" determines the default value of
+footnotelocatin. @Index @Code "@FootNoteLocation"
+the @Code "@Location" option mentioned above; it may be either
+@Code "ColFoot" or {@Code "PageFoot"}. @Code "@FootNoteNumbers"
+determines how the footnotes are numbered;
+footnotenumbers. @Index @Code "@FootNoteNumbers"
+it may be {@Code Arabic}, {@Code Roman}, {@Code UCRoman}, {@Code Alpha},
+or {@Code UCAlpha}.
+@PP
+@Code "@FootNoteFont" and @Code "@FootNoteBreak" determine the
+footnotefont. @Index @Code "@FootNoteFont"
+footnotebreak. @Index @Code "@FootNoteBreak"
+font and paragraph breaking style of footnotes. The default value
+of @Code "@FootNoteFont" produces the same font family and face as the
+bulk of the document, but reduced to 0.8 times the original size.
+@PP
+@Code "@FootNoteFormat" determines the format of the footnote. The
+@Code number symbol within it must appear exactly once, and is replaced
+by the number of the footnote (if numbered). The @Code body symbol is
+replaced by the body (that is, the content) of the footnote. The default
+value shown uses symbols from raw Lout to add a small space at the right of
+the number, then insert it at the beginning of the first paragraph of
+the body. Another suitable value might be
+@ID @Code "@FootNoteFormat { number |1fx body }"
+which places the body in a separate column to the number, one
+font width to the right of the left edge of the number.
+@PP
+@Code "@FootLen" determines the length of the small horizontal line
+footlen. @Index @Code "@FootLen"
+drawn above the footnotes;
+@Code "@FootAboveGap" determines the minimum space to be left clear
+footabovegap. @Index @Code "@FootAboveGap"
+above this line; and @Code "@FootGap" determines the
+footgap. @Index @Code "@FootGap"
+vertical separation between footnotes. All three may be any length.
+@End @Section
diff --git a/doc/user/str_indx b/doc/user/str_indx
new file mode 100644
index 0000000..c9ea2de
--- /dev/null
+++ b/doc/user/str_indx
@@ -0,0 +1,314 @@
+@Section
+ @Title { Indexes }
+ @Tag { indexes }
+@Begin
+@PP
+Although Lout is not clever enough to guess what entries should go in
+indexes. @Index { indexes }
+your index, it will do almost everything else for you: sort the
+entries and attach the correct page numbers automatically. As for
+tables of contents, the default setting is to have an index in
+books but not in other types of documents. This and a few aspects of
+the appearance of the index can be changed by changing the setup file,
+as explained at the end of this section.
+@PP
+Now, suppose you are discussing Galileo and you want his name in your
+index. Let's be ambitious and say that you want the index to contain
+something like this:
+@ID @OneRow lines @Break {
+Galileo Galilei
+ life of, 201
+ telescope, his use of, 201--203
+ trial of, 205--211, 242, 395
+}
+Each line shows off one of Lout's four tricks: the first is a
+@I { raw entry } (no page number attached); the second is a
+@I sub-entry (indented); the third has a @I { page number range }
+instead of a single page number; and the fourth is a @I { merged entry }
+(several page numbers or ranges within one entry).
+@PP
+We'll take each of them in turn in a moment, but first, let's see how
+to get a basic entry, like this one:
+@ID { Galileo Galilei, 201 }
+To get this into your index, type
+@ID @Code "galileo @Index { Galileo Galilei }"
+at the point where you mention Galileo. Nothing will be printed there,
+but the object following the @Code "@Index" symbol will be placed in
+the index, with a comma and the correct page number appended
+automatically.
+@PP
+The object preceding the @Code "@Index" symbol is a compulsory key
+which is used for sorting the index entries,
+@FootNote {
+The collating sequence used to decide what comes after what is the
+collating sequence used by the @Code "memcmp()" library routine (just
+the underlying binary character codes). Alternatively, the version
+of Lout installed on your system may use the @Code "strcoll()"
+collating sequence, which understands accented characters and whose
+effect depends on your locale. To find out whether @Code "strcoll()"
+is in use or not, type @Code "lout -V" which prints out several lines
+of this and similar information.
+@PP
+If the sorting you get turns out to be not what you expected, the
+first thing to try is the replacement of all accented letters in index
+keys by unaccented ones. Sorting is quite an intractable problem: even
+if @Code "strcoll()" gets the sorting right for one language, there still
+remains the problem of sorting multilingual indexes.
+@PP
+Lout's database mechanism assumes that the @I tab character is collated
+before any character that could appear in a sorting key. It seems that
+there are a few collating sequences in existence which do not satisfy this
+condition, and in these cases Lout will fail to produce the correct index.
+}
+but which is not itself printed anywhere. It is best to construct these
+sorting keys from lower-case letters and the . character only, beginning
+with a letter, although multi-word keys are allowed. These sorting keys
+do not have to be distinct from the tags used in cross referencing;
+however, they do have to be distinct from each other, unless you want
+merged entries (see below).
+@PP
+Our first trick, raw entries (no page number attached), is very
+easy: just use @Code "@RawIndex" instead of {@Code "@Index"}. So the
+first line of our ambitious example is obtained by
+@ID @Code "galileo @RawIndex { Galileo Galilei }"
+This could go anywhere, since no page numbers are involved.
+@PP
+Another use for @Code "@RawIndex" is to get blank lines into the index
+between the letters of the alphabet, by inserting phantom entries:
+@ID @OneRow @Code {
+"b @RawIndex {}"
+"c @RawIndex {}"
+"d @RawIndex {}"
+"..."
+"z @RawIndex {}"
+}
+In fact there is a symbol called @Code "@IndexBlanks" that makes
+indexblanks. @Index @Code "@IndexBlanks"
+exactly these 25 entries. Unfortunately, these blanks will occasionally
+appear at the top of a column, and if there are no tags beginning with
+x, for example, there will be two blank lines between the w and y
+entries. You can start off with @Code "@IndexBlanks" and replace it
+later by the appropriate subset, if necessary.
+@FootNote {
+For Lout to solve this problem automatically, it would need to be told
+which letter each index entry belongs under, perhaps by symbols
+{@Code "@AIndex"}, {@Code "@BIndex"}, etc. The author felt that this
+would have been too tedious.
+}
+@PP
+Our second trick, sub-entries, is also very easy, since a sub-entry
+differs from an ordinary entry only by having an indent. The symbol
+is {@Code "@SubIndex"}, so the second line of our ambitious example is
+produced by
+@ID @Code "galileo.life @SubIndex { life of }"
+You should always give sub-entries the same sorting key as their
+corresponding main entries, plus a . and another word, because then
+you can be certain that the sorting will place sub-entries directly
+after their main entries. There is a @Code "@SubSubIndex" symbol that
+produces a double indent, and there are @Code "@RawSubIndex" and
+@Code "@RawSubSubIndex" symbols.
+@PP
+For our third trick, page number ranges, we use the @Code "to" option
+of the {@Code "@Index"}, {@Code "@SubIndex"}, and {@Code "@SubSubIndex"}
+symbols. For example, to produce the sub-entry
+@ID { telescope, his use of, 201--203 }
+put
+@ID @Code {
+ "galileo.telescope @SubIndex to { gt.end } { telescope, his use of }"
+}
+at the beginning of the range, and
+@ID @Code "@PageMark { gt.end }"
+at the end. You can use any tag you like inside the @Code "to" option,
+as long as it differs from every other tag (notice that sorting keys
+do not have to differ from tags, but @Code "to" options do: this
+is because @Code "to" options go into @Code "@PageMark" like other
+tags do, and if two tags are the same we would have an ambiguous
+result of {@Code "@PageOf"}). If both ends of the range fall on the
+same page, the @Code "to" option is ignored: you will never get
+201--201.
+@PP
+Our fourth and final trick is the merged entry:
+@ID { trial of, 205--211, 242, 395 }
+The main thing to grasp is that this merged entry was originally three
+separate entries (sub-entries in this case):
+@ID @OneRow lines @Break {
+trial of, 205--211
+trial of, 242
+trial of, 395
+}
+We already know how to produce these three entries, using three
+@Code "@SubIndex" symbols, one with a @Code "to" option. Now we have
+discovered that Lout is able to merge several entries into one
+entry. This raises two questions: how does Lout know which entries
+to merge? and given those entries, what does the merging produce?
+@PP
+The answer to the first question is that Lout merges entries whose
+sorting keys are equal. The merged entry above is produced by these
+three entries, placed in the appropriate places:
+@ID @OneRow @Code {
+"galileo.trial @SubIndex to { gtrial.end } { trial of }"
+"galileo.trial @SubIndex { trial of }"
+"galileo.trial @SubIndex { trial of }"
+}
+The entries are merged because they have the same sorting key
+({@Code "galileo.trial"}), not because they happen to have the
+same content ({@Code "trial of"}). In fact, once the page numbers are
+added the content is not the same at all.
+@PP
+Now, having decided that the three entries
+@ID @OneRow lines @Break {
+trial of, 205--211
+trial of, 242
+trial of, 395
+}
+must be merged, what does Lout do? It takes the second entry, discards
+any initial part that is the same as the first entry ({@Code "trial of,"}
+in this case), and, if anything remains, it adds a comma, a space, and
+the remainder to the first entry, producing
+@ID { trial of, 205--211, 242 }
+in this case. This process is repeated on this and the third entry,
+producing
+@ID { trial of, 205--211, 242, 395 }
+in this case, and so on. The entries are merged in the order in which
+their points of origin appear in the final printed document.
+@PP
+If nothing remains after discarding the common initial part, nothing is
+added to the growing merged entry; in effect, the entry that could
+contribute nothing new is deleted. With this in mind, let us return to
+our initial, ambitious example:
+@ID @OneRow lines @Break {
+Galileo Galilei
+ life of, 201
+ telescope, his use of, 201--203
+ trial of, 205--211, 242, 395
+}
+We now know how to produce all four of these entries, but one problem
+of some practical importance remains. Suppose we delete the section on
+the life of Galileo. If we had put the entry that produces `Galileo
+Galilei' in that section, we might inadvertently delete it, and the
+other two sub-entries will lose their main entry. Before deleting
+anything, we must hunt through it for index entries and ponder their
+significance, an error-prone and time-wasting thing to do.
+@PP
+The solution is as follows. When an index entry has sub-entries, make
+it raw, and repeat it just before each of its sub-entries:
+@ID @OneRow @Code {
+"galileo @RawIndex { Galileo Galilei }"
+"galileo.life @SubIndex { life of }"
+}
+at the first place,
+@ID @OneRow @Code {
+"galileo @RawIndex { Galileo Galilei }"
+"galileo.telescope @SubIndex { telescope, his use of }"
+}
+at the second, and so on. Now it is easy to verify that every
+sub-entry has a main entry; and when deleting a sub-entry we can and
+should delete the adjacent main entry. After sorting, our index
+entries will be
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { galileo }
+ B { Galileo Galilei }
+@Rowa
+ A { galileo }
+ B { Galileo Galilei }
+@Rowa
+ A { galileo }
+ B { Galileo Galilei }
+@Rowa
+ A { galileo }
+ B { Galileo Galilei }
+@Rowa
+ A { galileo }
+ B { Galileo Galilei }
+@Rowa
+ A { galileo.life }
+ B { {} life of, 201 }
+@Rowa
+ A { galileo.telescope }
+ B { {} telescope, his use of, 201--203 }
+@Rowa
+ A { galileo.trial }
+ B { {} trial of, 205--211 }
+@Rowa
+ A { galileo.trial }
+ B { {} trial of, 242 }
+@Rowa
+ A { galileo.trial }
+ B { {} trial of, 395 }
+}
+The first five entries have the same sorting key, and will be merged
+as required.
+@PP
+The language of the index entry will be the initial language of the
+document as a whole, which is not necessarily the language at the point
+where the index entry occurs. To get the correct language you will need a
+@Code "@Language" symbol following the @Code "@Index" symbol:
+@ID @Code "galileo. @Index French @Language { Galileo Galilei }"
+or whatever. If you don't do this your index entry might be hyphenated
+incorrectly.
+@PP
+Although the page numbers in index entries will be kept up to date
+automatically as the document changes, as all cross references are,
+it is best to refrain from inserting index entries until the document
+is complete and an overall plan of the structure of the index can
+be made.
+@PP
+The remainder of this section describes how to change the appearance of
+the index by setting options in the setup file. For setup files and
+their options in general, consult Section {@NumberOf setup}.
+@PP
+There are five setup file options for the index. Here they are with
+their default values:
+@ID @OneRow @Code {
+"@MakeIndex { No }"
+"@IndexFont { }"
+"@IndexBreak { oragged 1.2fx }"
+"@IndexColumnNumber { 2 }"
+"@IndexColumnGap { 1.00c }"
+}
+The @Code "@MakeIndex" option, which may be @Code Yes or {@Code No},
+makeindex. @Index @Code "@MakeIndex"
+determines whether to produce an index or not. Although the default
+value is {@Code No}, any type of document may be given an index just
+by changing it to {@Code Yes}. This has already been done in the
+@Code book setup file, but not in the others.
+@PP
+@Code "@IndexFont" determines the font and font size of index entries
+indexfont. @Index @Code "@IndexFont"
+(e.g. {@Code "Times Base 12p"}). Leaving it empty as above produces
+the same font as the rest of the document. @Code "@IndexBreak" is the
+indexbreak. @Index @Code "@IndexBreak"
+paragraph breaking style applied to index entries; @Code oragged is the
+traditional and best way.
+@PP
+@Code "@IndexColumnNumber" and @Code "@IndexColumnGap" determine the
+indexcolumnnumber. @Index @Code "@IndexColumnNumber"
+indexcolumngap. @Index @Code "@IndexColumnGap"
+number of index columns per page, and the gap between them, and are
+exactly analogous to the @Code "@ColumnNumber" and @Code "@ColumnGap"
+options described in Section {@NumberOf columns}.
+@PP
+Lout offers the possibility of having up to three independent indexes
+(useful for glossaries, author indexes, etc.). The other two are called
+index A and index B, and they precede the main index in the
+output. Just replace @Code Index by @Code IndexA to refer to index A,
+and by @Code IndexB to refer to index B. For example,
+@ID @Code "smith.j @IndexA { Smith, John }"
+will insert an index entry to index A, and @Code "@IndexBBlanks"
+will insert the usual 25 blank entries into index B.
+@PP
+In large projects it might help to rename the @Code "@IndexA" symbol
+to something else, such as {@Code "@AuthorIndex"}. This can
+be done by placing
+@ID @Code {
+"import @DocumentSetup"
+"macro @AuthorIndex { @IndexA }"
+}
+in the @Code mydefs file. See Section {@NumberOf definitions} for
+an introduction to the @Code "mydefs" file; the word @Code macro
+is needed here instead of @Code "def" because we are introducing
+a new name for an existing symbol, not defining a new symbol.
+@End @Section
diff --git a/doc/user/str_larg b/doc/user/str_larg
new file mode 100644
index 0000000..618e69f
--- /dev/null
+++ b/doc/user/str_larg
@@ -0,0 +1,177 @@
+@Section
+ @Title { Large-scale structure: chapters, sections, etc. }
+ @RunningTitle { Large-scale structure }
+ @Tag { largescale }
+@Begin
+@PP
+Lout's large-scale structure symbols vary with the type of document
+large.scale. @Index { large-scale structure }
+({@Code "@Chapter"} for books, @Code "@Overhead" for overhead
+transparencies, etc.), but they all work in the same way. Here is a
+typical example, {@Code "@Section"}, as it would actually be used:
+@ID @OneRow @Code {
+"@Section"
+" @Title { Allocation of teachers }"
+"@Begin"
+"@PP"
+"Apart from the usual need to avoid clashes, the allocation of teachers must"
+"ensure that no teacher teaches more than seven periods per day, or ..."
+"@End @Section"
+}
+First comes the symbol itself, then any options in the usual way, and
+then the following object, enclosed in @Code "@Begin" and
+{@Code "@End @Section"}. The following object, also called the body
+of the section, may contain paragraphs, displays, and all the other
+features as usual. The body should begin with a paragraph symbol,
+which may be @Code "@PP" or @Code "@LP" as you prefer. The result is
+a section like the present one, automatically numbered, with the
+@Code "@Title" option for its heading, preceded by a conditional new
+title. @Index @Code "@Title"
+page symbol (Section {@NumberOf paragraphs}).
+@PP
+When @Code "@Section" symbols are used within an ordinary document, they
+must be bracketed by @Code "@BeginSections" and @Code "@EndSections"
+symbols, like this:
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"preceding text"
+"@BeginSections"
+"@Section ... @End @Section"
+"@Section ... @End @Section"
+"..."
+"@Section ... @End @Section"
+"@EndSections"
+"@End @Text"
+}
+This arrangement is reminiscent of the one for lists, and, as for
+lists, there may be no paragraph or new page symbols before, between,
+or after the sections. To change the gap between sections, you need
+to change the @Code "@SectionGap" option in the setup file, as explained
+in Chapter {@NumberOf types}.
+@PP
+The @Code "@Begin ... @End @Section" that brackets the body of each
+section may be abbreviated to {@Code "{ ... }"}. However, the long
+form is recommended because it helps Lout to detect missing or extra
+braces within the body of the section.
+@PP
+All large-scale structure symbols have a @Code "@Tag" option, whose
+use is explained in Section {@NumberOf cross}, and a @Code "@RunningTitle"
+runningtitle. @Index @Code "@RunningTitle"
+option. If running page headers have been requested, @Code "@RunningTitle"
+will be used if it is given, otherwise @Code "@Title" will be used for the
+running header. For example, the present section begins like this:
+@ID @OneRow @Code {
+"@Section"
+" @Title { Large-scale structure: chapters, sections, etc. }"
+" @RunningTitle { Large-scale structure }"
+" @Tag { largescale }"
+"@Begin"
+"..."
+}
+The point is that the section title is rather long for a running
+title, and so we use @Code "@RunningTitle" to get an abbreviated
+version of it.
+@PP
+Section titles typically appear in Bold face in the section heading,
+but in Roman face in tables of contents and running page headers. So
+if part of your title is in italics, enclose it in @Code "@II" rather
+than just @Code "@I" to ensure that you get the right kind of italics
+in both contexts.
+@PP
+All large-scale structure symbols also have an @Code "@InitialLanguage"
+option which sets the current language for the duration of that
+symbol. However, footnotes, endnotes, figures, tables, references,
+and index entries are set in the initial language of the document as
+a whole, unless you change their language explicitly using the
+@Code "@Language" symbol.
+@PP
+The remainder of this section describes the setup file options for
+controlling the appearance of large-scale structure symbols. (For an
+introduction to setup files, consult Section {@NumberOf setup}.) These
+options mainly appear in the third @Code "@Use" clause, since exactly which
+large-scale structure symbols exist depends on the type of document. For
+example, here are the setup file options from the @Code "doc" setup file
+relating to appendices:
+@ID @OneRow @Code {
+"@AppendixWord { appendix }"
+"@AppendixNumbers { UCAlpha }"
+"@FirstAppendixNumber { 1 }"
+"@AppendixHeadingFont { Bold }"
+"@AppendixHeadingBreak { ragged 1.2fx nohyphen }"
+"@AppendixHeadingFormat { number @DotSep title }"
+"@AppendixGap { 2.0v @OrIfPlain 2f }"
+"@AppendixInContents { Yes }"
+"@AppendixNumInTheorems { No }"
+"@AppendixNumInDisplays { Yes }"
+"@AppendixNumInFigures { No }"
+"@AppendixNumInTables { No }"
+"@AppendixPrefix { }"
+}
+There are similar options for each large-scale structure symbol. Here is
+a brief explanation.
+@PP
+@Code "@AppendixWord" contains the word that is to be prefixed to the
+appendix number in full headings. The special value @Code appendix
+produces Appendix or its equivalent translated into the current
+language. Any other value produces itself.
+@PP
+@Code "@AppendixNumbers" determines the style of numbering of appendices,
+and may be {@Code Arabic}, {@Code Roman}, {@Code UCRoman}, {@Code Alpha},
+{@Code UCAlpha}, or {@Code None} meaning unnumbered. Most common is
+{@Code Arabic}, but appendices traditionally use upper-case
+letters, hence the value {@Code UCAlpha} given above.
+@PP
+@Code "@FirstAppendixNumber { 1 }" is the number (always in Arabic) to
+assign to the first appendix. It is almost always 1, but a few people
+like to start their numbering from 0; this is only possible if the
+style of numbering specified by @Code "@AppendixNumbers" is {@Code Arabic}.
+@PP
+@Code "@AppendixHeadingFont" and @Code "@AppendixHeadingBreak" specify
+the font and paragraph breaking style to be applied to the appendix
+heading (relative to {@Code "@InitialFont"} and {@Code "@InitialBreak"});
+the default values shown above produce Bold in the current font family
+and size, and ragged breaking without hyphenation.
+@PP
+@Code "@AppendixHeadingFormat" defines the format of the appendix
+heading. Within it, the symbols @Code number and @Code title stand for the
+appendix number (including the appendix word) and title respectively. The
+@Code "@DotSep" symbol produces a dot and two spaces, except when there is
+no number, when it produces nothing. For example, to draw a full-width
+rule under the heading, change this option to
+@ID @Code "@AppendixHeadingFormat { number @DotSep title @LP @FullWidthRule }"
+Arbitrary formats are acceptable.
+@PP
+@Code "@AppendixGap" determines the vertical space to leave between
+appendices; the default above leaves {@Code 2v}, except that when plain
+text output is in effect it leaves @Code 2f instead. To get a new page
+between appendices, use the magic value {@Code 2b}, which is raw Lout for
+new page. In books, the major components (preface, introduction, tables
+of contents, parts, chapters, appendices, and indexes) always start on a
+new page and there is nothing you can do to change that.
+@PP
+@Code "@AppendixInContents" determines whether the appendix will be listed
+in the table of contents, and may be @Code "Yes" or {@Code No}. The
+next few options determine whether an appendix number will be included
+in the numbers assigned to theorems etc., numbered displays, figures,
+and tables.
+@PP
+There is a @Code "@StructPageNums" setup file option which determines
+whether page numbers will include the numbers of large-scale structure
+symbols. If it is {@Code "Yes"}, @Code "@AppendixPrefix" is prefixed
+to all page numbers of pages containing appendices. For example, setting
+@Code "@AppendixPrefix" to @Code { APP- } produces page
+numbers APP-A-1, APP-A-2, and so on. The object separating each element
+of such compound numbers is determined by the @Code "@NumberSeparator"
+numberseparator. @Index @Code "@NumberSeparator"
+setup file option, which has default value @Code "." but which can easily
+be set to @Code "-" or @Code "--" if desired.
+@PP
+Running page headers above appendices always include the title of
+the appendix, so there is no option for specifying whether to do so or
+not. But for subappendices and other such smaller units, the choice of
+whether to mention them in running headers is left to the user:
+@ID @Code "@SubAppendixNumInRunners { Yes }"
+Despite the misleading name, this option determines whether the entire
+subappendix @I title as well as number will be used as a running header.
+@End @Section
diff --git a/doc/user/str_list b/doc/user/str_list
new file mode 100644
index 0000000..0654ca6
--- /dev/null
+++ b/doc/user/str_list
@@ -0,0 +1,392 @@
+@Section
+ @Title { Lists }
+ @Tag { lists }
+@Begin
+@PP
+The @Code "@List" symbol introduces a sequence of items to be
+lists. @Index { lists }
+list. @Index @Code "@List"
+l. @Index @Code "@L"
+made into a displayed list:
+@ID @OneRow @Code {
+"preceding text"
+"@List"
+"@ListItem @I Emma"
+"@ListItem @I { Mansfield Park }"
+"@EndList"
+"following text"
+}
+After the initial @Code "@List" symbol, each item is introduced by
+list.item. @Index @Code "@ListItem"
+li. @Index @Code "@LI"
+{@Code "@ListItem"}, and the list ends with {@Code "@EndList"}. The
+end.list. @Index @Code "@EndList"
+el. @Index @Code "@EL"
+result here is
+@ID @OneRow {
+preceding text
+@List
+@ListItem @I Emma
+@ListItem @I { Mansfield Park }
+@EndList
+following text
+}
+with space inserted automatically before, between, and after
+the items.
+@PP
+As the example shows, the @Code "@List" symbol causes the items to be
+indented. Also available are {@Code "@LeftList"}, {@Code "@IndentedList"},
+leftlist. @Index @Code "@LeftList"
+ll. @Index @Code "@LL"
+indentedlist. @Index @Code "@IndentedList"
+il. @Index @Code "@IL"
+{@Code "@QuotedList"}, {@Code "@CentredList"}, and {@Code "@CenteredList"},
+quotedlist. @Index @Code "@QuotedList"
+ql. @Index @Code "@QL"
+centredlist. @Index @Code "@CentredList"
+centeredlist. @Index @Code "@CenteredList"
+cl. @Index @Code "@CL"
+which format the items like the corresponding display symbols do.
+Other list symbols generate a @I label for each item. For example,
+@Code "@NumberedList" causes the items to be numbered:
+numberedlist. @Index @Code "@NumberedList"
+nl. @Index @Code "@NL"
+@ID @OneRow @Code {
+"@Heading { Quiz }"
+"@NumberedList"
+"@ListItem { Which American statesman owned a two-storey clock? }"
+"@ListItem { Which Yankee commander from the Civil War cut a"
+"swathe of destruction through the State of Georgia? }"
+"@EndList"
+}
+has result
+@ID @OneRow {
+@Heading { Quiz }
+@NumberedList
+@ListItem { Which American statesman owned a two-storey clock? }
+@ListItem { Which Yankee commander from the Civil War cut a
+swathe of destruction through the State of Georgia? }
+@RawEndList
+}
+The generated labels are added at the left margin. Here is the full set
+of label-generating list symbols, showing the first label produced by each:
+parennumberedlist. @Index @Code "@ParenNumberedList"
+pnl. @Index @Code "@PNL"
+romanlist. @Index @Code "@RomanList"
+rl. @Index @Code "@RL"
+parenromanlist. @Index @Code "@ParenRomanList"
+prl. @Index @Code "@PRL"
+ucromanlist. @Index @Code "@UCRomanList"
+ucrl. @Index @Code "@UCRL"
+parenucromanlist. @Index @Code "@ParenUCRomanList"
+pucrl. @Index @Code "@PUCRL"
+alphalist. @Index @Code "@AlphaList"
+al. @Index @Code "@AL"
+parenalphalist. @Index @Code "@ParenAlphaList"
+pal. @Index @Code "@PAL"
+ucalphalist. @Index @Code "@UCAlphaList"
+ucal. @Index @Code "@UCAL"
+parenucalphalist. @Index @Code "@ParenUCAlphaList"
+pucal. @Index @Code "@PUCAL"
+bulletlist. @Index @Code "@BulletList"
+bl. @Index @Code "@BL"
+starlist. @Index @Code "@StarList"
+sl. @Index @Code "@SL"
+dashlist. @Index @Code "@DashList"
+dl. @Index @Code "@DL"
+@ID @Tab
+ @Fmta { @Col @CC A ! @Col @Code B ! @Col ! @Col @CC C ! @Col @Code D }
+{
+@Rowa
+ A { 1. }
+ B { "@NumberedList" }
+ C { (1) }
+ D { "@ParenNumberedList" }
+@Rowa
+ A { i. }
+ B { "@RomanList" }
+ C { (i) }
+ D { "@ParenRomanList" }
+@Rowa
+ A { I. }
+ B { "@UCRomanList" }
+ C { (I) }
+ D { "@ParenUCRomanList" }
+@Rowa
+ A { a. }
+ B { "@AlphaList" }
+ C { (a) }
+ D { "@ParenAlphaList" }
+@Rowa
+ A { A. }
+ B { "@UCAlphaList" }
+ C { (A) }
+ D { "@ParenUCAlphaList" }
+@Rowa
+ A { @Bullet }
+ B { "@BulletList" }
+@Rowa
+ A { @Star }
+ B { "@StarList" }
+@Rowa
+ A { -- }
+ B { "@DashList" }
+}
+roman @Index { Roman numerals }
+The Roman numerals end at cc (200), but ordinary decimal numbers have
+no limit. The labels produced by the four alphabetical list symbols are
+determined by the current language; in English they start at @Code "a"
+and end at {@Code "z"}.
+@PP
+You may also supply your own labels using the @Code "@TaggedList"
+taggedlist @Index @Code "@TaggedList"
+tl. @Index @Code "@TL"
+symbol. Each item is introduced by @Code "@TagItem" instead of
+tagitem. @Index @Code "@TagItem"
+ti. @Index @Code "@TI"
+{@Code "@ListItem"}. Since such labels tend to be quite wide,
+there are @Code "@WideTaggedList" and @Code "@VeryWideTaggedList" symbols
+widetaggedlist @Index @Code "@WideTaggedList"
+wtl. @Index @Code "@WTL"
+verywidetaggedlist @Index @Code "@VeryWideTaggedList"
+vwtl. @Index @Code "@VWTL"
+which leave extra space for them:
+@ID @OneRow @Code {
+"@WideTaggedList"
+"@TagItem { 9 a.m. } { Breakfast in the Ipamena Lounge,"
+"served with Irish coffee and fresh croissants. }"
+"@TagItem { 10 a.m. } { Prof. A. Smith"
+"speaks on `The Wealth of Nations.' }"
+"@EndList"
+}
+Each @Code "@TagItem" symbol is followed by the desired label between
+braces, and then the item proper. The label may be empty, but still its
+enclosing braces must be there. The result here is
+@ID @OneRow {
+@RawWideTaggedList
+@TagItem { 9 a.m. } { Breakfast in
+the Ipamena Lounge, served with
+Irish coffee and fresh croissants. }
+@TagItem { 10 a.m. } { Prof. A. Smith
+speaks on `The Wealth of Nations.' }
+@RawEndList
+}
+An alternative way to accommodate wide labels is the `drop item,'
+drop.item @Index { drop items }
+which looks like this:
+@ID @OneRow {
+@RawTaggedList
+@DTI { 10 a.m. } { Prof. A. Smith speaks on `The Wealth of Nations.' }
+@RawEndList
+}
+Individual items are dropped in this way by using @Code "@DropTagItem"
+drop.tag.item @Index @Code "@DropTagItem"
+dti. @Index @Code "@DTI"
+instead of {@Code "@TagItem"}. There is also a @Code "@DropListItem"
+drop.list.item @Index @Code "@DropListItem"
+dli. @Index @Code "@DLI"
+symbol corresponding to {@Code "@ListItem"}, but it is very rarely
+needed. Lout is not able to decide for itself whether a label is wide
+enough to require a drop item.
+@PP
+Each list has a `raw' version which omits the preceding space, and
+raw.lists @Index { raw lists }
+raw.list. @Index @Code "@RawList"
+raw.end.list. @Index @Code "@RawEndList"
+@Code "@EndList" has a raw version which omits the following
+space. These are mainly used when an item is itself a list:
+@ID @OneRow @Code {
+"@ParenNumberedList"
+"@ListItem {"
+" @RawParenRomanList"
+" @ListItem { MV Nominees,"
+"hereinafter called the vendor, ... }"
+" @RawEndList"
+"}"
+"@EndList"
+}
+produces
+@ID @OneRow {
+@RawParenNumberedList
+@ListItem {
+ @RawParenRomanList
+ @ListItem { MV Nominees,
+hereinafter called the vendor, ... }
+ @RawEndList
+}
+@RawEndList
+}
+If @Code "@ParenRomanList" had been used instead of
+{@Code "@RawParenRomanList"}, (1) and (i) would have appeared on
+different lines; or if @Code "@EndList" had been used instead of
+{@Code "@RawEndList"}, there would have been too much space following
+the list.
+@PP
+A list item may come out partly on one page or column and partly on
+the next, if it has places where it obviously can be broken in two. For
+example, a list item which is an ordinary paragraph of text might be
+broken in two between any two lines. To force a list item to keep
+together on one page or column, use the @Code "@OneRow" symbol like
+this: @Code "@ListItem @OneRow { ... }".
+@PP
+Occasionally it is desirable to start a new page or column between
+two list items. This cannot be done by inserting @Code "@NP"
+between them, because the space between two list items is a kind
+of no-man's land where nothing is allowed to be. Instead, the
+@Code "@ListNewPage" symbol is used: it is permitted only between
+two list items, and its effect is to make the following list item
+appear at the top of the next page or column. It may be used within
+any kind of list.
+@PP
+Another special list item is {@Code "@ListInterruptItem"}. This
+prints its content without any numbering or formatting:
+@ID @OneRow @Code {
+"@NumberedList"
+"@ListItem { This is the first list item. }"
+"@ListInterruptItem { This is an interruption to the list. }"
+"@ListItem { This is the second list item. }"
+"@EndList"
+}
+produces
+@ID @OneRow {
+@RawNumberedList
+@ListItem { This is the first list item. }
+@ListInterruptItem { This is an interruption to the list. }
+@ListItem { This is the second list item. }
+@RawEndList
+}
+Although @Code "@ListInterruptItem" is written like a list item, the
+result appears to be an interruption to the list. It may be used
+in any kind of list.
+@PP
+Every symbol introduced in this section has an abbreviated form
+consisting of @Code "@" followed by its capital letters only. For
+example, @Code "@RawNumberedList" abbreviates to {@Code "@RNL"},
+and @Code "@ListItem" to {@Code "@LI"}. The sole exception is
+{@Code "@RawList"}, which has no abbreviation because @Code "@RL"
+is the abbreviation for {@Code "@RomanList"}.
+@PP
+list.symbol.options @Index { list symbol options }
+Expert users will be interested to learn that all of the list symbols
+described in this section are derived from the two basic ones,
+@Code "@List" and {@Code "@RawList"}, merely by setting options. Here
+are all the options, together with their default values:
+@ID @OneRow @Code {
+"@List"
+" type { num }"
+" style { num }"
+" labelwidth { 2f }"
+" indent { 0c }"
+" rightindent { 0c }"
+" gap { 1v }"
+" start { 1 }"
+}
+These options may be used with all of the list and raw list symbols,
+except that some combinations don't make sense, for example @Code "indent"
+with {@Code "@CentredList"} or @Code "style" with {@Code "@BulletList"},
+since the list symbol has clearly already set the option.
+@PP
+The @Code "type" option determines the type of numbering (Arabic, Roman,
+etc.) and is not intended for ordinary use, since there are distinct
+symbols for each type, as we have seen. The @Code "style" option
+determines the format of the label, any @Code "num" symbol within it
+being replaced by the number (in Arabic, Roman, etc. as determined by the
+@Code "type" option) of the item. For example, @Code "@ParenNumberedList"
+is just
+@ID @OneRow @Code {
+"@List"
+" style { (num) }"
+}
+and @Code "@BulletList" is just
+@ID @OneRow @Code {
+"@List"
+" style { @Bullet }"
+}
+with @Code "num" not mentioned since no number is wanted. The
+@Code "@TaggedList" symbol and its variants also have the
+@Code "style" option; in their case, the @Code "num" symbol within
+it must be mentioned exactly once, and its value is set to produce
+the label supplied by the author.
+@PP
+The @Code "labelwidth" option determines the width set aside for the labels;
+this is where @Code "@WideTaggedList" and @Code "@VeryWideTaggedList" differ
+from {@Code "@TaggedList"}. The @Code "indent" and @Code "rightindent"
+options determine the space left blank at the left and right margins. The
+value given to these three options may be any length, for example
+@Code "0.5i" (half an inch), or @Code "0.5f" (half the current font
+size). Section {@NumberOf objects} describes lengths in general. There
+are also three useful symbols denoting lengths: @Code "@DisplayIndent"
+is the amount by which indented and quoted displays are indented;
+@Code "@WideIndent" and @Code "@VeryWideIndent" are the indents used by
+@Code "@WideTaggedList" and {@Code "@VeryWideTaggedList"}. Using these
+symbols helps to keep documents consistent.
+@PP
+The @Code "gap" option determines the vertical space inserted between
+items. Once again this must be a length, although since it is
+vertical rather than horizontal, somewhat different kinds of lengths
+are appropriate: @Code "1.5v" for 1.5 times the current vertical space
+between lines, or the default value, {@Code "@DisplayGap"}, which produces
+the amount of vertical space used before and after displays. Owing to
+problems behind the scenes, there is no list option for the space before or after
+the list as a whole. To change this space in one list, use a raw list and
+insert your own paragraph symbols; to change it in every list there is a
+setup file option, described below.
+@PP
+The @Code "start" option is the number assigned to the first
+item. It must be decimal:
+@ID @OneRow @Code {
+"@ParenRomanList"
+" start { 25 }"
+}
+looks strange, but it is the correct way to number the first
+item (xxv).
+@PP
+Here is a larger example of these options in action. Setting both
+@Code "indent" and @Code "rightindent" to @Code "@DisplayIndent"
+produces an effect similar to {@Code "@QuotedDisplay"}:
+@ID @OneRow @Code {
+"preceding text"
+"@List"
+" style { @I {Item num}: }"
+" indent { @DisplayIndent }"
+" rightindent { @DisplayIndent }"
+" labelwidth { @WideIndent }"
+" start { 10 }"
+"@ListItem { The vendor ... in the case of accident. }"
+"@ListItem { The vendor ... adjacent to the facility. }"
+"@EndList"
+"following text"
+}
+The result is
+@ID @OneRow {
+preceding text
+@List
+ style { @I {Item num}: }
+ indent { @DisplayIndent }
+ rightindent { @DisplayIndent }
+ labelwidth { @WideIndent }
+ start { 10 }
+@ListItem {
+The vendor will not be liable for any injury caused by the escape of
+radiation or radioactive materials from the facility, nor for the
+costs of repair of any property damaged by nuclear blast or fallout
+in the case of accident.
+}
+@ListItem {
+The vendor will not be liable for any injury caused by radioactive
+materials being transported to or from the facility, nor for injury
+caused by radioactive materials stored adjacent to the facility.
+}
+@EndList
+following text
+}
+You can change the @I default values of the {@Code "labelwidth"},
+{@Code "indent"}, {@Code "rightindent"}, and {@Code "gap"} options,
+by setting options called {@Code "@ListTagWidth"}, {@Code "@ListIndent"},
+{@Code "@ListRightIndent"}, and {@Code "@ListGap"} in the setup
+file (Section {@NumberOf setup}). These default values will then apply
+automatically to every list in the document unless overridden by an option,
+just as the usual default values do. The setup file also has a
+{@Code "@ListOuterGap"} option which determines the gap before the first
+and after the last list item in non-raw lists.
+@End @Section
diff --git a/doc/user/str_marg b/doc/user/str_marg
new file mode 100644
index 0000000..0f9f75d
--- /dev/null
+++ b/doc/user/str_marg
@@ -0,0 +1,156 @@
+@Section
+ @Title { Margin notes and arbitrary placement }
+ @Tag { marginnotes }
+@Begin
+@PP
+A note can be placed in the left margin by typing
+leftnote. @Index @Code "@LeftNote"
+marginnote. @Index { margin notes }
+@ID {
+@Code "@LeftNote { A left note. }"
+@LeftNote { A left note. }
+}
+after the word that the note refers to. The note will appear in the
+margin at the same height on the page as that word, unless that would
+cause it to overlap a previous margin note, in which case it will be
+shifted downwards (but never onto the next page). The note may be an
+arbitrary Lout object; for example, you might type
+@ID {
+@Code "@LeftNote @I { A left note. }"
+@LeftNote @I { A left note. }
+}
+to make your note come out in italics.
+@PP
+You can get a note in the right margin by using @Code "@RightNote"
+@RightNote { A right note. }
+rightnote. @Index @Code "@RightNote"
+instead of {@Code "@LeftNote"}. To get a note in the outer margin
+(left on even pages, right on odd pages), use {@Code "@OuterNote"};
+@OuterNote { An outer note. }
+outernote. @Index @Code "@OuterNote"
+and for the opposite, use {@Code "@InnerNote"}.
+@InnerNote { An inner note. }
+@PP
+By default, Lout produces margins that are 2.5 centimetres wide, which
+is not really enough to accommodate reasonable margin notes. To
+change these margins, you need to change options in the setup file, as
+explained in Section {@NumberOf margins}.
+@PP
+The appearance of the margin notes themselves is also determined by
+options in the setup file (for a general introduction to setup files
+and their options, consult Section {@NumberOf setup}). Here are
+the options and their default values:
+@ID @OneRow @Code {
+"@MarginNoteFont { 0.80f }"
+"@MarginNoteBreak { ragged 1.10fx }"
+"@MarginNoteHGap { 0.5c }"
+"@MarginNoteVGap { 1.00v }"
+"@MarginNoteWidth { 1.50c }"
+}
+@Code "@MarginNoteFont" determines the font; the default value
+produces the current font scaled to 0.8 times the current size.
+@Code "Slope 0.80f" would yield italic notes, and so
+on. @Code "@MarginNoteBreak" is the paragraph breaking style,
+similar to the @Code "@InitialBreak" setup file option.
+@PP
+@Code "@MarginNoteHGap" determines how far away from the
+adjacent text column the margin note will appear; the default
+value is 0.5 centimetres. @Code "@MarginNoteVGap" is the minimum
+vertical separation between margin notes (i.e. it determines how
+far downwards a note will be shifted to avoid the previous
+one). @Code "@MarginNoteWidth" determines the width of the column
+in which margin notes (both left and right) are set; the default
+value of 1.5 centimetres is suited to the 2.5 centimetre page margins
+that are the default, but if you widen the page margins you will be
+able to increase @Code "@MarginNoteWidth" too.
+@PP
+Left notes extend into the left margin a total distance of
+@Code "@MarginNoteHGap" plus {@Code "@MarginNoteWidth"}, and it is
+up to you to make sure that this does not put them off
+the page. Similar remarks apply to right notes. And since notes
+are never shifted to the next page, only downwards, there is also
+a risk that a note will be shifted off the bottom of the page, if
+it is very long or if preceding notes obstruct it. Again, it is
+up to you to avoid this problem by keeping your notes small and not
+too close together.
+@PP
+Margin notes inside footnotes, figures and tables work well. Margin
+notes in multi-column documents are disastrous unless used very
+sparingly. Margin notes do not appear in plain text output
+(Section {@NumberOf plain}).
+@PP
+A more radical way to place objects at arbitrary points on the current
+place. @Index @Code "@Place"
+page is provided by the @Code "@Place" symbol:
+@ID @OneRow @Code {
+"@Place"
+" x { right - 1 cm - xsize }"
+" y { { foot + top } / 2 }"
+"{"
+" @Box { Hello }"
+"}"
+}
+The placed object may be any object. This particular example produces a
+box whose @I x (horizontal) position is such that its right edge is one
+centimetre from the right edge of the page, and whose @I y (vertical)
+position is halfway up &
+@Place
+ x { right - 1 cm - xsize }
+ y { { foot + top } / 2 }
+{
+ @Box { Hello }
+}
+the page.
+@PP
+In addition to numbers, Lout lengths (Section {@NumberOf objects}),
+and Diag lengths (Section {@NumberOf dia_summ}), the following symbols
+may be used inside the @Code "x" and @Code "y" options:
+@ID @Tab
+ @Fmta { @Col @Code A ! @Col B }
+{
+@Rowa
+ A { left }
+ B { The left edge of the page }
+@Rowa
+ A { right }
+ B { The right edge of the page }
+@Rowa
+ A { foot }
+ B { The foot edge of the page }
+@Rowa
+ A { top }
+ B { The top edge of the page }
+@Rowa
+ A { "+" }
+ B { Addition (positive is to the right and up) }
+@Rowa
+ A { "-" }
+ B { Subtraction (negative is to the left and down) }
+@Rowa
+ A { "*" }
+ B { Multiplication }
+@Rowa
+ A { "/" }
+ B { Division }
+@Rowa
+ A { "xsize" }
+ B { The width of the object being placed }
+@Rowa
+ A { "xmark" }
+ B { The column mark of the object being placed (for expert users) }
+@Rowa
+ A { "ysize" }
+ B { The height of the object being placed }
+@Rowa
+ A { "ymark" }
+ B { The row mark of the object being placed (for expert users) }
+}
+The usual precedences and associativities apply to the mathematical
+operators; braces (not parentheses) may be used for grouping. It is
+best to give values to @Code "x" and @Code y that do not depend on
+any assumptions about where the coordinate system's origin is; this
+is true of the examples above. At the point where @Code "@Place" occurs,
+the result is an empty object. As with margin notes, Lout does not know
+what is happening and will not lay out the rest of the page around the
+placed object.
+@End @Section
diff --git a/doc/user/str_theo b/doc/user/str_theo
new file mode 100644
index 0000000..5d85c37
--- /dev/null
+++ b/doc/user/str_theo
@@ -0,0 +1,108 @@
+@Section
+ @Title { Theorems, lemmas, corollaries, definitions, propositions,
+examples, and claims }
+ @RunningTitle { Theorems, lemmas, etc. }
+ @Tag { theorems }
+@Begin
+@PP
+theorem. @Index @Code "@Theorem"
+A theorem is created like this:
+@ID @OneRow @Code {
+"@LD @Theorem"
+" @Title { Fermat's Last Theorem }"
+"{"
+"@Eq { a sup n + b sup n != c sup n } for all positive integers @Eq { a },"
+"@Eq { b }, @Eq { c } and @Eq { n } when @Eq { n > 2 }."
+"@LP"
+"@Proof I have a proof of this theorem, but the margin"
+"is too small to contain it. @EndProof"
+"}"
+}
+where we have used the @Code "@LD" `left display' symbol from
+Section {@NumberOf displays} to get a left-justified display,
+and the @Code "@Eq" symbol from Chapter {@NumberOf equations}
+for the equations. The result is
+@ID @Theorem
+ @Title { Fermat's Last Theorem }
+{
+@Eq { a sup n + b sup n != c sup n } for all positive integers @Eq { a },
+@Eq { b }, @Eq { c } and @Eq { n } when @Eq { n > 2 }.
+@LP
+@Proof I have a proof of this theorem, but the margin
+is too small to contain it. @EndProof
+}
+The @Code "@Theorem" symbol produces an object with no adjacent
+vertical space, hence it needs to be used in conjuction with
+display or paragraph symbols. The theorem is numbered automatically,
+with the title and number inserted at the start of the first
+paragraph. @Code "@Title" may be omitted.
+@PP
+@Code "@Proof" produces @Proof @Null
+proof. @Index @Code "@Proof"
+with the appropriate following space, and @Code "@EndProof" produces
+endproof. @Index @Code "@EndProof"
+a box at the end of the line. They may be used anywhere, not
+just within theorems.
+@FootNote { Occasionally @Code "@EndProof" does not
+appear as far to the right as it should. This problem can be fixed by using
+{@Code "@LD @HExpand @Theorem"}, which instructs Lout to make sure
+that as much horizontal space as possible is allocated to the theorem. }
+@PP
+There are seven symbols that produce independently numbered sequences
+in this way. They are {@Code "@Theorem"}, {@Code "@Definition"},
+definition. @Index @Code "@Definition"
+claim. @Index @Code "@Claim"
+proposition. @Index @Code "@Proposition"
+lemma. @Index @Code "@Lemma"
+corollary. @Index @Code "@Corollary"
+example. @Index @Code "@Example"
+{@Code "@Claim"}, {@Code "@Proposition"}, {@Code "@Lemma"},
+{@Code "@Corollary"}, and {@Code "@Example"}.
+@PP
+The setup file contains options which determine whether the theorem
+numbers include a chapter number ({@Code "@ChapterNumInTheorems"}),
+or a section number ({@Code "@SectionNumInTheorems"}), and so on. A
+section number automatically includes a chapter number, etc. There
+are also options to change the word printed. For example, if you
+need a sequence of conjectures, change the @Code "@ClaimWord" setup
+file option to
+@ID @Code "@ClaimWord { Conjecture }"
+and use the @Code "@Claim" symbol for your conjectures. You can even put
+@ID @Code {
+"import @DocumentSetup"
+"macro @Conjecture { @Claim }"
+}
+into your @Code mydefs file (Section {@NumberOf definitions}) if you wish,
+so that you can write @Code "@Conjecture" in your documents instead of
+{@Code "@Claim"}.
+@PP
+The setup file also contains two options which control the format of
+the theorem (claims and so on have corresponding options). Here they
+are with their default values:
+@ID @Code {
+"@TheoremTitleFormat { (title) }"
+"@TheoremFormat { { @B { word @NumSep number title: } &2s } @Insert body }"
+}
+The first option is used only when a @Code "@Title" is given to the
+theorem, and it determines how the title is formatted: the @Code title
+symbol within the option stands for the @Code "@Title" option. The default
+value shown places parentheses around the title. The second option
+determines the format of the entire theorem. Within it, @Code word
+stands for the value of {@Code "@TheoremWord"};
+@Code "number" is the number of the theorem; @Code "title" is the title
+of the theorem after formatting by {@Code "@TheoremFormat"} (if there
+is a title; otherwise @Code title is {@Code "@Null"}, which prints as
+nothing and even deletes the preceding space as required); and
+@Code body is the body of the theorem. The default value prints the
+word, number and title with a colon in bold, and inserts them and two
+spaces into the first paragraph of the body; another value might be
+@ID @Code { "@TheoremFormat { @B { word @NumSep number title } @LP body }" }
+which places the header in bold on a line by itself, separated from the
+body by a paragraph break. For @Code "@NumSep" see page {@PageOf numsep}.
+@PP
+Owing to problems behind the scenes, the @Code "@Theorem" symbol and its
+companions have a potential efficiency problem: although all numbers are
+finalized on the second run, it takes Lout time proportional to the square
+of the highest theorem number to do this. So large numbers of theorems
+numbered together might be slow.
+@End @Section
diff --git a/doc/user/su_crest.eps b/doc/user/su_crest.eps
new file mode 100644
index 0000000..95bc0f9
--- /dev/null
+++ b/doc/user/su_crest.eps
@@ -0,0 +1,1156 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 60 53
+%%Pages: 1
+%%Title: Crest for The University of Sydney
+%%Creator: jaa@cs.su.oz.au encapsulated by rex@cs.su.oz.au
+%%+ Converted for colour and bug fixes by Rex.
+%%CreationDate: Wed May 13 18:02:34 EST 1992
+%%+ Converted for colour: Tue Jul 7 20:06:30 EST 1992
+%%DocumentNeededResources: font Times-Bold
+%%EndComments
+%%BeginProlog
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+
+% PMS colours
+% red - 185
+% blue - 286
+% gold - 871
+gsave
+.01 dup scale
+-1988 -1050 translate
+/colour 1 def % set to one if colour
+/pathtextdict 27 dict def
+
+/pathtext
+ { pathtextdict begin
+ /spacing exch def
+ /offset exch def
+ /str exch def
+ /pathdist 0 def
+ /offset offset str 0 1 getinterval stringwidth pop 2 div add def
+ /setdist offset def
+ /charcount 0 def
+ gsave flattenpath
+ {movetoproc} {linetoproc} {} {closepathproc} pathforall
+ grestore
+ newpath
+ end } def
+
+pathtextdict begin
+
+/movetoproc
+ { /newy exch def /newx exch def
+ /firstx newx def /firsty newy def
+ /ovr setdist pathdist sub def
+ newx newy transform
+ /cpy exch def /cpx exch def } def
+
+/linetoproc
+ { /oldx newx def /oldy newy def
+ /newy exch def /newx exch def
+ /dx newx oldx sub def
+ /dy newy oldy sub def
+ /dist dx dup mul dy dup mul add sqrt def
+ dist 0 ne
+ { /dsx dx dist div ovr mul def
+ /dsy dy dist div ovr mul def
+ oldx dsx add oldy dsy add transform
+ /cpy exch def /cpx exch def
+ /pathdist pathdist dist add def
+ { setdist pathdist le
+ { charcount str length lt
+ {setchar} {exit} ifelse }
+ { /ovr setdist pathdist sub def
+ exit }
+ ifelse } loop } if } def
+
+/closepathproc
+ { firstx firsty linetoproc
+ firstx firsty movetoproc } def
+
+/setchar
+ { /char str charcount 1 getinterval def
+ /charcount charcount 1 add def
+ /charwidth char stringwidth pop def
+ gsave
+ cpx cpy itransform translate
+ dy dx atan rotate
+ charwidth -2 div 0 moveto char show
+ /charwidth str length charcount gt
+ { str charcount 1 getinterval stringwidth pop }
+ { 0 } ifelse charwidth add 2 div def
+ charwidth 0 moveto
+ currentpoint transform
+ /cpy exch def /cpx exch def
+ grestore
+ /setdist setdist charwidth spacing add add def } def
+end
+/gold_colour {
+ colour 0 ne
+ { 0.9453 0.6206 0.004 setrgbcolor }
+ { 1 setgray }
+ ifelse
+} def
+/blue_colour {
+ colour 0 ne
+% { 0.0 0.0 0.0 setrgbcolor }
+% { 1.0 1.0 1.0 setrgbcolor }
+ { 0.0599 0.0526 0.5493 setrgbcolor }
+ { 1 setgray }
+ ifelse
+} def
+/red_colour {
+ colour 0 ne
+ { 0.9375 0.0 0.0 setrgbcolor }
+ { 1 setgray }
+ ifelse
+} def
+/c { curveto } def
+/m { moveto } def
+/l { lineto } def
+
+/sym1 { 5000 1939 m
+4974 2006 4971 2065 4924 2119 c
+4909 2137 4893 2152 4870 2153 c
+4845 2154 4824 2141 4811 2120 c
+4791 2089 4771 2068 4740 2047 c
+4722 2079 4713 2105 4706 2141 c
+4659 2111 4624 2091 4580 2057 c
+4555 2116 4561 2178 4597 2232 c
+4570 2236 4551 2242 4525 2242 c
+4543 2280 4564 2305 4598 2329 c
+4572 2345 4553 2358 4528 2375 c
+4432 2284 4332 2235 4201 2226 c
+3989 2210 3846 2323 3636 2356 c
+3596 2363 3565 2353 3525 2362 c
+3478 2372 3444 2415 3441 2463 c
+3358 2444 3304 2395 3250 2329 c
+3222 2365 3205 2402 3211 2447 c
+3179 2445 3148 2437 3135 2408 c
+3122 2378 3135 2351 3144 2320 c
+3092 2351 3046 2396 3050 2457 c
+3053 2509 3097 2544 3146 2563 c
+3104 2574 3073 2584 3030 2587 c
+3053 2628 3079 2655 3119 2679 c
+3070 2703 3031 2726 3003 2773 c
+3033 2798 3059 2811 3095 2827 c
+3062 2842 3035 2852 2999 2850 c
+2961 2846 2934 2826 2909 2798 c
+2897 2844 2904 2890 2936 2925 c
+2999 2992 3096 2968 3185 2949 c
+3143 3062 3116 3145 3080 3260 c
+3056 3248 3037 3240 3012 3228 c
+3009 3255 3008 3275 3004 3303 c
+2954 3263 2914 3228 2851 3218 c
+2792 3210 2733 3215 2694 3260 c
+2657 3302 2652 3361 2676 3411 c
+2698 3457 2745 3480 2796 3479 c
+2848 3478 2888 3433 2900 3382 c
+2976 3532 2884 3672 2865 3839 c
+2853 3951 2882 4059 2972 4127 c
+3035 4175 3120 4184 3186 4141 c
+3233 4110 3249 4047 3232 3993 c
+3306 4030 3338 4126 3312 4204 c
+3286 4278 3221 4333 3143 4334 c
+3082 4335 3030 4290 3012 4231 c
+2987 4270 2970 4307 2979 4352 c
+2991 4411 3040 4445 3096 4466 c
+3052 4496 3012 4518 2959 4515 c
+2915 4512 2887 4486 2857 4455 c
+2857 4526 2870 4594 2928 4636 c } def
+/sym2 { 3004 4693 3106 4680 3188 4630 c
+3195 4668 3210 4699 3241 4721 c
+3280 4749 3325 4751 3370 4734 c
+3324 4681 3347 4603 3386 4544 c
+3428 4480 3447 4422 3454 4346 c
+3491 4560 3479 4786 3309 4922 c
+3309 4871 3298 4821 3255 4794 c
+3200 4760 3143 4771 3080 4784 c
+2987 4804 2933 4885 2837 4880 c
+2806 4878 2771 4868 2762 4837 c
+2750 4800 2777 4768 2801 4737 c
+2736 4747 2662 4782 2659 4848 c
+2657 4904 2696 4947 2744 4976 c
+2706 4986 2676 4992 2637 4986 c
+2650 5022 2666 5051 2700 5067 c
+2751 5090 2798 5075 2851 5060 c
+2854 5126 2881 5190 2942 5213 c
+2997 5235 3049 5211 3099 5180 c
+3043 5175 2983 5150 2972 5095 c
+2960 5029 2985 4969 3033 4922 c
+3045 4972 3068 5004 3102 5043 c
+3175 5126 3245 5203 3235 5313 c
+3228 5402 3182 5463 3122 5528 c
+3096 5557 3073 5580 3067 5618 c
+3059 5671 3076 5722 3118 5756 c
+3174 5801 3245 5811 3313 5787 c
+3350 5775 3378 5745 3382 5707 c
+3387 5660 3355 5625 3320 5594 c
+3378 5596 3424 5615 3465 5657 c
+3488 5680 3500 5709 3492 5741 c
+3479 5789 3422 5808 3372 5807 c
+3398 5849 3436 5877 3485 5879 c
+3540 5881 3582 5851 3621 5812 c
+3626 5868 3617 5910 3633 5965 c
+3647 6015 3678 6046 3720 6077 c
+3728 6032 3736 5996 3761 5957 c
+3793 6007 3828 6041 3883 6062 c
+3939 6083 3991 6081 4047 6060 c
+3996 6024 3964 5988 3935 5934 c
+3967 5942 3991 5948 4021 5962 c
+4016 5935 4014 5915 4008 5889 c
+4103 5911 4184 5919 4273 5880 c
+4323 5858 4354 5820 4374 5768 c
+4396 5801 4407 5829 4419 5867 c
+4426 5890 4435 5908 4453 5924 c
+4487 5953 4511 5975 4544 6004 c
+4556 5978 4563 5960 4575 5935 c
+4629 5971 4670 5993 4721 6033 c
+4730 5997 4739 5972 4751 5937 c
+4775 5951 4795 5964 4806 5990 c
+4816 6013 4815 6039 4797 6057 c
+4771 6083 4733 6075 4696 6068 c
+4704 6112 4719 6149 4757 6172 c
+4799 6198 4847 6189 4892 6169 c
+4896 6198 4905 6220 4923 6243 c
+4942 6267 4969 6275 5000 6276 c
+closepath 0 setgray fill } def
+/sym3 { 5000 6214 m
+4943 6214 4937 6122 4950 6067 c
+4900 6113 4830 6146 4770 6114 c
+4809 6102 4847 6083 4855 6044 c
+4876 5953 4780 5890 4699 5844 c
+4690 5859 4685 5870 4676 5885 c
+4687 5894 4695 5900 4705 5908 c
+4700 5925 4697 5938 4692 5955 c
+4663 5938 4642 5927 4615 5910 c
+4588 5893 4579 5868 4565 5840 c
+4549 5838 4538 5837 4522 5836 c
+4531 5867 4536 5892 4530 5924 c
+4495 5894 4471 5865 4457 5821 c
+4444 5776 4425 5744 4391 5712 c
+4388 5697 4383 5687 4376 5673 c
+4469 5733 4547 5769 4656 5786 c
+4818 5811 4930 5924 5000 6072 c
+closepath gold_colour fill
+5000 2189 m
+4938 2287 4857 2343 4746 2376 c
+4678 2396 4629 2419 4570 2459 c
+4567 2441 4563 2427 4557 2410 c
+4614 2373 4657 2348 4717 2315 c
+4676 2303 4642 2301 4606 2277 c
+4637 2276 4659 2271 4688 2262 c
+4643 2233 4615 2195 4602 2143 c
+4652 2176 4692 2196 4748 2215 c
+4749 2183 4753 2160 4763 2130 c
+4787 2168 4816 2203 4861 2204 c
+4925 2205 4976 2156 5000 2096 c
+closepath gold_colour fill
+4392 2432 m
+4408 2444 4419 2476 4402 2484 c
+4390 2489 4373 2482 4371 2469 c
+4368 2450 4354 2439 4337 2430 c
+4322 2422 4305 2425 4292 2436 c
+4269 2456 4267 2491 4281 2518 c
+4302 2562 4346 2582 4395 2588 c
+4443 2593 4494 2578 4515 2534 c
+4533 2497 4520 2455 4494 2422 c
+4429 2336 4347 2292 4241 2272 c
+4078 2243 3955 2308 3798 2362 c
+3712 2391 3644 2402 3552 2403 c
+3526 2403 3502 2415 3489 2438 c } def
+/sym4 { 3478 2458 3480 2484 3496 2500 c
+3511 2515 3533 2519 3552 2510 c
+3577 2498 3586 2477 3603 2454 c
+3616 2466 3627 2472 3641 2482 c
+3611 2524 3575 2566 3524 2561 c
+3489 2558 3459 2538 3448 2505 c
+3371 2498 3317 2460 3262 2407 c
+3251 2431 3260 2453 3265 2479 c
+3203 2492 3143 2480 3097 2436 c
+3096 2455 3095 2471 3107 2487 c
+3142 2535 3198 2539 3256 2554 c
+3211 2591 3168 2607 3111 2619 c
+3127 2634 3139 2645 3158 2654 c
+3250 2647 3315 2628 3406 2609 c
+3408 2621 3408 2631 3410 2643 c
+3340 2669 3285 2680 3211 2689 c
+3152 2696 3112 2723 3063 2756 c
+3103 2781 3140 2795 3187 2788 c
+3134 2861 3054 2899 2965 2890 c
+3045 2966 3170 2921 3265 2864 c
+3251 2897 3248 2926 3254 2962 c
+3340 2893 3343 2793 3410 2707 c
+3422 2716 3431 2723 3443 2732 c
+3372 2844 3351 2965 3233 3026 c
+3227 3016 3223 3008 3218 2997 c
+3175 3107 3141 3187 3116 3302 c
+3124 3313 3128 3322 3135 3333 c
+3160 3280 3179 3241 3192 3184 c
+3252 3221 3277 3279 3291 3349 c
+3355 3062 3431 2842 3621 2618 c
+3809 2396 4163 2253 4392 2432 c
+closepath gold_colour fill
+3039 4863 m
+2983 4908 2943 4954 2927 5024 c
+2915 5080 2929 5128 2960 5175 c
+2899 5138 2888 5055 2909 4986 c
+2847 5018 2791 5045 2724 5028 c
+2766 5018 2795 4995 2820 4959 c
+2781 4942 2744 4934 2720 4898 c
+2705 4875 2705 4845 2720 4822 c
+2727 4875 2775 4915 2829 4920 c
+2912 4928 2966 4873 3045 4844 c
+3043 4851 3042 4856 3039 4863 c
+closepath gold_colour } def
+/sym5 { 3771 5716 m
+3765 5719 3760 5721 3754 5724 c
+3770 5759 3789 5787 3823 5803 c
+3878 5829 3926 5846 3959 5896 c
+3928 5887 3906 5879 3877 5866 c
+3878 5934 3908 5984 3952 6036 c
+3868 6021 3814 5962 3770 5888 c
+3735 5918 3714 5947 3698 5990 c
+3657 5925 3671 5860 3657 5785 c
+3646 5724 3605 5682 3549 5656 c
+3576 5689 3603 5723 3592 5765 c
+3578 5817 3517 5835 3463 5835 c
+3513 5807 3554 5753 3539 5697 c
+3504 5571 3311 5510 3202 5581 c
+3175 5599 3155 5628 3162 5659 c
+3170 5697 3216 5709 3255 5709 c
+3264 5709 3272 5699 3272 5690 c
+3272 5682 3266 5673 3258 5672 c
+3242 5672 3219 5667 3219 5650 c
+3219 5634 3234 5620 3250 5619 c
+3283 5618 3311 5638 3327 5667 c
+3340 5692 3331 5728 3306 5741 c
+3261 5764 3210 5761 3167 5733 c
+3130 5710 3107 5670 3114 5627 c
+3125 5558 3186 5514 3254 5498 c
+3369 5471 3464 5510 3568 5565 c
+3734 5651 3855 5715 4032 5775 c
+4106 5801 4192 5825 4246 5767 c
+4264 5748 4269 5713 4249 5695 c
+4238 5684 4222 5684 4207 5688 c
+4197 5690 4189 5710 4198 5714 c
+4205 5717 4213 5722 4212 5729 c
+4210 5738 4203 5742 4196 5747 c
+4180 5756 4160 5757 4145 5747 c
+4128 5736 4119 5718 4119 5698 c
+4119 5657 4151 5616 4192 5612 c
+4242 5608 4293 5626 4316 5670 c
+4339 5715 4335 5769 4301 5806 c
+4259 5852 4200 5860 4138 5854 c
+4067 5848 4018 5824 3948 5818 c
+3890 5771 3825 5768 3771 5716 c
+closepath gold_colour fill
+3351 3504 m
+3316 3561 3252 3571 3187 3584 c
+3110 3600 3060 3641 3004 3697 c
+3016 3707 3025 3713 3037 3724 c
+3101 3660 3167 3625 3257 3613 c
+3312 3606 3361 3640 3388 3688 c
+3411 3731 3408 3781 3382 3822 c
+3364 3849 3334 3858 3302 3859 c
+3271 3861 3242 3842 3231 3813 c
+3222 3791 3221 3763 3240 3749 c
+3253 3739 3284 3740 3285 3757 c
+3286 3768 3301 3773 3312 3771 c
+3322 3769 3329 3757 3326 3747 c
+3322 3727 3305 3714 3284 3708 c
+3256 3700 3230 3704 3203 3718 c
+3115 3764 3064 3837 3037 3933 c
+3113 3879 3205 3865 3289 3905 c
+3595 4053 3667 4488 3532 4801 c
+3477 4929 3390 5011 3265 5073 c
+3297 5102 3328 5121 3371 5123 c } def
+/sym6 { 3413 5125 3443 5105 3479 5084 c
+3476 5132 3466 5167 3451 5214 c
+3527 5188 3578 5153 3638 5100 c
+3632 5179 3602 5235 3556 5299 c
+3590 5327 3613 5351 3634 5389 c
+3530 5370 3412 5363 3351 5450 c
+3310 5451 3280 5452 3240 5461 c
+3287 5354 3297 5242 3236 5142 c
+3194 5074 3147 5036 3101 4970 c
+3075 4931 3081 4876 3115 4844 c
+3144 4817 3187 4810 3223 4827 c
+3260 4844 3270 4889 3265 4928 c
+3262 4944 3246 4954 3230 4952 c
+3215 4951 3195 4943 3196 4927 c
+3198 4910 3191 4886 3174 4887 c
+3140 4888 3147 4960 3174 4980 c
+3197 4996 3221 5002 3248 4995 c
+3457 4941 3527 4682 3509 4467 c
+3501 4375 3484 4302 3429 4228 c
+3414 4238 3403 4244 3389 4254 c
+3422 4339 3411 4425 3360 4500 c
+3318 4562 3278 4620 3293 4695 c
+3239 4664 3226 4599 3234 4538 c
+3175 4590 3117 4626 3039 4626 c
+2987 4625 2949 4593 2920 4550 c
+3017 4578 3119 4523 3169 4436 c
+3099 4425 3027 4388 3017 4318 c
+3072 4363 3134 4389 3203 4373 c
+3269 4357 3316 4315 3344 4253 c
+3384 4164 3381 4054 3308 3990 c
+3269 3956 3220 3939 3171 3956 c
+3138 3948 3102 3956 3083 3984 c
+3070 4003 3072 4027 3084 4047 c
+3094 4064 3113 4077 3132 4073 c
+3145 4070 3154 4057 3153 4044 c
+3152 4035 3146 4027 3137 4025 c
+3130 4024 3125 4024 3119 4026 c
+3114 4015 3122 4001 3134 3997 c
+3152 3992 3170 4004 3181 4019 c
+3192 4037 3190 4058 3182 4078 c
+3173 4098 3158 4113 3137 4118 c
+3063 4138 2984 4100 2947 4034 c
+2887 3928 2905 3819 2938 3702 c
+2978 3561 2993 3351 2852 3312 c
+2826 3305 2798 3300 2778 3318 c
+2760 3335 2756 3368 2774 3386 c
+2782 3395 2797 3400 2806 3392 c
+2813 3385 2815 3372 2808 3364 c
+2804 3358 2809 3347 2816 3347 c
+2833 3346 2851 3352 2857 3367 c
+2865 3390 2850 3414 2830 3427 c
+2803 3444 2768 3445 2742 3426 c
+2715 3406 2703 3372 2710 3338 c
+2719 3293 2759 3258 2805 3257 c
+2904 3254 2972 3321 3034 3397 c
+3040 3365 3047 3342 3053 3310 c
+3088 3343 3108 3375 3125 3420 c
+3173 3371 3193 3321 3214 3256 c
+3249 3322 3255 3386 3240 3459 c
+3283 3440 3321 3428 3368 3437 c
+3376 3438 3379 3449 3376 3457 c
+3370 3475 3361 3487 3351 3504 c
+closepath gold_colour fill } def
+
+/sym7 {
+%main interior
+5000 2313 m
+4955 2385 4880 2430 4730 2470 c
+4670 2490 4630 2538 4621 2553 c
+4641 2530 4630 2538 4621 2553 c
+4585 2613 4538 2650 4472 2670 c
+4397 2694 4326 2682 4259 2639 c
+4193 2598 4169 2523 4172 2445 c
+3789 2440 3543 2822 3392 3344 c
+3431 3350 3458 3359 3495 3371 c
+3490 3425 3475 3465 3415 3578 c
+3530 3685 3540 3805 3441 3896 c
+3632 4058 3686 4286 3678 4536 c
+3673 4730 3650 4830 3573 4935 c
+3573 5041 l
+3596 5023 3630 4992 3667 4942 c
+3740 5075 3732 5205 3670 5295 c
+3713 5352 3745 5410 3780 5495 c
+3692 5468 3608 5445 3533 5440 c
+4026 5680 l
+4040 5593 4125 5530 4250 5530 c
+4310 5530 4415 5580 4453 5616 c
+4514 5658 4607 5693 4661 5699 c
+4823 5717 4930 5780 5000 5890 c
+closepath 1 setgray fill } def
+/sym8 {
+% Banner outside
+5000 1556 m
+4862 1556 4759 1613 4651 1699 c
+4509 1814 4423 1918 4279 2033 c
+4149 2137 4015 2173 3848 2182 c
+3697 2189 3587 2175 3436 2165 c
+3273 2154 3136 2138 2993 2218 c
+2923 2257 2875 2297 2823 2359 c
+2818 2365 2826 2373 2832 2378 c
+2864 2398 2887 2412 2919 2433 c
+2954 2455 2947 2512 2922 2545 c
+2881 2600 2850 2641 2823 2703 c
+2793 2771 2795 2830 2758 2894 c
+2745 2916 2720 2935 2696 2927 c
+2647 2911 2610 2902 2561 2886 c
+2557 2885 2552 2889 2550 2894 c
+2530 2941 2515 2976 2502 3027 c
+2500 3032 2505 3038 2510 3040 c
+2546 3054 2573 3062 2609 3075 c
+2626 3081 2638 3091 2645 3108 c
+2652 3125 2651 3142 2643 3159 c
+2619 3213 2586 3244 2561 3297 c
+2538 3350 2530 3393 2511 3448 c
+2500 3481 2452 3494 2421 3478 c
+2291 3413 2194 3370 2064 3305 c
+2034 3289 2015 3267 2004 3236 c
+1988 3194 2014 3153 2048 3124 c
+2053 3119 2059 3111 2065 3115 c
+2075 3120 2082 3124 2092 3130 c
+2102 3135 2116 3133 2121 3123 c
+2134 3092 2150 3073 2169 3046 c
+2174 3040 2177 3030 2171 3026 c
+2144 3007 2124 2995 2097 2977 c
+2081 2966 2072 2948 2074 2928 c
+2078 2872 2082 2830 2101 2778 c
+2125 2717 2157 2677 2203 2631 c
+2210 2624 2219 2620 2228 2623 c
+2254 2631 2274 2637 2300 2646 c
+2307 2648 2315 2644 2318 2638 c
+2330 2616 2332 2597 2339 2574 c
+2340 2568 2336 2562 2330 2558 c
+2303 2539 2280 2531 2251 2515 c
+2240 2509 2234 2497 2237 2484 c
+2293 2264 2369 2102 2522 1934 c
+2640 1804 2769 1740 2940 1699 c
+3122 1655 3264 1689 3451 1705 c
+3631 1720 3776 1743 3942 1673 c
+4083 1613 4148 1508 4263 1408 c
+4485 1215 4706 1090 5000 1090 c
+closepath 0 setgray fill } def
+
+/sym9 { 5000 1502 m
+4722 1503 4558 1710 4353 1898 c
+4199 2039 4042 2129 3833 2132 c
+3632 2136 3486 2109 3286 2101 c
+3149 2096 3040 2122 2923 2194 c
+2745 2303 2674 2468 2599 2664 c
+2500 2600 2426 2557 2324 2497 c
+2385 2294 2456 2143 2606 1994 c
+2761 1838 2945 1768 3165 1777 c
+3357 1784 3497 1797 3689 1807 c
+3873 1817 4023 1758 4161 1638 c
+4301 1516 4393 1411 4554 1319 c
+4703 1234 4828 1178 5000 1177 c
+closepath 1 setgray fill
+2660 2661 m
+2695 2563 2727 2492 2784 2405 c
+2798 2413 2808 2420 2822 2430 c
+2771 2508 2758 2578 2721 2663 c
+2712 2683 2692 2706 2671 2697 c
+2658 2692 2655 2674 2660 2661 c
+closepath 1 setgray fill
+2608 2857 m
+2597 2853 2589 2851 2577 2847 c
+2586 2839 2592 2833 2602 2826 c
+2606 2837 2606 2846 2608 2857 c
+closepath 1 setgray fill
+2390 2680 m
+2403 2655 2407 2634 2412 2607 c
+2482 2651 2535 2679 2607 2721 c
+2633 2736 2659 2747 2688 2739 c
+2726 2728 2751 2702 2766 2665 c
+2795 2595 2806 2539 2845 2474 c
+2853 2460 2869 2447 2883 2454 c
+2901 2463 2894 2490 2885 2508 c
+2851 2572 2813 2612 2784 2679 c
+2758 2740 2752 2789 2729 2851 c
+2722 2870 2709 2890 2689 2888 c
+2670 2887 2663 2864 2662 2845 c
+2660 2803 2625 2773 2586 2757 c
+2514 2728 2462 2707 2390 2680 c
+closepath 1 setgray fill
+2481 3136 m
+2479 3113 2479 3094 2486 3072 c
+2500 3078 2510 3082 2524 3088 c
+2512 3108 2500 3121 2481 3136 c
+closepath 1 setgray fill } def
+/syma {
+2429 3113 m
+2333 3058 2261 3021 2166 2965 c
+2173 2856 2202 2775 2261 2684 c
+2368 2725 2447 2754 2553 2799 c
+2482 2901 2455 2992 2429 3113 c
+closepath 1 setgray fill
+2472 3422 m
+2469 3434 2457 3445 2445 3441 c
+2434 3436 2427 3423 2430 3411 c
+2438 3381 2452 3362 2471 3338 c
+2373 3280 2300 3241 2200 3186 c
+2219 3144 2234 3114 2259 3077 c
+2326 3114 2374 3141 2441 3178 c
+2466 3191 2497 3200 2518 3182 c
+2549 3156 2567 3134 2593 3105 c
+2600 3136 2599 3166 2579 3190 c
+2552 3224 2532 3250 2514 3289 c
+2493 3336 2484 3372 2472 3422 c
+closepath 1 setgray fill
+2380 3392 m
+2379 3400 2368 3406 2361 3402 c
+2269 3354 2202 3321 2112 3270 c
+2093 3260 2096 3233 2102 3212 c
+2103 3210 2105 3206 2107 3208 c
+2210 3264 2288 3301 2391 3358 c
+2386 3370 2383 3380 2380 3392 c
+closepath 1 setgray fill } def
+/symb_colour {
+% cross in 'azure' blue
+blue_colour
+5000 2313 m
+4955 2385 4880 2430 4730 2470 c
+4670 2490 l
+4670 3220 l
+3430 3220 l
+3392 3344 l
+3431 3350 3458 3359 3495 3371 c
+3490 3425 3475 3465 3415 3578 c
+3530 3685 3500 3805 3490 3813 c
+4670 3813 l
+4670 4582 l
+5000 4582 l
+closepath fill
+% Chief Gules
+red_colour
+5000 4582 m
+3675 4582 l
+3673 4730 3650 4830 3573 4935 c
+3573 5041 l
+3596 5023 3630 4992 3667 4942 c
+3740 5075 3732 5205 3670 5295 c
+3713 5352 3745 5410 3780 5495 c
+3692 5468 3608 5445 3533 5440 c
+4026 5680 l
+4040 5593 4125 5530 4250 5530 c
+4310 5530 4415 5580 4453 5616 c
+4514 5658 4607 5693 4661 5699 c
+4823 5717 4930 5780 5000 5890 c
+closepath fill
+% and now some lines around the cross, and at the base of the lion field
+0 setgray
+16 setlinewidth
+3675 4582 m 5000 4582 l stroke
+3490 3813 m 4670 3813 l 4670 4582 l stroke
+3430 3220 m 4670 3220 l 4670 2490 l stroke
+} def
+/book_clasp {
+2 copy
+gold_colour
+m
+50 0 rlineto
+0 50 rlineto
+-50 0 rlineto
+closepath fill
+2 copy
+0 setgray
+m
+50 0 rlineto
+stroke
+m
+0 50 rmoveto
+50 0 rlineto
+stroke
+} def
+/sym_book {
+% Book outline
+% First fill the outline
+1 setgray
+5000 3742 m
+4856 3798 4755 3804 4671 3700 c
+4671 3325 l
+5329 3325 l
+5329 3700 l
+5245 3804 5144 3798 5000 3742 c
+closepath fill
+% along the base of the book colour it gold
+gold_colour
+5329 3315 m
+5227 3420 5114 3413 5000 3363 c
+4886 3413 4773 3420 4671 3315 c
+closepath fill
+% Clasps for the book
+% Firstly colour the clasps gold
+gold_colour
+8 setlinewidth
+4671 3355 m
+4611 3355 l
+4611 3700 l
+4671 3700 l
+closepath
+gsave
+fill
+grestore
+0 setgray
+stroke
+% and strokes on the clasp holder
+3412 58 3644 { dup 4611 exch m 4671 exch l stroke } for
+4671 3300 m 4671 3700 l stroke
+% Now do the three book clasps
+5329 3400 book_clasp
+5329 3500 book_clasp
+5329 3600 book_clasp
+% then actually draw the book in black
+16 setlinewidth
+0 setgray
+5000 3742 m
+5000 3363 l
+4886 3413 4773 3420 4671 3315 c
+4671 3700 l
+4755 3804 4856 3798 5000 3742 c
+closepath stroke
+5329 3700 m
+5245 3804 5144 3798 5000 3742 c
+5000 3363 l
+5114 3413 5227 3420 5329 3315 c
+5329 3700 l
+closepath stroke
+5337 3300 m
+4663 3300 l
+stroke
+% Stroke along the spine of the book
+5000 3300 m
+5000 3742 l
+stroke
+% Line to the sides of the book
+22 setlinewidth
+4716 3360 m
+4716 3750 l
+stroke
+5284 3360 m
+5284 3750 l
+stroke
+0 setgray
+% finally some fine text lines on the book
+4 setlinewidth
+3470 60 3710 { dup dup dup dup dup dup dup
+ 4766 exch m 4840 exch l stroke
+ 5234 exch m 5160 exch l stroke
+ 4877 exch m 4953 exch l stroke
+ 5123 exch m 5047 exch l stroke
+ } for
+} def
+/symb_mono {
+0 setgray 30 setlinewidth
+% bottom most horizontal stroke
+4860 2400 m 5000 2400 l stroke
+% Horizontal strokes to base of book
+2500 100 3200 { dup 4670 exch m 5000 exch l stroke } for
+% strokes to the sides of the book
+3300 100 3700 { dup 3400 exch m 5000 exch l stroke } for
+% horiz strokes above the book
+3800 100 4500 { dup 4670 exch m 5000 exch l stroke } for
+% Vertical strokes to the top of the figure
+3614 5450 m 3614 5520 l stroke
+5060 5580 5620 5680 5720 5590 5570 5580 5620 5690 5720 5740 5770 5860 5950
+5000 -99 3614 { dup 4620 m exch l stroke } for
+% bottom dark horizontal line for cross
+84 setlinewidth 3400 3220 m 4696 3220 l stroke
+% Top dark horizontal line for cross
+56 setlinewidth 3460 3813 m 4696 3813 l stroke
+% Bottom dark line for vertical strokes
+92 setlinewidth 3650 4582 m 5000 4582 l stroke
+} def
+
+/sym { sym1 sym2 sym3 sym4 sym5 sym6 sym7 sym8 sym9 syma
+ colour 0 ne
+ { symb_colour }
+ { symb_mono }
+ ifelse
+} def
+
+% Draw the main body of the crest..
+0 setlinecap
+5000 0 translate -1 1 scale -5000 0 translate sym
+5000 0 translate -1 1 scale -5000 0 translate sym
+sym_book
+colour 0 eq
+{
+ % draw the dark & light edges for the cross
+ 30 setlinewidth
+ 4681 3813 m 4681 4582 l stroke
+ 4681 3220 m 4681 2400 l stroke
+ 84 setlinewidth
+ 5346 3813 m 5346 4582 l stroke
+ 5346 3220 m 5346 2400 l stroke
+} if
+
+/star {
+-41 -82 rlineto
+-112 42 rlineto
+39 -90 rlineto
+-85 -52 rlineto
+87 -48 rlineto
+-28 -86 rlineto
+93 33 rlineto
+45 -89 rlineto
+44 83 rlineto
+90 -28 rlineto
+-27 106 rlineto
+75 45 rlineto
+-77 42 rlineto
+28 82 rlineto
+-90 -24 rlineto
+-41 66 rlineto closepath } def
+% Draw the lion in black
+0 setlinewidth
+5863 4715 m
+5825 4660 5740 4655 5695 4700 c
+5660 4670 5608 4670 5582 4700 c
+5553 4730 5555 4780 5588 4800 c
+5554 4852 5576 4902 5655 4895 c
+5668 4893 5678 4900 5678 4910 c
+5678 4970 l
+5607 4971 5546 4980 5481 5020 c
+5481 4875 l
+5363 4930 5323 4890 5364 4810 c
+5267 4842 5240 4830 5245 4735 c
+5174 4810 5112 4773 5146 4703 c
+5115 4655 5055 4640 5021 4678 c
+4972 4677 4934 4694 4923 4723 c
+4910 4757 4917 4798 4955 4822 c
+4932 4850 4952 4875 4983 4896 c
+5012 4918 5050 4911 5077 4892 c
+5190 4970 l
+5127 5061 l
+5010 4973 4928 4950 4870 4962 c
+4845 4910 4795 4875 4733 4858 c
+4659 4942 4610 4932 4602 4804 c
+4520 4855 4483 4842 4460 4757 c
+4422 4782 4393 4781 4367 4760 c
+4378 4710 4357 4672 4326 4659 c
+4285 4648 4240 4655 4223 4697 c
+4167 4693 4137 4720 4115 4752 c
+4112 4790 4130 4828 4183 4840 c
+4183 4875 4192 4901 4222 4920 c
+4248 4939 4272 4930 4313 4904 c
+4315 4980 4272 5010 4225 4994 c
+4233 5040 4231 5070 4195 5080 c
+4149 5060 4095 5062 4075 5090 c
+4050 5112 4045 5159 4074 5193 c
+4047 5238 4050 5270 4075 5301 c
+4108 5338 4162 5330 4196 5298 c
+4232 5320 4262 5315 4287 5285 c
+4304 5262 4312 5220 4275 5181 c
+4387 5072 l
+4430 5095 l
+4408 5132 4395 5145 4395 5175 c
+4375 5193 4355 5219 4347 5251 c
+4302 5293 4300 5330 4335 5367 c
+4283 5422 4314 5485 4393 5483 c
+4407 5531 4465 5552 4506 5530 c
+4545 5561 4615 5562 4655 5530 c
+4716 5543 4762 5522 4770 5472 c
+4835 5490 4855 5422 4813 5372 c
+4844 5313 l
+4960 5313 l
+4865 5422 4870 5514 5015 5575 c
+5035 5631 5067 5658 5114 5700 c
+5128 5713 5153 5702 5151 5672 c
+5150 5617 l
+5195 5656 5240 5660 5258 5628 c
+5267 5611 5259 5586 5204 5530 c
+5220 5511 5227 5470 5207 5423 c
+5255 5442 5300 5467 5334 5485 c
+5473 5565 5652 5553 5728 5450 c
+5771 5382 5770 5338 5708 5272 c
+5673 5245 5674 5200 5702 5173 c
+5745 5131 5802 5110 5865 5093 c
+5810 5033 5813 5010 5866 4968 c
+5795 4925 5795 4898 5863 4850 c
+5786 4791 5783 4760 5863 4715 c
+5539 5324 m
+5565 5327 5589 5328 5607 5348 c
+5620 5363 5615 5388 5601 5403 c
+5586 5421 5562 5419 5539 5418 c
+5470 5406 5386 5372 5332 5324 c
+5539 5324 l
+closepath 0 setgray fill
+% We firstly fix problems,
+% The hole in the tail
+red_colour
+5091 5462 m
+5083 5471 5073 5475 5062 5475 c
+5050 5475 5040 5471 5032 5462 c
+5023 5454 5019 5444 5019 5433 c
+5019 5421 5023 5411 5032 5403 c
+5040 5394 5050 5390 5062 5390 c
+5073 5390 5083 5394 5091 5403 c
+5100 5411 5104 5421 5104 5433 c
+5104 5444 5100 5454 5091 5462 c
+closepath fill
+% Inside of right fore paw
+4294 5212 m
+4287 5200 4282 5191 4274 5180 c
+4280 5173 4287 5171 4294 5164 c
+4294 5182 4295 5195 4294 5212 c
+closepath fill
+% Rest of the right fore paw
+4328 5261 m
+4328 5212 4328 5176 4328 5127 c
+4347 5110 4360 5098 4379 5080 c
+4386 5074 4401 5084 4400 5094 c
+4400 5120 4396 5138 4396 5164 c
+4395 5179 4386 5190 4375 5200 c
+4354 5219 4354 5250 4328 5261 c
+closepath fill
+% and now in the rest in gold
+gold_colour
+% crotch
+5300 5162 m
+5326 5166 5354 5166 5371 5145 c
+5344 5139 5321 5146 5300 5162 c
+% Right hind leg
+closepath fill
+5316 4855 m
+5271 4863 5221 4835 5211 4791 c
+5188 4803 5166 4806 5141 4798 c
+5107 4787 5107 4741 5109 4704 c
+5096 4692 5085 4679 5067 4680 c
+5044 4682 5030 4709 5033 4731 c
+5034 4740 5010 4743 5009 4734 c
+5007 4723 4998 4712 4987 4713 c
+4962 4716 4939 4737 4939 4762 c
+4939 4784 4964 4797 4986 4797 c
+4995 4797 5003 4816 4995 4821 c
+4979 4831 4973 4859 4987 4872 c
+5010 4893 5051 4883 5071 4860 c
+5123 4892 5160 4917 5211 4950 c
+5221 4956 5224 4970 5218 4979 c
+5200 5007 5187 5027 5171 5056 c
+5162 5072 5157 5096 5173 5104 c
+5207 5121 5231 5135 5264 5152 c
+5299 5125 5338 5112 5382 5120 c
+5405 5088 5425 5067 5451 5037 c
+5450 4993 5449 4961 5449 4916 c
+5416 4926 5386 4940 5356 4924 c
+5330 4910 5318 4884 5316 4855 c
+closepath fill
+% Chest
+4631 5190 m
+4627 5148 4616 5095 4575 5091 c
+4535 5087 4514 5140 4511 5180 c
+4491 5152 4467 5122 4481 5091 c
+4494 5062 4515 5048 4537 5025 c
+4580 5046 4612 5060 4653 5085 c
+4673 5097 4681 5120 4680 5144 c
+4679 5168 4651 5175 4631 5190 c
+closepath fill
+% Main Body
+4306 4871 m
+4291 4896 4249 4908 4229 4888 c
+4212 4871 4212 4841 4227 4824 c
+4224 4819 4220 4817 4217 4812 c
+4195 4813 4169 4805 4166 4784 c
+4163 4765 4171 4745 4188 4737 c
+4207 4728 4229 4738 4243 4753 c
+4249 4748 4255 4746 4261 4742 c
+4255 4722 4259 4695 4278 4688 c
+4297 4682 4319 4681 4332 4696 c
+4346 4713 4336 4734 4330 4755 c
+4328 4762 4327 4769 4332 4775 c
+4358 4805 4401 4817 4438 4801 c
+4464 4849 4526 4868 4577 4851 c
+4579 4891 4612 4926 4652 4932 c
+4687 4936 4722 4923 4740 4892 c
+4781 4908 4812 4928 4835 4965 c
+4843 4977 4841 4989 4839 5002 c
+4835 5027 4826 5043 4815 5065 c
+4810 5074 4836 5085 4841 5076 c
+4856 5048 4864 5026 4873 4996 c
+4939 4998 4995 5004 5047 5045 c
+5138 5116 5212 5185 5328 5191 c
+5357 5192 5384 5181 5399 5156 c
+5462 5050 5572 5010 5694 4995 c
+5703 4994 5707 4984 5707 4975 c
+5707 4912 5707 4866 5707 4802 c
+5697 4802 5689 4802 5678 4801 c
+5677 4822 5674 4837 5672 4858 c
+5669 4883 5613 4876 5605 4853 c
+5597 4833 5615 4813 5633 4800 c
+5631 4793 5628 4787 5626 4780 c
+5610 4780 5592 4778 5587 4764 c
+5581 4748 5584 4729 5598 4719 c
+5613 4708 5630 4703 5649 4709 c
+5668 4714 5679 4728 5690 4745 c
+5698 4744 5703 4743 5711 4742 c
+5718 4710 5767 4698 5797 4712 c
+5769 4752 5770 4807 5801 4845 c
+5773 4874 5770 4922 5794 4954 c
+5772 4992 5773 5033 5791 5072 c
+5745 5094 5709 5112 5675 5150 c
+5643 5186 5635 5231 5647 5277 c
+5688 5310 5718 5357 5707 5410 c
+5691 5483 5604 5514 5529 5511 c
+5385 5505 5298 5418 5159 5379 c
+5109 5365 5062 5347 5019 5374 c
+4997 5388 4981 5409 4982 5436 c
+4983 5465 5003 5488 5030 5500 c
+5052 5510 5077 5511 5097 5497 c
+5118 5482 5125 5460 5127 5435 c
+5128 5423 5147 5413 5157 5419 c
+5175 5430 5187 5447 5185 5468 c
+5182 5495 5172 5513 5161 5537 c
+5187 5554 5199 5574 5217 5599 c
+5222 5606 5204 5619 5198 5613 c
+5175 5593 5153 5586 5128 5568 c
+5122 5563 5107 5568 5107 5576 c
+5110 5608 5110 5631 5109 5663 c
+5072 5629 5045 5590 5050 5541 c
+4992 5542 4922 5509 4919 5451 c
+4916 5384 4969 5341 5021 5300 c
+4954 5296 4904 5297 4836 5293 c
+4833 5276 4821 5264 4806 5256 c
+4798 5223 4777 5202 4749 5185 c
+4742 5157 4725 5138 4701 5122 c
+4694 5093 4682 5069 4657 5054 c
+4531 4981 4435 4936 4306 4871 c
+5207 5299 l
+5319 5353 5395 5408 5515 5439 c
+5555 5450 5594 5453 5625 5426 c
+5643 5411 5654 5391 5650 5368 c
+5645 5330 5611 5298 5573 5297 c
+5207 5299 l
+closepath fill
+% Mane below Left Ear
+4774 5350 m
+4765 5338 4761 5328 4755 5315 c
+4770 5303 4780 5293 4793 5279 c
+4800 5284 4804 5289 4810 5295 c
+4805 5296 4802 5296 4798 5296 c
+4798 5307 4798 5315 4797 5325 c
+4796 5338 4783 5342 4774 5350 c
+closepath fill
+% Mane below Right Ear
+4378 5312 m
+4368 5324 4365 5337 4362 5352 c
+4344 5342 4322 5328 4326 5308 c
+4328 5296 4333 5287 4342 5278 c
+4354 5292 4362 5302 4378 5312 c
+closepath fill
+% Mane below left Eye
+4690 5230 m
+4683 5217 4674 5209 4661 5200 c
+4677 5187 4687 5177 4700 5161 c
+4713 5173 4735 5196 4720 5207 c
+4709 5216 4701 5222 4690 5230 c
+closepath fill
+% Mane below right Eye
+4483 5195 m
+4466 5201 4452 5207 4443 5221 c
+4420 5208 4398 5174 4416 5155 c
+4425 5145 4432 5139 4442 5131 c
+4454 5156 4465 5173 4483 5195 c
+closepath fill
+% Face
+4426 5435 m
+4418 5454 4400 5481 4417 5491 c
+4440 5505 4461 5512 4487 5509 c
+4496 5508 4505 5506 4510 5498 c
+4521 5479 4526 5464 4536 5444 c
+4545 5445 4552 5447 4561 5447 c
+4556 5473 4519 5512 4545 5518 c
+4571 5524 4606 5536 4619 5512 c
+4632 5489 4639 5471 4645 5445 c
+4655 5447 4662 5447 4673 5448 c
+4669 5471 4658 5508 4681 5511 c
+4701 5514 4721 5508 4733 5493 c
+4744 5479 4724 5463 4711 5452 c
+4717 5445 4722 5440 4729 5433 c
+4752 5447 4788 5465 4803 5441 c
+4818 5417 4783 5392 4758 5378 c
+4754 5375 4750 5372 4747 5367 c
+4739 5350 4733 5338 4724 5321 c
+4721 5315 4723 5307 4729 5303 c
+4747 5289 4758 5276 4777 5262 c
+4769 5246 4759 5235 4743 5228 c
+4725 5241 4711 5250 4693 5263 c
+4693 5269 4694 5273 4694 5278 c
+4685 5278 4679 5279 4670 5278 c
+4671 5247 4642 5218 4610 5218 c
+4597 5218 4585 5226 4581 5239 c
+4575 5260 4600 5274 4620 5283 c
+4632 5288 4643 5297 4643 5310 c
+4643 5325 4644 5336 4643 5350 c
+4643 5357 4648 5363 4654 5366 c
+4668 5373 4678 5377 4692 5384 c
+4690 5393 4689 5400 4687 5410 c
+4665 5402 4650 5396 4629 5387 c
+4622 5385 4616 5379 4616 5371 c
+4615 5351 4611 5336 4612 5315 c
+4613 5307 4605 5300 4597 5300 c
+4575 5299 4560 5301 4539 5301 c
+4529 5301 4524 5312 4523 5322 c
+4521 5339 4520 5351 4519 5369 c
+4518 5376 4516 5384 4509 5386 c
+4486 5397 4470 5405 4446 5414 c
+4443 5405 4440 5399 4437 5390 c
+4458 5382 4472 5371 4492 5361 c
+4494 5340 4494 5325 4496 5304 c
+4498 5288 4516 5279 4533 5278 c
+4545 5277 4551 5262 4551 5249 c
+4551 5235 4541 5217 4526 5218 c
+4509 5220 4496 5219 4478 5222 c
+4456 5227 4461 5258 4459 5281 c
+4450 5281 4443 5281 4434 5281 c
+4435 5257 4423 5236 4402 5223 c
+4388 5214 4371 5235 4366 5251 c
+4360 5273 4387 5291 4409 5295 c
+4410 5301 4411 5305 4412 5311 c
+4394 5328 4388 5350 4388 5375 c
+4361 5387 4321 5414 4338 5437 c
+4355 5460 4391 5441 4414 5425 c
+4418 5428 4421 5432 4426 5435 c
+closepath fill
+% Tongue
+4564 5204 m
+4556 5198 4549 5194 4540 5192 c
+4543 5167 4546 5129 4571 5130 c
+4597 5130 4596 5170 4595 5195 c
+4583 5197 4574 5198 4564 5204 c
+closepath fill
+% Right Fore Paw
+4458 5072 m
+4429 5058 4408 5049 4379 5036 c
+4324 5086 4286 5124 4232 5174 c
+4255 5202 4277 5248 4249 5271 c
+4228 5288 4201 5264 4179 5248 c
+4158 5270 4127 5298 4103 5280 c
+4075 5260 4096 5216 4115 5188 c
+4094 5177 4077 5154 4084 5131 c
+4093 5101 4137 5086 4166 5100 c
+4186 5110 4208 5111 4227 5099 c
+4248 5084 4250 5059 4253 5034 c
+4304 5041 4346 4983 4351 4931 c
+4408 4961 4450 4983 4506 5014 c
+4487 5034 4471 5048 4458 5072 c
+closepath fill
+% Draw the stars (outline in black)
+0 setgray 60 setlinewidth
+3943 3714 m star stroke
+6077 3714 m star stroke
+5010 2943 m star stroke
+5010 4379 m star stroke
+% and fill in gold
+gold_colour
+3928 3725 m star fill
+6062 3725 m star fill
+4995 2958 m star fill
+4995 4394 m star fill
+
+0 setgray
+%%IncludeResource: font Times-Bold
+
+/Times-Bold findfont [ 342 0 0 250 0 0 ] makefont setfont newpath
+
+2430 2395 m
+2460 2278 2514 2220 2555 2180 c
+2576 2140 2613 2090 2662 2053 c
+2730 1993 2812 1925 2910 1893 c
+2987 1870 3115 1851 3207 1855 c
+3290 1860 3400 1860 3495 1870 c
+3760 1890 3990 1834 4135 1732 c
+4195 1690 4273 1615 4320 1565 c
+4368 1513 4517 1435 4547 1390 c
+4666 1320 4847 1250 5000 1250 c
+5153 1250 5334 1320 5453 1390 c
+5483 1435 5632 1513 5680 1565 c
+5727 1615 5805 1690 5865 1732 c
+6010 1834 6240 1890 6505 1870 c
+6600 1860 6710 1860 6793 1855 c
+6885 1851 7013 1870 7090 1893 c
+7188 1925 7270 1993 7338 2053 c
+7387 2090 7424 2140 7445 2180 c
+7486 2220 7540 2278 7570 2395 c
+(SIDERE\264MENS\264EADEM\264MUTATO) 0 30 pathtext
+grestore
+showpage
+%%Trailer
diff --git a/doc/user/tbl b/doc/user/tbl
new file mode 100644
index 0000000..230c69e
--- /dev/null
+++ b/doc/user/tbl
@@ -0,0 +1,48 @@
+@Chapter
+ @Title { Tables }
+ @Tag { tables }
+@Begin
+@LP
+This chapter explains how to produce tables like this one:
+tables. @Index { tables }
+@CD @Tbl
+ aindent { ctr }
+ arulebelow { double }
+ aformat { @StartHSpan @Cell @B X | | @HSpan }
+ bformat { @Cell rr { no } @I A | @Cell rl { no } B | @Cell C }
+ rule { yes }
+{
+@Rowa
+ X { Value of mathematical formulae (millions of dollars) }
+@Rowb
+ A { Quadratic formula }
+ B { @Eq { x ^= { minus b +- sqrt { b sup 2 - 4ac } } over 2a } }
+ C { 3^.5 }
+@Rowb
+ A { Binomial theorem }
+ B { @Eq { ( a + b ) sup n ^= big sum from k=0 to infty
+matrix atleft { ( } atright { ) } { n above k } a sup k b sup n-k
+} }
+ C { 12^ }
+}
+As the example shows, the tables may contain spanning columns, aligned
+columns, and rules, and the cells may contain arbitrary objects.
+@BeginSections
+
+@Include { tbl_intr } # introduction
+@Include { tbl_cell } # basic cell formatting: font, break, width, paint
+@Include { tbl_rows } # row formats and the @Row symbol
+@Include { tbl_marg } # margins
+@Include { tbl_widt } # width and height
+@Include { tbl_inde } # indenting and struts
+@Include { tbl_rule } # rules
+@Include { tbl_span } # spanning columns and rows
+@Include { tbl_mult } # multi-page tables
+@Include { tbl_alig } # aligned columns and headings over them
+@Include { tbl_mark } # @MarkRow
+@Include { tbl_plai } # plain text tables
+@Include { tbl_setu } # setup file options
+@Include { tbl_summ } # summary
+
+@EndSections
+@End @Chapter
diff --git a/doc/user/tbl_alig b/doc/user/tbl_alig
new file mode 100644
index 0000000..24b6864
--- /dev/null
+++ b/doc/user/tbl_alig
@@ -0,0 +1,96 @@
+@Section
+ @Title { Aligned columns }
+ @Tag { tbl_alig }
+@Begin
+@PP
+Columns of numbers are often presented with decimal points aligned:
+aligned.columns @Index { aligned columns in tables }
+@CD @OneRow @Tbl
+ marginvertical { 0.5vx }
+ aformat { @Cell A }
+{
+@Rowa A { 5^.46 } marginabove { 0i }
+@Rowa A { 3^.4159 }
+@Rowa A { 5772^ } marginbelow { 0i }
+}
+You can produce this by placing a @Code "^" symbol, which is used
+generally throughout Lout for alignment, just before the alignment point in
+each entry:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ marginvertical { 0.5vx }
+ aformat { @Cell A }
+{
+@Rowa A { 5^.46 }
+@Rowa A { 3^.4159 }
+@Rowa A { 5772^ }
+}
+}
+The equals signs of equations can be aligned in the same way (see the
+example at the start of this chapter). Aligned cells should have no
+@Code indent option.
+@PP
+Owing to problems behind the scenes, getting a heading over the top
+of an aligned column is a problem with no ideal solution. What most
+people want is for the heading to be centred in the column, and the
+aligned entries to be centred in the column as a block, but Lout cannot
+do this. One approximation is to make the heading cell a spanning
+cell with centring, like this:
+@FootNote { Lout does not currently accept single-column tables
+with {@Code "@StartHSpan"}, so we've had to add
+an empty second column. }
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ marginvertical { 0.5vx }
+ aformat { @StartHSpan @Cell indent { ctr } @B A | }
+ bformat { @Cell A | }
+{
+@Rowa A { Heading }
+@Rowb A { 5^.46 }
+@Rowb A { 3^.4159 }
+@Rowb A { 5772^ }
+}
+}
+The spanning frees the heading from alignment, permitting
+@Code "indent { ctr }" to work:
+@CD @OneRow @Tbl
+ marginvertical { 0.5vx }
+ aformat { @StartHSpan @Cell indent { ctr } @B A | }
+ bformat { @Cell A | }
+{
+@Rowa A { Heading } marginabove { 0i }
+@Rowb A { 5^.46 }
+@Rowb A { 3^.4159 }
+@Rowb A { 5772^ } marginbelow { 0i }
+}
+But if the heading cell is wider than the aligned cells, you get this:
+@CD @OneRow @Tbl
+ marginvertical { 0.5vx }
+ aformat { @StartHSpan @Cell indent { ctr } @B A | }
+ bformat { @Cell A | }
+{
+@Rowa A { A Wider Heading } marginabove { 0i }
+@Rowb A { 5^.46 }
+@Rowb A { 3^.4159 }
+@Rowb A { 5772^ } marginbelow { 0i }
+}
+In other words, this will centre a heading with respect
+to aligned entries, but it will not centre aligned entries with
+respect to a heading. In these cases you could forget about
+@Code "@StartHSpan" and treat the heading as an aligned entry,
+either by placing a @Code "^" within it or by using
+@ID @Code "@Cell 0.5w @HShift A"
+which places the alignment point in the centre of the entry.
+#@CD @OneRow @Tbl
+# marginvertical { 0.5vx }
+# aformat { @Cell 0.5w @HShift @B A }
+# bformat { @Cell A }
+#{
+#@Rowa A { A Wider Heading } marginabove { 0i }
+#@Rowb A { 5^.46 }
+#@Rowb A { 3^.4159 }
+#@Rowb A { 5772^ } marginbelow { 0i }
+#}
+You can move the alignment point about by changing the 0.5. Of course,
+all this is a poor substitute for the real thing.
+@End @Section
diff --git a/doc/user/tbl_cell b/doc/user/tbl_cell
new file mode 100644
index 0000000..159372e
--- /dev/null
+++ b/doc/user/tbl_cell
@@ -0,0 +1,97 @@
+@Section
+ @Title { Changing the appearance of cells }
+ @Tag { tbl_cell }
+@Begin
+@PP
+The @Code "@Cell" symbol offers a few options for changing the appearance
+cell.option @Index { cell options in tables }
+of entries placed in it. Like all options, these
+appear immediately after the @Code "@Cell" symbol, with their values in braces:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ aformat { @Cell paint { lightgrey } font { Italic } break { clines } A }
+{
+@Rowa A {
+IMPORTANT
+Do not throw stones at this notice
+}
+}
+}
+The result here is
+@CD
+@Tbl
+ aformat { @Cell paint { lightgrey } font { Italic } break { clines } A | @Cell B }
+{
+@Rowa A {
+IMPORTANT
+Do not throw stones at this notice
+}
+}
+with a light grey background, Italic font, and
+@Code "clines" paragraph breaking style. The paint colour
+may be any colour from Section {@NumberOf colour}. Another option,
+{@Code background}, allows an arbitrary object to be placed in the
+background of the cell, in front of any paint but behind the entry.
+@PP
+Later sections introduce other @Code "@Cell" options, for
+fixed-width columns, indented entries, margins, and rules. It is also
+possible to combine other symbols from Lout with cell formatting, by
+placing them between the @Code "@Cell" symbol and its following letter,
+rotated.entries @Index { rotated entries in tables }
+like this:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ aformat { @Cell 90d @Rotate @S A | @Cell @B grey @Colour B }
+{
+@Rowa
+ A { Col A }
+ B { Col B }
+}
+}
+Think of the @Code "A" as standing for the value of the @Code "A"
+option of the @Code "@Rowa" symbol (which it does), and you'll see
+that this is just Lout's usual rule of symbols applying to the
+object that follows them. The result here is
+@CD @Tbl
+ aformat { @Cell 90d @Rotate @S A | @Cell @B grey @Colour B }
+{
+@Rowa
+ A { Col A }
+ B { Col B }
+}
+In simple cases @Code "@B" is easier than {@Code "font { Bold }"};
+the latter is useful as a default value, as we will see in a moment.
+Note the difference between a coloured background, obtained with
+{@Code "paint"}, and a coloured entry, obtained using the @Code "@Colour"
+symbol.
+@PP
+@Code "@Tbl" offers many places where you can set cell options. The meaning
+of the option is the same wherever you set it;
+what changes is the extent of its application. Taking the @Code "paint"
+option as a representative example, the most specific place to set it
+is at a @Code "@Cell" symbol as above; then it affects only that cell
+in rows formatted using that format. Alternatively,
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ apaint { lightgrey }
+ aformat { @Cell A | @Cell B }
+}
+will paint every cell in the {@Code "aformat"}. And
+@ID @OneRow @Code @Verbatim {
+@Rowa
+ paint { lightgrey }
+ A { ... }
+}
+will paint every cell in a particular row. To paint the entire table, use
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ paint { lightgrey }
+}
+And finally, there is a @Code "paint" option in the
+setup file (Section {@NumberOf tbl_setu}), which if set will paint every
+table in the document. When a more general setting of an option is
+contradicted by a more specific setting (e.g. when @Code "@Tbl" has
+@Code "paint { lightgrey }" but some cell or row has
+{@Code "paint { nopaint }"}), the more specific setting applies. For a
+precise description, see Section {@NumberOf tbl_summ}.
+@End @Section
diff --git a/doc/user/tbl_inde b/doc/user/tbl_inde
new file mode 100644
index 0000000..75a3471
--- /dev/null
+++ b/doc/user/tbl_inde
@@ -0,0 +1,58 @@
+@Section
+ @Title { Indenting and struts }
+ @Tag { tbl_inde }
+@Begin
+@PP
+By default, entries appear at the left within cells, not counting the
+cell margin. The @Code indent option causes entries to be indented
+horizontally. For example,
+@ID @OneRow @Code "@Cell indent { ctr }"
+horizontally centres the entry within the cell. The other possible values
+centred.entries @Index { centred entries in tables }
+right.justified.entries @Index { right justified entries in tables }
+of this option are {@Code "left"}, {@Code "right"}, or any length (for
+example, {@Code 2f}) meaning that much indent.
+@PP
+There is a corresponding @Code "indentvertical" option for vertical indenting
+within the cell. It takes the same values except that @Code "left" is
+renamed {@Code "top"}, and @Code "right" is renamed {@Code foot}.
+A common problem with vertical placement is that words that lack
+ascenders (parts of letters that rise up) or descenders (parts that
+sink down) can easily become misaligned with words that
+don't. Looking at
+@CD @Tbl
+ aformat { @Cell A | @Cell B | @Cell C }
+ marginvertical { 0i }
+{
+@Rowa
+ A { resume }
+ B { poppy }
+ C { title }
+}
+which is the result of
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { resume }
+ B { poppy }
+ C { title }
+}
+}
+we see that the words are aligned correctly despite the absence of
+ascenders from the first two words, and of descenders from the first
+and last; and this despite the fact that these words are vertically
+placed at the top of the cell. This is because by default
+@Code "@Tbl" adds a @I { vertical strut } to each entry: an invisible
+object of zero width and height {@Code "1f"}, which covers for any absent
+ascenders and descenders. The option
+@ID @OneRow @Code "@Cell strut { no }"
+can be used to remove the strut; other acceptable values for this
+option are {@Code yes} (the default value), and any length, which will
+add a strut of that length.
+@PP
+For completeness there is a corresponding @Code "struthorizontal" option; it
+takes the same values, its default value is {@Code no}, and it unlikely
+ever to be used.
+@End @Section
diff --git a/doc/user/tbl_intr b/doc/user/tbl_intr
new file mode 100644
index 0000000..a46da18
--- /dev/null
+++ b/doc/user/tbl_intr
@@ -0,0 +1,119 @@
+@Section
+ @Title { Getting started }
+ @Tag { tbl_intr }
+@Begin
+@PP
+The Lout definitions for table formatting
+@FootNote {
+The @Code "tbl" package described here replaces the @Code "tab"
+package of Version 3.12 and earlier. For backward compatibility
+the @Code "tab" package is still available and still works as
+described in older versions of this documentation. Users of
+@Code "tab" will find simple uses of @Code "tbl" to be very similar,
+replacing @Code "@Tab" by {@Code "@Tbl"}, @Code "@Fmta" by
+{@Code "aformat"}, @Code "@Col" by {@Code "@Cell"}, and
+@Code "!" by {@Code "|"}.
+}
+are kept in a file called {@Code "tbl"}, which you must include at
+the start of your document if
+tbl.file @Index { @Code "tbl" file }
+you want tables, like this:
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+Specialized setup files, like {@Code "tbl"}, are included before the main
+setup file (@Code "doc" in this case). Alternatively, if you are using
+your own setup file, you may place the include commands within it, near the
+start.
+@PP
+To begin with a very simple example, the table
+tbl. @Index @Code "@Tbl"
+@CD
+@Tbl
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { Austen }
+ B { Chaucer }
+ C { Donne }
+@Rowa
+ A { Balzac }
+ B { Darwin }
+ C { Goethe }
+@Rowa
+ A { Byron }
+ B { Dickens }
+ C { Homer }
+}
+is produced by the following input:
+@ID @OneRow @Code {
+"@Tbl"
+" aformat { @Cell A | @Cell B | @Cell C }"
+"{"
+"@Rowa"
+" A { Austen }"
+" B { Chaucer }"
+" C { Donne }"
+"@Rowa"
+" A { Balzac }"
+" B { Darwin }"
+" C { Goethe }"
+"@Rowa"
+" A { Byron }"
+" B { Dickens }"
+" C { Homer }"
+"}"
+}
+Immediately after the @Code "@Tbl" symbol, which introduces the table,
+comes a @I { format option }, {@Code "aformat"}, describing the format of
+each row. It says that each row contains three cells: {@Code "@Cell A"},
+{@Code "@Cell B"}, and {@Code "@Cell C"}. The format option may have up
+to 26 cells, with names chosen freely from the upper-case letters from
+@Code A to {@Code Z}. The symbol @Code "|" separates each cell from the next.
+@PP
+After the format option comes the body of the table, enclosed in
+braces. It consists entirely of a sequence of rows, each introduced by
+a @Code "@Rowa" symbol and containing one entry for each cell of the
+format option, as shown (the row may occupy any number of lines of the
+input file). The entries may be arbitrary Lout objects, such as words,
+paragraphs, equations, figures, and so on without restriction. An entry
+may be omitted altogether if it is empty. Lout will choose suitable widths
+for the cells, and break paragraphs in the entries to the right widths.
+@PP
+The result of the @Code "@Tbl" symbol is an object. As usual with
+Lout, this object may appear at any point in the document,
+@FootNote {
+In rare cases, when the table occupies an entire paragraph but is not
+displayed, a bug in the current version of Basser Lout causes the second
+column to appear much too far to the right. Until the problem is fixed,
+the first thing to try if this occurs is to replace the very first
+row symbol ({@Code "@Rowa"}, {@Code "@Rowb"}, etc.) by {@Code "@FirstRowa"},
+{@Code "@FirstRowb"}, etc.
+# That should work, but if it doesn't, replacing
+# @Code "@Tbl" by @Code "@OneCol @Tbl" certainly will, although it also
+# prevents the table from breaking across page boundaries.
+}
+even within a paragraph or another table. Most commonly, though, tables
+are displayed using the @Code "@IndentedDisplay" and @Code "@CentredDisplay"
+symbols (Section {@NumberOf displays}):
+@ID @Code "@CentredDisplay @Tbl ..."
+or else they go into the @Code "@Table" symbol (Section {@NumberOf figures}):
+@ID @OneRow @Code {
+"@Table"
+" @Caption { ... }"
+"@Tbl ..."
+}
+which centres them at the top of the following page and adds a
+caption. Note the difference between {@Code "@Tbl"}, which builds a
+table, and {@Code "@Table"}, which places an arbitrary object in an
+appropriate place. It's important to remember that the result
+is an object like any other, because from time to time one wants such
+things as rotated tables whose entire contents are to be italicised:
+@ID @Code "90d @Rotate @I @Tbl ..."
+and it helps to remember that the full power of Lout can be
+brought to bear on the @I entire table.
+@End @Section
diff --git a/doc/user/tbl_marg b/doc/user/tbl_marg
new file mode 100644
index 0000000..89e63cd
--- /dev/null
+++ b/doc/user/tbl_marg
@@ -0,0 +1,74 @@
+@Section
+ @Title { Margins }
+ @Tag { tbl_marg }
+@Begin
+@PP
+The @Code "@Cell" symbol offers a @Code margin option for changing the
+margins @RawIndex { margins }
+margins.in.tables @SubIndex { margins in tables }
+amount of margin left between the entry and the boundary of the cell:
+@ID @Code "@Cell margin { 0.3f }"
+The default values are different for horizontal and vertical margins,
+which brings us to the @Code marginhorizontal and @Code marginvertical
+options:
+@ID @OneRow @Code @Verbatim {
+@Cell
+ marginhorizontal { 0.6f }
+ marginvertical { 0.3f }
+}
+These are the default values, 0.6 and 0.3 times the current font size
+respectively. Another useful value is {@Code "marginvertical { 0.5vx }"},
+which asks for a vertical margin of half the current line separation, but
+measured from baseline to baseline (this is what the @Code "x" means).
+This produces a separation equal to the separation of the surrounding lines:
+@CD @Tbl
+ marginvertical { 0.5vx }
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { Austen }
+ B { Chaucer }
+ C { Donne }
+@Rowa
+ A { Balzac }
+ B { Darwin }
+ C { Goethe }
+@Rowa
+ A { Byron }
+ B { Dickens }
+ C { Homer }
+}
+This margin does not work so well when the cells contain paragraphs,
+diagrams or other things that could not be described as single lines.
+@PP
+There are {@Code "marginabove"}, {@Code "marginbelow"}, {@Code "marginleft"},
+and {@Code "marginright"} options for setting margins individually. For
+example, sometimes you don't want the extreme left and right margins in
+a table, and they can be got rid of like this:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ paint { lightgrey }
+ aformat { @Cell ml { 0i } A | @Cell B | @Cell mr { 0i } C }
+{
+@Rowa
+ A { Column A }
+ B { Column B }
+ C { Column C }
+}
+}
+We've used abbreviated versions of the options' names: @Code "ml" for
+{@Code marginleft}, and @Code "mr" for {@Code marginright}. Every option
+has such an abbreviated name, made from the first letters of the parts of
+its full name (Section {@NumberOf tbl_summ} lists all these names). The
+result is
+@CD @Tbl
+ paint { lightgrey }
+ aformat { @Cell ml { 0i } A | @Cell B | @Cell mr { 0i } C }
+{
+@Rowa
+ A { Column A }
+ B { Column B }
+ C { Column C }
+}
+with the painting showing the reduced margins.
+@End @Section
diff --git a/doc/user/tbl_mark b/doc/user/tbl_mark
new file mode 100644
index 0000000..8761979
--- /dev/null
+++ b/doc/user/tbl_mark
@@ -0,0 +1,65 @@
+@Section
+ @Title { Vertical alignment of tables }
+ @Tag { tbl_mark }
+@Begin
+@PP
+Occasionally the vertical alignment of a table with objects to its left
+vertical.alignment @Index { vertical alignment of tables }
+and right becomes an issue. Examples are hard to find, but let's say
+that we need to construct a symbol
+@ID @AmberLight
+and include it in running text. The obvious first attempt at a table
+with three rows produces
+#@ID @OneRow @Code @Verbatim {
+#@Tbl
+# aformat { @Cell A }
+# margin { 0i }
+# strut { no }
+#{
+#@Rowa A { @OpenCircle }
+#@Rowa A { @ClosedCircle }
+#@Rowa A { @OpenCircle }
+#}
+#}
+#where @Code "@OpenCircle" and @Code "@ClosedCircle" produce open and
+#closed circles (they may be defined using the @Code "@Diag" package);
+#but this produces
+@Tbl
+ aformat { @Cell A }
+ margin { 0i }
+ strut { no }
+{
+@Rowa A { @OpenCircle }
+@Rowa A { @ClosedCircle }
+@Rowa A { @OpenCircle }
+}
+in running text, because vertical alignment is by default through the
+top boundary of the table. To make the alignment pass through one of
+the rows, replace its @Code "@Row" symbol by a corresponding
+@Code "@MarkRow" symbol. Here is the revised table, enclosed in a
+definition for ease of use:
+amberlight @Index { @Code "@AmberLight" symbol }
+@ID @OneRow @Code @Verbatim {
+import @TblSetup
+def @AmberLight
+{
+ @OneRow @Tbl
+ aformat { @Cell A }
+ margin { 0i }
+ strut { no }
+ paint { no } rule { no }
+ {
+ @Rowa A { @OpenCircle }
+ @MarkRowa A { @ClosedCircle }
+ @Rowa A { @OpenCircle }
+ }
+}
+}
+Now when we write
+@ID @Code "produces @AmberLight in running text"
+we find that this definition produces @AmberLight in running text, as
+desired. We have enclosed the table in @Code "@OneRow" to ensure that
+its rows will never become separated, and added some options just in
+case the definition is ever used with a setup file (Section
+{@NumberOf tbl_setu}) that has default painting or rules.
+@End @Section
diff --git a/doc/user/tbl_mult b/doc/user/tbl_mult
new file mode 100644
index 0000000..84ce363
--- /dev/null
+++ b/doc/user/tbl_mult
@@ -0,0 +1,57 @@
+@Section
+ @Title { Multi-page tables }
+ @Tag { tbl_mult }
+@Begin
+@PP
+The tables produced by @Code "@Tbl" permit page breaks (including breaking
+multi.page.tables @Index { multi-page tables }
+to a new column) between every two rows, except rows that have a
+vertically spanning cell in common. Page breaks cannot occur
+within rows. The choice of page breaks can either be left to Lout,
+or it can be forced by placing the new page symbol @Code "@NP" between two
+np.tables @Index { @Code "@NP" (new page) in tables }
+rows.
+@PP
+Some care is needed over where to put multi-page tables. They can't go
+within any of the display symbols, because display symbols are not clever
+enough to break tables between rows, even though they are sometimes able
+to break simpler displays. (A display symbol will scale a very high table
+to fit on one page, and it will go wrong on a table containing
+{@Code "@NP"}.) Multi-page tables can go inside @Code "@Figure" or
+@Code "@Table" symbols, because these symbols have been set up to accept
+multi-page objects. Or they can go into the body text of the document
+at full width with a paragraph symbol before and after, like this:
+@ID @Code @Verbatim {
+@DP
+@Tbl ...
+@DP
+}
+An example of this kind of multi-page table appears in
+Section {@NumberOf tbl_summ}. You can simulate an indent by means of an
+empty cell at the left of each row format, although in the author's opinion
+a multi-page table looks better at full width anyway. Lout will expand the
+rightmost column to the full page width; one way to prevent this is to add
+a @Code "|" after the last cell within each {@Code format} option, creating
+an empty extra column.
+@PP
+The simplest way to get rules right in multi-page tables is to set
+@Code "rulehorizontal" to {@Code yes}. This places a rule above every
+row including the first on each page, and a rule below every row including
+the last on each page.
+@PP
+To prevent page breaks within a table, precede the @Code "@Tbl"
+symbol by {@Code "@OneRow"}:
+@ID @Code "@CD @OneRow @Tbl ..."
+@Code "@OneRow" is a general Lout symbol which binds the following
+object into a single, unbreakable row. Make sure your table is
+small enough to fit on one page when you do this, otherwise an error
+message will be printed and it will be scaled to fit. Of course, we
+have just said that display symbols like @Code "@CD" do this anyway,
+but that might change some day.
+@PP
+To prevent a page break between two particular rows, but not in
+general, replace the @Code "@Row" symbol of the second row with
+the corresponding @Code "@NoBreakRow" symbol (@Code "@NoBreakRowa"
+instead of {@Code "@Rowa"}, @Code "@NoBreakRowb" instead of
+{@Code "@Rowb"}, and so on).
+@End @Section
diff --git a/doc/user/tbl_plai b/doc/user/tbl_plai
new file mode 100644
index 0000000..0813717
--- /dev/null
+++ b/doc/user/tbl_plai
@@ -0,0 +1,84 @@
+@Section
+ @Title { Plain text tables }
+ @Tag { tbl_plai }
+@Begin
+@PP
+Tables work well with plain text output (Section {@NumberOf plain}):
+plain.text.tables @Index { plain text tables }
+@CD @OneRow -1px @Break @F @Verbatim {
+...................................................
+. . .
+. Johnson . Johnson suddenly uttered an .
+. suddenly . apophegm, at which many will .
+. uttered an . start: `Patriotism is the .
+. apophegm, at . last refuge of a scoundrel.' .
+. which many . .
+. will start: . .
+. `Patriotism .................................
+. is the last . . .
+. refuge of a . Johnson . Johnson .
+. scoundrel.' . suddenly . suddenly .
+. . uttered an . uttered an .
+. . apophegm, at . apophegm, at .
+. . which many . which many .
+. . will start: . will start: .
+. . `Patriotism . `Patriotism .
+. . is the last . is the last .
+. . refuge of a . refuge of a .
+. . scoundrel.' . scoundrel.' .
+. . . .
+. . . .
+................................... .
+. . .
+. Johnson suddenly uttered an . .
+. apophegm, at which many will . .
+. start: `Patriotism is the . .
+. last refuge of a scoundrel.' . .
+. . .
+. . .
+...................................................
+}
+This table was produced by a separate run of Lout and pasted into this
+document.
+@PP
+@Code "@Tbl" changes the default values of several options when used
+in a plain text document:
+@ID @Code @Verbatim {
+@Tbl
+ marginvertical { 2f }
+ marginhorizontal { 2s }
+ rulehorizontalwidth { 1f }
+ ruleverticalwidth { 1s }
+ rulehorizontalgap { 0f }
+ ruleverticalgap { 0s }
+}
+When using plain text it is advisable to make vertical distances whole
+multiples of {@Code "1f"}, and horizontal distances whole multiples of
+{@Code "1s"}, since this avoids fractional spacing which cannot be successful
+in plain text files and produces quite messy results. There is also a
+@Code ruleplainchar option for changing the character used to
+draw rules. For example,
+@ID @Code @Verbatim {
+@Tbl
+ ruleplainchar { - }
+}
+would be a good choice if you plan to draw only horizontal rules. This
+option can be set anywhere as usual.
+@PP
+If you do use rules it is worth pondering the implications of the last
+part of Section {@NumberOf tbl_rule}. Right and below rules are drawn
+outside the boundary of the cell, which is unimportant
+in ordinary output, but means that they will appear one space to the
+right and one line below the cell in plain text output. This explains
+the slight asymmetry in the example above; you can correct it with
+@ID @Code @Verbatim {
+@Tbl
+ marginright { 1s }
+ marginbelow { 1f }
+}
+but you still have to worry about rules at the extreme right of the
+page going off the edge, and rules below the last line bumping into
+whatever follows the table. The first can be fixed by not using
+full width tables with right rules; the second by inserting an extra
+@Code "@DP" after a table that ends with a below rule.
+@End @Section
diff --git a/doc/user/tbl_rows b/doc/user/tbl_rows
new file mode 100644
index 0000000..7d26b75
--- /dev/null
+++ b/doc/user/tbl_rows
@@ -0,0 +1,59 @@
+@Section
+ @Title { Changing the appearance of rows }
+ @Tag { tbl_rows }
+@Begin
+@PP
+We've seen that the @Code aformat option of @Code "@Tbl" determines the
+format of the rows introduced by the @Code "@Rowa" symbol. There are
+eight of these row format options: {@Code aformat},
+row.formats @Index { row formats in tables }
+{@Code bformat}, and so on up to {@Code hformat}, and for each there
+is a corresponding {@Code "@Row"} symbol: {@Code "@Rowa"}, {@Code "@Rowb"},
+and so on up to {@Code "@Rowh"}:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ aformat { @Cell @I A | @Cell @I B }
+ bformat { @Cell A | @Cell B }
+{
+@Rowa
+ A { Name }
+ B { Nationality }
+@Rowb
+ A { Austen }
+ B { English }
+@Rowb
+ A { Balzac }
+ B { French }
+}
+}
+The result of this is
+@CD @OneRow @Tbl
+ aformat { @Cell @I A | @Cell @I B }
+ bformat { @Cell A | @Cell B }
+{
+@Rowa
+ A { Name }
+ B { Nationality }
+@Rowb
+ A { Austen }
+ B { English }
+@Rowb
+ A { Balzac }
+ B { French }
+}
+The first row, being a {@Code "@Rowa"}, is formatted using
+{@Code aformat}; the others, being {@Code "@Rowb"} symbols, are
+formatted using {@Code bformat}.
+@PP
+In addition to the eight @Code format options of {@Code "@Tbl"}, it is
+possible to specify the format of a row at the row itself, using the
+@Code "@Row" symbol like this:
+@ID @OneRow @Code @Verbatim {
+@Row
+ format { @Cell @B A | @Cell paint { lightgrey } B }
+ A { ... }
+ B { ... }
+}
+All formats must contain the same number of cells, otherwise the table
+will not be rectangular.
+@End @Section
diff --git a/doc/user/tbl_rule b/doc/user/tbl_rule
new file mode 100644
index 0000000..383ffab
--- /dev/null
+++ b/doc/user/tbl_rule
@@ -0,0 +1,192 @@
+@Section
+ @Title { Rules }
+ @Tag { tbl_rule }
+@Begin
+@PP
+There is a @Code "rule" option for drawing a rule around a cell:
+@ID @OneRow @Code "@Cell rule { yes }"
+The other possible values are {@Code no} (the default),
+{@Code single} (the same as {@Code yes}), and {@Code double}, which
+draws a double rule.
+@PP
+There are @Code "rulehorizontal" and @Code "rulevertical" options which
+draw only horizontal or vertical rules, and also {@Code "ruleabove"},
+{@Code "rulebelow"}, {@Code "ruleleft"}, and {@Code "ruleright"} options:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ aformat { @Cell A | @Cell B }
+{
+@Rowa
+ ruleabove { yes }
+ A { Commercial property }
+ B { 10% }
+@Rowa
+ A { Stock market }
+ B { 15% }
+ rulebelow { yes }
+}
+}
+produces
+@CD @OneRow @Tbl
+ aformat { @Cell A | @Cell B }
+{
+@Rowa
+ ruleabove { yes }
+ A { Commercial property }
+ B { 10% }
+@Rowa
+ A { Stock market }
+ B { 15% }
+ rulebelow { yes }
+}
+These options take the same values as {@Code "rule"}, but draw
+along only one or two of the four edges.
+@PP
+Other options control the appearance of rules. Here they are with their
+default values:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ rulewidth { 0.05f }
+ rulegap { 0.15f }
+ rulecolour { black }
+}
+These say that rules are to be @Code "0.05f" wide (thick), double rules
+are to appear @Code "0.15f" apart, and the colour of rules is to be black.
+Once again, more specific versions of these symbols exist for controlling
+above, below, left, and right rules:
+@ID @OneRow @Code @Tbl
+ aformat { @Cell ml { 0i } A | @Cell B | @Cell C }
+ marginvertical { 0.5vx }
+{
+@Rowa
+ A { rulehorizontalwidth }
+ B { rulehorizontalgap }
+ C { rulehorizontalcolour }
+@Rowa
+ A { ruleabovewidth }
+ B { ruleabovegap }
+ C { ruleabovecolour }
+@Rowa
+ A { rulebelowwidth }
+ B { rulebelowgap }
+ C { rulebelowcolour }
+@Rowa
+ A { ruleverticalwidth }
+ B { ruleverticalgap }
+ C { ruleverticalcolour }
+@Rowa
+ A { ruleleftwidth }
+ B { ruleleftgap }
+ C { ruleleftcolour }
+@Rowa
+ A { rulerightwidth }
+ B { rulerightgap }
+ C { rulerightcolour }
+}
+As usual, all these options have abbreviated names; and @Code { colour }
+may be spelt @Code { color } wherever it appears. Section
+{@NumberOf tbl_summ} has a complete summary of all spellings of all
+options.
+@PP
+To clarify exactly where the rules are drawn, let's start with
+a cell with no rules at all:
+@CD @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } paint { lightgrey } A }
+{
+@Rowa
+}
+Above rules and left rules are drawn within the cell boundary, just
+touching it, with any above rule overstriking any left rule:
+@CD { @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } paint { lightgrey } A }
+{
+@Rowa
+}
+@Background @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } A }
+ ruleleft { yes }
+ ruleabove { yes }
+ rulehorizontalwidth { 0.8v }
+ ruleverticalwidth { 0.5v }
+ ruleverticalcolour { grey }
+ rulehorizontalcolour { black }
+{
+@Rowa
+}
+}
+Below and right rules are drawn just outside the boundary of the
+cell, also touching it:
+@CD @Tbl aformat { @Cell A | @Cell | @Cell B }
+{
+@Rowa
+ A {
+ @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } paint { lightgrey } A }
+ {
+ @Rowa
+ }
+ @Background
+ @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } A }
+ rulebelow { yes }
+ rulehorizontalwidth { 0.8v }
+ ruleverticalwidth { 0.5v }
+ ruleverticalcolour { grey }
+ rulehorizontalcolour { black }
+ {
+ @Rowa
+ }
+ }
+ B {
+ @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } paint { lightgrey } A }
+ {
+ @Rowa
+ }
+ @Background
+ @Tbl
+ aformat { @Cell width { 3c } height { 1.5c } A }
+ ruleright { yes }
+ rulehorizontalwidth { 0.8v }
+ ruleverticalwidth { 0.5v }
+ ruleverticalcolour { grey }
+ rulehorizontalcolour { black }
+ {
+ @Rowa
+ }
+ }
+}
+@DP
+When a right rule is present, any above and below rules are extended
+by the width of the right rule, and they overstrike it:
+@CD {
+@Tbl
+ aformat { @Cell width { 3c } height { 1.5c } paint { lightgrey } A }
+{
+@Rowa
+}
+@Background
+@Tbl
+ aformat { @Cell width { 3c } height { 1.5c } A }
+ ruleabove { yes }
+ ruleright { yes }
+ rulebelow { yes }
+ rulehorizontalwidth { 0.8v }
+ ruleverticalwidth { 0.5v }
+ ruleverticalcolour { grey }
+ rulehorizontalcolour { black }
+{
+@Rowa
+}
+}
+@DP
+(These diagrams were produced by @Code "@Tbl" itself, using horizontal
+rules of width @Code 0.8v drawn in black, and vertical rules of width
+@Code 0.5v drawn in grey.) These arrangements ensure that even thick
+rules produce clean corners, and also that a right rule and a neighbouring
+left rule exactly overstrike each other, as do a below rule and its
+neighbouring above rule.
+@PP
+For information about rules in plain text tables, consult Section
+{@NumberOf tbl_plai}.
+@End @Section
diff --git a/doc/user/tbl_setu b/doc/user/tbl_setu
new file mode 100644
index 0000000..74bdb9a
--- /dev/null
+++ b/doc/user/tbl_setu
@@ -0,0 +1,65 @@
+@Section
+ @Title { Changing the overall format }
+ @Tag { tbl_setu }
+@Begin
+@PP
+All of the options apart from the @Code format options can be changed
+setup.files.tables @Index { setup files for tables }
+in the @Code { tbl } setup file, in which case the new values become
+the default values for every table in the document. This section
+explains how to do it. Changing options in the setup file can save a
+lot of time, but its more important purposes are to promote consistency
+and to allow document-wide formatting changes to be carried out easily.
+@PP
+The first step is to obtain your own copy of the setup file, @Code { tbl },
+from the Lout system include directory. You can find out where that
+is by typing
+@ID @Code { lout -V }
+This prints out various things about Lout. Supposing that it says
+that the Lout system include directory is @Code { "/usr/lout/include" }, for
+example, you can copy the setup file into your current directory,
+renaming it @Code { mytbl }, with the Unix command
+@ID @Code "cp /usr/lout/include/tbl mytbl"
+or its equivalent on your system. You will also need to make
+@Code { mytbl } writable.
+@PP
+The next step is to replace the @Code "@SysInclude { tbl }" line at the
+start of your document with @Code { "@Include { mytbl }" }. This causes
+Lout to read your copy of the setup file, not the one in the system
+include directory. Since the two files are currently identical, this
+has changed nothing so far, but now you can change the options within
+@Code mytbl and the changes will affect your document.
+@PP
+Your copy of the setup file has some lines beginning with @Code "#"
+that are ignored by Lout, and then it has @Code { "@SysInclude { tblf }" }.
+This line tells Lout to read file @Code tblf which contains the definition
+of the @Code tbl package, so it should not be changed. After it comes
+the @Code "@TblSetup" @Code "@Use" clause, which looks like this:
+@ID @OneRow @Code @Verbatim {
+@Use { @TblSetup
+ # paint { nopaint }
+ # font { }
+ # break { }
+}
+}
+Only a few of the options are shown here. To change a setup file
+option, delete the @Code "#" in front of it and change the value. For
+example, suppose you want all table entries two points smaller than the
+surrounding text:
+@ID @OneRow @Code @Verbatim {
+@Use { @TblSetup
+ # paint { nopaint }
+ font { -2p }
+ # break { }
+}
+}
+This relative specification of font size is available anywhere, not
+just in setup files (Section {@NumberOf fonts}).
+@PP
+Some setup file options contain values which use the @Code "@OrIfPlain"
+symbol:
+@ID @Code "marginvertical { 0.3f @OrIfPlain 1f }"
+This means that the value of @Code marginvertical is to be @Code "0.3f"
+usually, but @Code 1f in plain text documents. Feel free to leave these
+symbols there when you change a value, or delete them if you prefer.
+@End @Section
diff --git a/doc/user/tbl_span b/doc/user/tbl_span
new file mode 100644
index 0000000..5621961
--- /dev/null
+++ b/doc/user/tbl_span
@@ -0,0 +1,195 @@
+@Section
+ @Title { Spanning columns and rows }
+ @Tag { tbl_span }
+@Begin
+@PP
+To make a cell span across several columns, precede the @Code "@Cell"
+spanning.columns @Index { spanning columns and rows in tables }
+symbol with @Code "@StartHSpan" and replace each spanned cell's
+@Code "@Cell" symbol with {@Code "@HSpan"}, like this:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ rule { yes }
+ aformat { @StartHSpan @Cell indent { ctr } @B A | @HSpan | @HSpan }
+ bformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { Some famous authors }
+@Rowb
+ A { Austen }
+ B { Chaucer }
+ C { Donne }
+@Rowb
+ A { Balzac }
+ B { Darwin }
+ C { Goethe }
+}
+}
+The result of this is
+@CD @OneRow @Tbl
+ rule { yes }
+ aformat { @StartHSpan @Cell indent { ctr } @B A | @HSpan | @HSpan }
+ bformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { Some famous authors }
+@Rowb
+ A { Austen }
+ B { Chaucer }
+ C { Donne }
+@Rowb
+ A { Balzac }
+ B { Darwin }
+ C { Goethe }
+}
+We've used a sample of options to show how naturally these go with
+spanning cells: they apply to the whole cell as usual, whatever
+its extent. It is quite acceptable to span just some of the columns,
+not all of them; indeed, there may be no @Code "@HSpan" symbols at
+all, and then the cell just spans its own column, which sounds redundant
+but actually has a use (Section {@NumberOf tbl_alig}).
+@PP
+Spanning rows work in the same way; the spanning cell is preceded by
+{@Code "@StartVSpan"}, and the spanned cells are replaced by
+{@Code "@VSpan"}:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ rule { yes }
+ aformat { @StartVSpan @Cell @I A | @Cell B | @Cell C }
+ bformat { @VSpan | @Cell B | @Cell C }
+{
+@Rowa
+ A { Mathematics }
+ B { MATH 1001 }
+ C { Differential Calculus }
+@Rowb
+ B { MATH 1002 }
+ C { Linear Algebra }
+@Rowa
+ A { Computer Science }
+ B { COMP 1001 }
+ C { Introductory Programming }
+@Rowb
+ B { COMP 1002 }
+ C { Introductory Computer Science }
+}
+}
+The result of this is
+@CD @OneRow @Tbl
+ rule { yes }
+ aformat { @StartVSpan @Cell @I A | @Cell B | @Cell C }
+ bformat { @VSpan | @Cell B | @Cell C }
+{
+@Rowa
+ A { Mathematics }
+ B { MATH 1001 }
+ C { Differential Calculus }
+@Rowb
+ B { MATH 1002 }
+ C { Linear Algebra }
+@Rowa
+ A { Computer Science }
+ B { COMP 1001 }
+ C { Introductory Programming }
+@Rowb
+ B { COMP 1002 }
+ C { Introductory Computer Science }
+}
+Here is a notorious larger example, the `spiral':
+@ID @OneRow @Code @Verbatim {
+@QuotedDisplay @Tbl
+ rule { yes }
+{
+@Row
+ format { @StartVSpan @Cell A | @StartHSpan @Cell B | @HSpan }
+ A { @SomeText }
+ B { @SomeText }
+@Row
+ format { @VSpan | @Cell B | @StartVSpan @Cell C }
+ B { @SomeText }
+ C { @SomeText }
+@Row
+ format { @StartHSpan @Cell A | @HSpan | @VSpan }
+ A { @SomeText }
+}
+}
+The @Code "@SomeText" symbol produces a short paragraph of text. The
+result is
+@QD @Tbl
+ rule { yes }
+{
+@Row format { @StartVSpan @Cell A | @StartHSpan @Cell B | @HSpan }
+ A { @SomeText }
+ B { @SomeText }
+@Row format { @VSpan | @Cell B | @StartVSpan @Cell C }
+ B { @SomeText }
+ C { @SomeText }
+@Row format { @StartHSpan @Cell A | @HSpan | @VSpan }
+ A { @SomeText }
+}
+It is important when constructing mind-boggling tables like this one
+to ensure that every format has exactly the same number of @Code "|"
+symbols. Otherwise the number of columns will differ from row to row.
+The names given to the entries ({@Code "A"}, {@Code "B"}, {@Code "C"},
+etc.) are quite irrelevant: having a @Code "@Cell D" in one row and a
+@Code "@Cell D" in another does not mean that the cells will appear in
+the same column.
+@PP
+There is an asymmetry in the spiral above: the first column
+occupies slightly more space than the other two. This arises
+because the left margin of the leftmost column is excluded from the
+calculation of how much space is available. This anomaly might be
+corrected some day.
+@PP
+There is a @Code "@StartHVSpan" symbol which combines the effects
+of @Code "@StartHSpan" and {@Code "@StartVSpan"}. You need to
+use it in this arrangement:
+@ID @OneRow @Tbl
+ mv { 0.5vx }
+ aformat { @Cell @Code A | @Cell @Code B | @Cell @Code C }
+{
+@Rowa
+ A { "@StartHVSpan" }
+ B { "@HSpan" }
+ C { "@HSpan" }
+@Rowa
+ A { "@VSpan" }
+@Rowa
+ A { "@VSpan" }
+}
+The blank positions should be left empty. For example:
+@ID @OneRow @Code @Verbatim {
+@Tbl
+ rule { yes }
+ aformat { @Cell A | @Cell B | @Cell C | @Cell D }
+ bformat { @Cell A | @StartHVSpan @Cell i { ctr } iv { ctr } B | @HSpan | @Cell D }
+ cformat { @Cell A | @VSpan | | @Cell D }
+{
+@Rowa
+@Rowb
+ B { CPU }
+@Rowc
+@Rowa
+}
+}
+produces
+@CD @OneRow @Tbl
+ rule { yes }
+ strut { no }
+ aformat { @Cell A | @Cell B | @Cell C | @Cell D }
+ bformat { @Cell A | @StartHVSpan @Cell i { ctr } iv { ctr } B | @HSpan | @Cell D }
+ cformat { @Cell A | @VSpan | | @Cell D }
+{
+@Rowa
+@Rowb
+ B { CPU }
+@Rowc
+@Rowa
+}
+This example illustrates how Lout apportions space in the presence of
+spanning columns. If the spanning cell is naturally narrower than the
+cells it spans, it is widened to their size. If it is wider (as in
+the example above), then the last spanned cell is widened to take
+up the slack. This is why the third cell is wider than the second in the
+first row of this example.
+@End @Section
diff --git a/doc/user/tbl_summ b/doc/user/tbl_summ
new file mode 100644
index 0000000..6fed734
--- /dev/null
+++ b/doc/user/tbl_summ
@@ -0,0 +1,255 @@
+@Section
+ @Title { Summary of options }
+ @Tag { tbl_summ }
+@Begin
+@PP
+This summary applies to all @Code "@Tbl" options except the @Code format
+options described in Section {@NumberOf tbl_rows}. Here is the complete
+list of these options, one option per line, showing its alternative
+spellings, default values (PostScript and PDF, and plain text) from the setup
+file, and allowed range of values. Where one option is indented below
+another, it means that the indented option is a specialized version of
+the other, which affects its default value. For more on this see below.
+@DP
+@Tbl
+ marginvertical { 0.5vx }
+ aformat { @Cell ml { 0i } @Code A |
+ @Cell @Code B | @Cell @Code C | @Cell mr { 0i } D }
+ bformat { @Cell ml { 0i } indent { 1f } @Code A |
+ @Cell @Code B | @Cell @Code C | @Cell mr { 0i } D }
+ cformat { @Cell ml { 0i } indent { 2f } @Code A |
+ @Cell @Code B | @Cell @Code C | @Cell mr { 0i } D }
+ dfont { Italic }
+ dbreak { lines }
+ dformat { @Cell ml { 0i } A | @Cell B | @Cell C | @Cell mr { 0i } D }
+ fformat { @StartHSpan @Cell ml { 0i } @Code A |
+ @HSpan | @HSpan | @Cell mr { 0i } D }
+ gformat { @StartHSpan @Cell ml { 0i } indent { 1f } @Code A |
+ @HSpan | @HSpan | @Cell mr { 0i } D }
+ hformat { @StartHSpan @Cell ml { 0i } indent { 2f } @Code A |
+ @HSpan | @HSpan | @Cell mr { 0i } D }
+{
+@Rowd
+ A { Option names }
+ B { Default in
+PS, PDF }
+ C { Default in
+plain text }
+ D { Allowed values }
+ rulebelow { yes }
+@Rowa
+ A { paint p }
+ B { nopaint }
+ D { any colour from Section {@NumberOf colour} }
+@Rowa
+ A { background bg }
+ D { any object }
+@Rowa
+ A { font f }
+ D { any font e.g. @Code "Helvetica Slope -2p" }
+@Rowa
+ A { break b }
+ D { any break e.g. @Code "ragged nohyphen" }
+@Rowa
+ A { width w }
+ D { @Code "expand" or any length e.g. @Code 5c }
+@Rowa
+ A { height h }
+ D { any length e.g. @Code 3c }
+@Rowa
+ A { indent i }
+ D { {@Code left}, {@Code ctr}, {@Code mctr}, {@Code right}, or any length }
+@Rowa
+ A { indentvertical iv }
+ D { {@Code top}, {@Code ctr}, {@Code mctr}, {@Code foot}, or any length }
+@Rowa
+ A { strut s }
+ B { yes }
+ C { yes }
+ D { {@Code no}, {@Code yes}, or any length }
+@Rowa
+ A { struthorizontal sh }
+ B { no }
+ C { no }
+ D { {@Code no}, {@Code yes}, or any length }
+@Rowa
+@Rowa
+ A { margin m }
+ B { }
+ C { }
+ D { any length }
+@Rowb
+ A { marginhorizontal mh }
+ B { 0.6f }
+ C { 2s }
+ D { any length }
+@Rowc
+ A { marginleft ml }
+ D { any length }
+@Rowc
+ A { marginright mr }
+ D { any length }
+@Rowb
+ A { marginvertical mv }
+ B { 0.3f }
+ C { 2f }
+ D { any length }
+@Rowc
+ A { marginabove ma }
+ D { any length }
+@Rowc
+ A { marginbelow mb }
+ D { any length }
+@Rowa
+@Rowa
+ A { rule r }
+ B { no }
+ C { no }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowb
+ A { rulehorizontal rh }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowc
+ A { ruleabove ra }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowc
+ A { rulebelow rb }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowb
+ A { rulevertical rv }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowc
+ A { ruleleft rl }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowc
+ A { ruleright rr }
+ D { {@Code no}, {@Code yes}, {@Code single}, or {@Code double} }
+@Rowa
+@Rowa
+ A { rulewidth rw }
+ B { 0.05f }
+ D { any length }
+@Rowb
+ A { rulehorizontalwidth rhw }
+ C { 1f }
+ D { any length }
+@Rowc
+ A { ruleabovewidth raw }
+ D { any length }
+@Rowc
+ A { rulebelowwidth rbw }
+ D { any length }
+@Rowb
+ A { ruleverticalwidth rvw }
+ C { 1s }
+ D { any length }
+@Rowc
+ A { ruleleftwidth rlw }
+ D { any length }
+@Rowc
+ A { rulerightwidth rrw }
+ D { any length }
+@Rowa
+@Rowa
+ A { rulegap rg }
+ B { 0.15f }
+ D { any length }
+@Rowb
+ A { rulehorizontalgap rhg }
+ C { 0f }
+ D { any length }
+@Rowc
+ A { ruleabovegap rag }
+ D { any length }
+@Rowc
+ A { rulebelowgap rbg }
+ D { any length }
+@Rowb
+ A { ruleverticalgap rvg }
+ C { 0s }
+ D { any length }
+@Rowc
+ A { ruleleftgap rlg }
+ D { any length }
+@Rowc
+ A { rulerightgap rrg }
+ D { any length }
+@Rowa
+@Rowa
+ A { rulecolour rulecolor rc }
+ B { black }
+ D { any colour from Section {@NumberOf colour} }
+@Rowg
+ A { rulehorizontalcolour rulehorizontalcolor rhc }
+ D { any colour from Section {@NumberOf colour} }
+@Rowh
+ A { ruleabovecolour ruleabovecolor rac }
+ D { any colour from Section {@NumberOf colour} }
+@Rowh
+ A { rulebelowcolour rulebelowcolor rbc }
+ D { any colour from Section {@NumberOf colour} }
+@Rowg
+ A { ruleverticalcolour ruleverticalcolor rvc }
+ D { any colour from Section {@NumberOf colour} }
+@Rowh
+ A { ruleleftcolour ruleleftcolor rlc }
+ D { any colour from Section {@NumberOf colour} }
+@Rowh
+ A { rulerightcolour rulerightcolor rrc }
+ D { any colour from Section {@NumberOf colour} }
+@Rowa
+@Rowa
+ A { ruleplainchar rpc }
+ C { . }
+ D { any simple word e.g. @Code + }
+ rulebelow { yes }
+}
+@DP
+There are seven places where these options may be given, counting the
+setup file (Section {@NumberOf tbl_setu}). To make it clear that this
+summary applies to any of these options, we illustrate the seven places
+with a fictitious option called {@Code option}:
+@ID @OneRow @Code @Verbatim {
+@Use { @TblSetup
+ option { 1 }
+}
+
+@Tbl
+ option { 2 }
+ aoption { 3 }
+ aformat { @Cell option { 4 } A }
+{
+ @Rowa
+ option { 5 }
+ @Row
+ option { 6 }
+ format { @Cell option { 7 } A }
+}
+}
+Each occurrence of @Code option is of course optional. If there are
+none, the default value given in the table above applies. For any other
+combination of absent and present options, the value that applies is the
+present and relevant one with the largest number in the illustration
+just above. But before applying this rule, any general options must be
+thought of as being replaced by their more specialized versions:
+@ID @Code "rulehorizontal { yes }"
+is equivalent to
+@ID @Code @Verbatim {
+ruleabove { yes }
+rulebelow { yes }
+}
+for example. Conflicts are resolved in the logical way:
+@ID @Code @Verbatim {
+margin { 0.5f }
+marginleft { 0.0f }
+}
+is equivalent to the four specialized options
+@ID @Code @Verbatim {
+marginabove { 0.5f }
+marginbelow { 0.5f }
+marginleft { 0.0f }
+marginright { 0.5f }
+}
+General options are really just abbreviations for sets of specialized
+options.
+@End @Section
diff --git a/doc/user/tbl_widt b/doc/user/tbl_widt
new file mode 100644
index 0000000..b2e39ad
--- /dev/null
+++ b/doc/user/tbl_widt
@@ -0,0 +1,84 @@
+@Section
+ @Title { Cell width and height }
+ @Tag { tbl_widt }
+@Begin
+@PP
+Lout is quite good a choosing suitable widths for cells. It leaves
+narrow cells at their natural width, then uses paragraph breaking to
+reduce the wider cells to a common width which is as large as
+the available space allows:
+@QD @OneRow @Tbl
+ aformat { @Cell @I A | @Cell B | @Cell C }
+{
+@Rowa
+ A { Acacia }
+ B {
+Shrub or small tree with grey-green foliage and brilliant
+yellow blossom in late winter.
+}
+ C {
+Distributed widely throughout Australia except in the most arid
+parts; many varieties.
+}
+}
+This usually looks good, but if you need something else, the @Code width
+option may be used to give a particular width to a cell:
+@ID @OneRow @Code "@Cell width { 3c }"
+Here we have asked for a cell width of three centimetres; this includes
+the cell margins. When using @Code width to fine-tune the appearance of
+a table wide enough to require paragraph breaking, it is best to use
+@Code width to make cells narrower, not wider.
+@PP
+Regrettably, there is no way to request that several cells in a row be
+given a common width equal to the width of the widest. One simple way to
+approximate this is to give these cells the same @Code width value. The
+@Code width option also has a special value, {@Code "expand"}. All
+cells with @Code "width { expand }" are assigned a common width
+expand.cell.width @Index { @Code expand cell width in tables }
+equal to the maximum amount permitted by the available space. For example,
+@ID @OneRow @Code @Verbatim {
+@QuotedDisplay @Tbl
+ width { expand }
+ paint { lightgrey }
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { 23.56 }
+ B { 98.76 }
+ C { 65.00 }
+}
+}
+has result
+@QuotedDisplay @Tbl
+ width { expand }
+ paint { lightgrey }
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { 23.56 }
+ B { 98.76 }
+ C { 65.00 }
+}
+We have used our usual trick of making the option apply to several cells
+by moving it to a more general level, in this case to {@Code "@Tbl"}.
+The available space can be reduced using the @Code "@Wide" symbol; if
+we replace @Code "@QuotedDisplay @Tbl" in the example above with
+@ID @OneRow @Code "@CentredDisplay 4i @Wide @Tbl"
+the result will be
+@CentredDisplay 4i @Wide @Tbl
+ width { expand }
+ paint { lightgrey }
+ aformat { @Cell A | @Cell B | @Cell C }
+{
+@Rowa
+ A { 23.56 }
+ B { 98.76 }
+ C { 65.00 }
+}
+with the total table width reduced to four inches.
+@PP
+There is an analogous @Code height option which makes a cell take on
+a particular fixed height, again including margins. Make sure there
+is enough height in the cell to hold its entry when you use this
+option. The @Code "expand" value is not available for height.
+@End @Section
diff --git a/doc/user/typ b/doc/user/typ
new file mode 100644
index 0000000..7ebe52f
--- /dev/null
+++ b/doc/user/typ
@@ -0,0 +1,27 @@
+@Chapter
+ @Title { Types of Documents }
+ @Tag { types }
+@Begin
+@LP
+Particular types of documents have specialized formatting requirements:
+title pages in books, abstracts in technical reports, and so on. Lout
+provides a range of @I { document types } with the appropriate
+specialized features for
+document.types @Index { document types }
+each type.
+@PP
+There are five types: ordinary documents, technical reports,
+books, overhead transparencies, and stand-alone illustrations. The
+features of all other chapters are available within each document type,
+but the features of one type are not available within other types.
+@BeginSections
+@Include { typ_ordi }
+@Include { typ_repo }
+@Include { typ_book }
+@Include { typ_over }
+@Include { typ_illu }
+@Include { typ_plai }
+@Include { typ_apdf }
+@Include { typ_orga }
+@EndSections
+@End @Chapter
diff --git a/doc/user/typ_apdf b/doc/user/typ_apdf
new file mode 100644
index 0000000..3203384
--- /dev/null
+++ b/doc/user/typ_apdf
@@ -0,0 +1,21 @@
+@Section
+ @Title { PDF (Adobe Portable Document Format) documents }
+ @Tag { pdf }
+@Begin
+@PP
+You can get Lout to produce PDF (Adobe Portable Document Format) output as
+an alternative to PostScript, by adding @Code "-PDF" to the command line
+like this:
+pdf. @Index { PDF documents }
+@ID @Code "lout -PDF simple > simple.pdf"
+No other changes are required.
+@PP
+The PDF output is superior to PostScript in providing links: when viewed
+with a PDF viewer, entries in tables of contents and indexes can be
+clicked on and this transports the viewer to the part of the document
+referenced by the link. (Recent versions of PostScript support this
+feature too, but Lout's PostScript doesn't.) However, the PDF output
+produced by Lout is inferior at graphics: the advanced features of the
+@Code "@Diag" and @Code "@Graph" packages do not produce any output. One
+can still format documents that contain them, but the results are disappointing.
+@End @Section
diff --git a/doc/user/typ_book b/doc/user/typ_book
new file mode 100644
index 0000000..34abde2
--- /dev/null
+++ b/doc/user/typ_book
@@ -0,0 +1,420 @@
+@Section
+ @Title { Books }
+ @Tag { books }
+@Begin
+@PP
+To produce a book, start off with the @Code book setup file and the
+books. @Index { books }
+book. @Index @Code "@Book"
+@Code "@Book" symbol:
+@ID @OneRow @Code {
+"@SysInclude { book }"
+"@Book"
+" @Title {}"
+" @Author {}"
+" @Edition {}"
+" @Publisher {}"
+" @BeforeTitlePage {}"
+" @OnTitlePage {}"
+" @AfterTitlePage {}"
+" @AtEnd {}"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { adjust 1.2fx hyphen }"
+" @InitialSpace { lout }"
+" @InitialLanguage { English }"
+" @PageOrientation { Portrait }"
+" @PageHeaders { Titles }"
+" @ColumnNumber { 1 }"
+" @FirstPageNumber { 1 }"
+" @IntroFirstPageNumber { 1 }"
+" @OptimizePages { No }"
+"//"
+}
+This shows all the options of @Code "@Book" with their default values. As
+usual, these options may be given in any order, and only those
+to be changed need be given at all. The meaning of the
+@Code "//" symbol after the last option is beyond our scope, but total
+disaster will ensue if it is forgotten.
+@PP
+The {@Code "@Title"}, {@Code "@Author"}, and {@Code "@Edition"} options
+will appear on the title page, in the @Code "clines" paragraph breaking
+style which centres each line (Section {@NumberOf paras}). The
+@Code "@Publisher" option will appear at the foot of the title page.
+@PP
+The {@Code "@BeforeTitlePage"} option will come out on the page (or
+pages) preceding the title page. This is where publishers
+advertise other books of a similar kind, perhaps from a series.
+@PP
+If {@Code "@OnTitlePage"} is given it will replace the title page
+that usually appears, superseding the {@Code "@Title"}, {@Code "@Author"},
+{@Code "@Edition"}, and @Code "@Publisher" options in the process.
+@PP
+The {@Code "@AfterTitlePage"} option will come out on the page
+(or pages) following the title page. This is where publishers
+traditionally put copyright notices, information about production,
+and cataloguing-in-publication data. If this option is empty or
+omitted, there will be no such pages.
+@PP
+The {@Code "@AtEnd"} option will come out on a single unnumbered page
+with no page headers or footers, and using the same margins as for even
+pages, after the very last page of the book; even after the index if
+there is one. It is intended to make it possible to include a back
+cover, so @Code "@PageOf last.page" (Section {@NumberOf cross}) does
+not take account of any @Code "@AtEnd" page.
+@PP
+The remaining options are a selection of setup file options (Section
+{@NumberOf setup}) that frequently need to be changed. If your changes
+to the overall formatting are confined to these options, you can change
+them here and avoid having your own setup file. If you already have
+your own setup file, change them in either place and omit them in
+the other.
+@PP
+@Code "@InitialFont" is the font of the bulk of the book,
+and should contain a family, a face, and a size. The default
+value selects the Times family, the Base face, and the 12 point size.
+@PP
+@Code "@InitialBreak" controls the behaviour of paragraph breaking in
+the bulk of the book. It should have three parts: a paragraph
+breaking style ({@Code adjust}, {@Code ragged}, etc.), an inter-line
+spacing ({@Code "1.2fx"} for single spacing, {@Code "2.4fx"} for
+double spacing, and so on), and either @Code "hyphen" or
+@Code "nohyphen" for turning hyphenation on or off. It may also
+have @Code "nobreakfirst" or @Code "nobreaklast" (or both), meaning
+to disallow a page break after the first line of a paragraph, or
+before the last, respectively.
+@PP
+@Code "@InitialSpace" determines how Lout treats white space
+between two objects, as described in Section
+{@NumberOf white}. @Code "@InitialLanguage" determines the
+language of the bulk of the book.
+@PP
+@Code "@PageOrientation" determines the orientation of the page. Its
+value may be {@Code Portrait} (the default), {@Code Landscape},
+{@Code ReversePortrait}, or {@Code ReverseLandscape}. See
+Section {@NumberOf pagesize} for further details.
+@PP
+@Code "@PageHeaders" determines the appearance of page headers and
+footers. Its value may be {@Code None},
+{@Code Simple}, {@Code Titles}, or {@Code NoTitles}. Section
+{@NumberOf headers} has the details, but just briefly, {@Code None}
+and {@Code Simple} are not really suitable for books, @Code Titles
+produces full running titles as in the present document, and
+@Code "NoTitles" is like @Code "Titles" with the running titles
+omitted, leaving just the page numbers.
+@PP
+@Code "@ColumnNumber" is the number of columns per page in the bulk of
+the book, and may be anything from {@Code 1} (the default value) to
+{@Code 10}. Irrespective of its value, all prefatory material, all
+chapter and appendix headings, and all figures and tables will be
+printed full width. There is a separate @Code "@IndexColumnNumber"
+option in the setup file which determines the number of columns in
+the index (Section {@NumberOf indexes}).
+@PP
+@Code "@FirstPageNumber" is the page number to be given to the first
+non-introductory page. @Code "@IntroFirstPageNumber" is the
+page number of the first introductory page; it will usually appear
+in Roman but must be given in Arabic.
+@PP
+Lout ordinarily places lines onto a page until space runs out, then moves
+to the next page and so on. This often produces ugly empty spaces at
+the bottoms of pages preceding large unbreakable displays. Setting the
+@Code "@OptimizePages" option to {@Code "Yes"} causes Lout to examine the
+overall situation and try to minimize the ugliness, using the @TeX
+optimal paragraph breaking algorithm. It takes two runs to do this,
+with intermediate results stored in Lout's cross reference database
+(Section {@NumberOf cross}); so deleting file {@Code lout.li} will reset
+it, which might be wise after major changes. It is possible for the
+optimizer to cycle, never settling on a single final best version; this
+is usually caused by footnotes or floating figures inserted at points
+which end up near page boundaries.
+@PP
+After the compulsory @Code "//" comes an optional preface:
+preface. @Index @Code "@Preface"
+@ID @OneRow @Code {
+"@Preface"
+" @Title { About this book }"
+"@Begin"
+"@PP"
+"..."
+"@End @Preface"
+}
+Since the title of most prefaces is simply Preface, that is the default
+value in English of the @Code "@Title" option. After the preface there
+will automatically appear a table of contents listing the introduction,
+chapters, sections, subsections, appendices, sub-appendices, bibliography,
+and index as appropriate.
+@PP
+The pages up to this point will be numbered in lower case Roman
+numerals; subsequent pages will be numbered in Arabic starting from
+the @Code "@FirstPageNumber" option of {@Code "@Book"}. There is
+a setup file option for changing this to a single numbering sequence
+(see below).
+@PP
+Next comes an optional abbreviations sections, exactly like the
+preface except that its name is @Code "@Abbreviations" and the
+abbreviations. @Index @Code "@Abbreviations"
+default title in English is Abbreviation. There is no support for
+what goes inside; you need to use a list or table to lay out the
+abbreviations, in the usual way.
+@PP
+Next comes an optional introduction, exactly like the preface except that
+its name is @Code "@Introduction" and the default title in English is
+introduction. @Index @Code "@Introduction"
+Introduction:
+@ID @OneRow @Code {
+"@Introduction"
+"@Begin"
+"@PP"
+"..."
+"@End @Introduction"
+}
+After that comes a sequence of chapters in the usual style:
+chapter. @Index @Code "@Chapter"
+@ID @OneRow @Code {
+"@Chapter"
+" @Title { Australian Native Plants }"
+"@Begin"
+"@PP"
+"..."
+"@End @Chapter"
+}
+No @Code "@BeginChapters" or @Code "@EndChapters" symbols are
+beginchapters. @Index @Code "@BeginChapters"
+endchapters. @Index @Code "@EndChapters"
+needed, because these chapters are not inside any other large-scale
+structure symbol. Within a chapter, there may be a sequence of sections,
+each introduced by {@Code "@Section"}, all bracketed
+section.books @SubIndex { in books }
+by @Code "@BeginSections" and {@Code "@EndSections"}:
+beginsections.books @SubIndex { in books }
+endsections.books @SubIndex { in books }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSections"
+"@Section ... @End @Section"
+"@Section ... @End @Section"
+"..."
+"@Section ... @End @Section"
+"@EndSections"
+}
+Within each section there may be subsections, each introduced by
+{@Code "@SubSection"}, and the sequence as a whole bracketed by
+@Code "@BeginSubSections" and {@Code "@EndSubSections"}:
+subsection.books @SubIndex { in books }
+beginsubsections.books @SubIndex { in books }
+endsubsections.books @SubIndex { in books }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubSections"
+"@SubSection ... @End @SubSection"
+"@SubSection ... @End @SubSection"
+"..."
+"@SubSection ... @End @SubSection"
+"@EndSubSections"
+}
+The subsections may contain sub-subsections, but
+subsubsection.books @SubIndex { in books }
+beginsubsubsections.books @SubIndex { in books }
+endsubsubsections.books @SubIndex { in books }
+there are no sub-sub-subsections.
+@PP
+After the chapters comes an optional sequence of appendices. Each
+is introduced by @Code "@Appendix" in the usual way:
+appendix.books @SubIndex { in books }
+@ID @OneRow @Code {
+"@Appendix"
+" @Title { Climatic Regions of Australia }"
+"@Begin"
+"@PP"
+"..."
+"@End @Appendix"
+}
+No @Code "@BeginAppendices" or @Code "@EndAppendices" symbols are
+beginappendices.books @SubIndex { in books }
+endappendices.books @SubIndex { in books }
+needed, because (like chapters) these appendices do not lie inside
+any other large-scale structure symbol. The appendices are numbered
+A, B, C, etc., as is conventional for them. Within each appendix
+there may be a sequence of subappendices, obtained with the
+@Code "@SubAppendix" symbol and bracketed by
+subappendix.books @SubIndex { in books }
+@Code "@BeginSubAppendices" and {@Code "@EndSubAppendices"}:
+beginsubappendices.books @SubIndex { in books }
+endsubappendices.books @SubIndex { in books }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubAppendices"
+"@SubAppendix ... @End @SubAppendix"
+"@SubAppendix ... @End @SubAppendix"
+"..."
+"@SubAppendix ... @End @SubAppendix"
+"@EndSubAppendices"
+}
+There are sub-subappendices following the same pattern, but no
+subsubappendix.books @SubIndex { in books }
+beginsubsubappendices.books @SubIndex { in books }
+endsubsubappendices.books @SubIndex { in books }
+sub-sub-subappendices.
+@PP
+The book ends with the last chapter or appendix; any reference list or
+index will be appended automatically. Although we have described how to
+create books as though everything was in one large file, in practice it
+is much better to divide the book into multiple files, following the
+method given in Section {@NumberOf organizing}.
+@PP
+In addition to the {@Code "@Title"} option, each large-scale structure
+symbol (i.e. {@Code "@Preface"}, {@Code "@Introduction"}, {@Code "@Chapter"},
+{@Code "@Section"}, {@Code "@SubSection"}, {@Code "@SubSubSection"},
+{@Code "@Appendix"}, {@Code "@SubAppendix"}, and {@Code "@SubSubAppendix"})
+has a @Code "@Tag" option for cross referencing (Section {@NumberOf cross}),
+an @Code "@InitialLanguage" option for changing the language of that
+part of the document, and a @Code "@RunningTitle" option which will be
+used in place of @Code "@Title" in running headers if given. This last
+is useful when the full title is rather long.
+@PP
+The @Code "@Chapter" symbol has three additional options for dividing
+parts. @Index { parts of books }
+the book into parts:
+part.number @Index @Code "@PartNumber"
+part.title @Index @Code "@PartTitle"
+part.text @Index @Code "@PartText"
+@ID @OneRow @Code {
+"@Chapter"
+" @PartNumber { Part A }"
+" @PartTitle { The Ancient World }"
+" @PartText { ... }"
+}
+Any chapter with a non-empty @Code "@PartTitle" option will become the
+first chapter of a part. It will be preceded by two pages containing the
+part number, title, and text, and there will also be an entry
+made in the table of contents. @Code "@PartNumber" and @Code "@PartText"
+may be omitted. Parts are @I not numbered automatically: you
+have to supply your own numbers or letters as shown above.
+@PP
+The features described in other chapters are all available within
+books. A table of contents and index will appear automatically, and
+you will need to change the setup file to avoid them. Endnotes will
+appear at the end of the enclosing preface, introduction, chapter, or
+appendix. The numbering of figures and tables includes a chapter or
+appendix number: the first figure of Appendix C will be Figure C.1,
+and so on. Figures and tables within the preface or introduction are
+numbered 1, 2, 3, etc. A figure or table will never appear on the
+same page as the beginning of a chapter or appendix. References work
+as described in Chapter {@NumberOf biblio}. As explained there, it is
+possible to have a list of references at the end of each chapter as well
+as at the end of the book.
+@PP
+Within the @Code "book" setup file there is a @Code "@BookSetup"
+booksetup. @Index @Code "@BookSetup"
+symbol whose options control the appearance of features specific to books
+(in other words, the features described in this section). Here is a
+representative sample of these options, showing their default values:
+@ID @OneRow @Code {
+"@Use { @BookSetup"
+" # @TitlePageFont { Helvetica Base }"
+" # @SeparateIntroNumbering { Yes }"
+" # @PrefaceAfterContents { No }"
+" # @ReferencesBeforeAppendices { No }"
+" # @ChapterStartPages { Any }"
+" # @ChapterWord { chapter }"
+" # @ChapterNumbers { Arabic }"
+" # @ChapterHeadingFont { Bold 2.00f }"
+" # @ChapterHeadingBreak { ragged 1.2fx nohyphen }"
+" # @ChapterHeadingFormat { number @DotSep title }"
+" # @AboveChapterGap { 3.00f }"
+" # @ChapterInContents { Yes }"
+"}"
+}
+Section {@NumberOf setup} explains how to make your own setup file and
+change its options. @Code "@TitlePageFont" is the font used on the title
+title.page.font. @Index @Code "@TitlePageFont"
+page of the book, not including a size. @Code "@ChapterStartPages"
+determines what kinds of pages chapters and other major components of the
+book may begin on, and may be {@Code Any}, {@Code Odd}, or {@Code Even},
+meaning any page, odd-numbered pages only, or even-numbered pages
+only. @Code "@SeparateIntroNumbering"
+separate.intro.numbering @Index @Code "@SeparateIntroNumbering"
+determines whether the introductory part of the book is to have a
+separate numbering sequence or not. @Code "@ReferencesBeforeAppendices"
+references.before.appendices @Index @Code "@ReferencesBeforeAppendices"
+determines whether any final list of references appears before or
+after any appendices. @Code "@ChapterWord" determines
+the word used in chapter titles; its default value, {@Code "chapter"},
+produces `Chapter' in the current language. The other six options control
+the appearance of chapters, and there are similar options for controlling
+the other large-scale structure symbols.
+@PP
+@Code "@ChapterNumbers" determines how chapters will be numbered, and may
+be @Code { None }, @Code { Arabic }, @Code { Roman }, @Code { UCRoman },
+@Code { Alpha }, or @Code { UCAlpha }. The default value is @Code Arabic
+for chapters and also for all large-scale structure symbols except
+appendices, for which it is {@Code UCAlpha}. This produces the appendices
+numbered in upper-case letters (A, B, C, etc.) that were mentioned earlier.
+@PP
+@Code "@ChapterHeadingFont" is the font used for chapter headings. The
+default value shown above produces the bold face of the initial font
+family, at twice the initial size. A family name is acceptable
+here as well. @Code "@ChapterHeadingBreak" is the break style for
+chapter headings.
+@PP
+@Code "@ChapterHeadingFormat" allows you to change
+the format of the heading. The symbol @Code "number" within it will
+be replaced by the number of the chapter (actually including the word
+Chapter as well in the current language, e.g. {@Code "Chapter 12"}); the
+symbol @Code "title" within it will be replaced by the title. So you could
+write, say,
+@ID @Code
+"@ChapterHeadingFormat { @Box paint { lightgrey } { number @DP title } }"
+to get the title below the number, both enclosed in a box. The default
+value uses the @Code "@DotSep" symbol from Section {@NumberOf headers}
+to produce the number and title separated by a dot and two spaces, roughly
+the same as
+@ID @Code "@ChapterHeadingFormat { number. title }"
+except when there is no number. This option is applied
+to other major headings, in the preface, introduction, table of
+contents, appendices, reference list, and index. In all these other
+cases, @Code "number" is an empty object, except for appendices, when it
+contains @Code "Appendix A" or whatever.
+@PP
+There is a @Code "@PartHeadingFormat" option for determining the
+format of part headings. It works in the same way as
+{@Code "@ChapterHeadingFormat"}, with @Code "number" and @Code "title"
+symbols standing for the relevant @Code "@PartNumber" and @Code "@PartTitle"
+options. The default value is
+@ID @Code "@PartHeadingFormat { @CD number @DP @CD title }"
+which centres the number and title. The default paragraph breaking
+style is {@Code "clines"}, but you may place a @Code "@Break" symbol
+within @Code "@PartHeadingFormat" to change this.
+@PP
+The example of boxed titles for chapters given above suffers from two
+practical deficiencies. First, the box won't extend right across the
+page, and second, when there is no @Code "number" we don't want the
+@Code "@DP" either. Here is a value for @Code "@ChapterHeadingFormat"
+that solves both of these problems and looks good in practice:
+@ID @OneCol @Code {
+"@ChapterHeadingFormat {"
+" number @Case {"
+" {} @Yield @Box paint { lightgrey } @HExpand { title }"
+" else @Yield @Box paint { lightgrey } @HExpand { number @DP title }"
+" }"
+"}"
+}
+The @Code "@Case" symbol (Expert's Guide @Cite { $kingston1995lout.expert })
+distinguishes between the cases where @Code "number" is empty and non-empty;
+the @Code "@HExpand" symbol expands the horizontal space occupied by the
+heading to the maximum possible, so that when the box is drawn around it
+it will occupy the full page width. The format can be as
+complicated as you like, and there is no need to squeeze it all onto
+one line; as always, the end of a line is the same as one space.
+@PP
+Every chapter and appendix begins on a new page. @Code "@AboveChapterGap"
+determines how much space is left blank above the chapter title; the
+default value is three times the initial font size. There are similar
+options for other large-scale structure symbols, which determine how
+much space is left before each one.
+@PP
+@Code "@ChapterInContents" determines whether or not an entry is made in
+the table of contents for each chapter; it may be @Code Yes or {@Code No},
+but would always be {@Code Yes}. The default value of the corresponding
+options for sub-subsections and sub-subappendices, however, is {@Code No}.
+@End @Section
diff --git a/doc/user/typ_illu b/doc/user/typ_illu
new file mode 100644
index 0000000..532b42b
--- /dev/null
+++ b/doc/user/typ_illu
@@ -0,0 +1,85 @@
+@Section
+ @Title { Stand-alone illustrations }
+ @Tag { illustrations }
+@Begin
+@PP
+This section describes how to use Lout to produce an illustration for
+stand.alone.illustrations. @Index { stand-alone illustrations }
+illustrations. @Index { illustrations }
+inclusion in some other document, which may itself be a Lout document
+but need not be. The opposite process, the inclusion of an illustration
+in a Lout document, is the subject of Section {@NumberOf include}.
+@PP
+Suppose you want to produce the following logo
+for inclusion in some other document:
+@ID {
+45d @Rotate @CurveBox { ARMY @LP 180d @Rotate ARMY }
+}
+This is just an object, and it is not hard to make it using Lout's
+graphics features:
+@ID @Code "45d @Rotate @CurveBox { ARMY @LP 180d @Rotate ARMY }"
+The problem is that objects ordinarily come out on pages with margins,
+page numbers, and so forth, which we don't want here. The solution
+is to use the illustration document type, whose setup file, curiously
+enough, is called {@Code "picture"}:
+illustration. @Index @Code "@Illustration"
+@ID @OneRow @Code {
+"@SysInclude { picture }"
+"@Illustration {"
+" 45d @Rotate @CurveBox { ARMY @LP 180d @Rotate ARMY }"
+"}"
+}
+After the usual @Code "@SysInclude" line comes one @Code "@Illustration"
+symbol. Following it is an arbitrary object which becomes the entire
+result, with no pages and no margins, ready for inclusion in some other
+document as an illustration.
+@PP
+The @Code "@Illustration" symbol has options for setting the initial
+font, paragraph breaking style, colour, and language. Here they are
+with their default values:
+@ID @OneRow @Code {
+"@Illustration"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { adjust 1.2fx hyphen }"
+" @InitialSpace { lout }"
+" @InitialLanguage { English }"
+" @InitialColour { black }"
+"{"
+" ..."
+"}"
+}
+You can specify any colour from the list in Section {@NumberOf colour},
+for example {@Code blue}, and then your illustration will have that
+colour wherever it is included.
+@PP
+Because there are no pages, the width and height of the result are
+indeterminate, depending on how large the object turns out to be. This
+makes things very awkward for filled paragraphs and centring, which depend
+on knowing how much space is available to be occupied. So you should either
+avoid filled paragraphs and all displays and lists altogether in
+illustrations, or else enclose your object in a @Code "@Wide" symbol:
+wide @RawIndex { @Code "@Wide" }
+wide.illustrations @SubIndex { with illustrations }
+@ID @OneRow @Code {
+"@Illustration 5c @Wide {"
+" ..."
+"}"
+}
+to make clear how wide you want your illustration to be.
+@PP
+The technical name for a file containing a stand-alone illustration
+encapsulated.postscript @Index { encapsulated PostScript file }
+eps @Index { EPS file }
+is `encapsulated PostScript file' or `EPS file' for short. To get
+Lout to produce an encapsulated PostScript file instead of an ordinary
+PostScript file, you have to use the @Code "-EPS" Unix command line
+flag. For example, suppose the Lout file containing our example
+illustration is called {@Code "army"}; then the appropriate Unix
+command for formatting it is
+@ID @Code "lout -EPS army > army.eps"
+An EPS file is supposed to contain only one `page', so Lout will refuse
+to generate any second or subsequent pages when the @Code "-EPS" flag
+is given. There is also a minor difference in format between ordinary
+and encapsulated PostScript files, which is why the @Code "-EPS" flag
+is needed at all.
+@End @Section
diff --git a/doc/user/typ_ordi b/doc/user/typ_ordi
new file mode 100644
index 0000000..9fbd07a
--- /dev/null
+++ b/doc/user/typ_ordi
@@ -0,0 +1,313 @@
+@Section
+ @Title { Ordinary documents }
+ @Tag { ordinary }
+@Begin
+@PP
+Ordinary documents are the simplest kind, consisting of a plain sequence
+ordinary. @Index { ordinary documents }
+of numbered pages. To produce an ordinary document, use the @Code doc
+setup file and the @Code "@Doc" symbol:
+doc. @Index @Code "@Doc"
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+where @Code ... stands for the body of your document. This is the
+arrangement from Section {@NumberOf start} for getting
+started. Alternatively, you can begin with
+@Code "@Document" instead of {@Code "@Doc"}:
+document. @Index @Code "@Document"
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Document"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { adjust 1.2fx hyphen }"
+" @InitialSpace { lout }"
+" @InitialLanguage { English }"
+" @PageOrientation { Portrait }"
+" @PageHeaders { Simple }"
+" @FirstPageNumber { 1 }"
+" @ColumnNumber { 1 }"
+" @OptimizePages { No }"
+" @Unpaginated { No }"
+"//"
+"@Text @Begin"
+"..."
+"@End @Text"
+}
+This shows all the options of {@Code "@Document"}, with their default
+values. As usual with options, the options of {@Code "@Document"}
+may be given in any order, and only the ones that need to be changed
+need be given at all. Notice the @Code "//" after the last option. Its
+meaning is beyond our
+"//" @Index { @Code "//" symbol }
+scope, but total disaster will ensue if it is forgotten. The @Code "@Doc"
+symbol is an abbreviation for {@Code "@Document //"}, which is why you don't
+need @Code "//" with {@Code "@Doc"}.
+@PP
+The eight options are a selection of setup file options (Section
+{@NumberOf setup}) that frequently need to be changed. If your changes
+to the overall formatting are confined to these options, you can change
+them here and avoid having your own setup file. If you already have
+your own setup file, change them in either place and omit them in
+the other.
+@PP
+@Code "@InitialFont" is the font of the bulk of the document,
+and should contain a family, a face, and a size. The default
+value selects the Times family, the Base face, and the 12 point size.
+@PP
+@Code "@InitialBreak" controls the behaviour of paragraph breaking in
+the bulk of the document. It should have three parts: a paragraph
+breaking style ({@Code adjust}, {@Code ragged}, etc.), an inter-line
+spacing ({@Code "1.2fx"} for single spacing, {@Code "2.4fx"} for
+double spacing, and so on), and either @Code "hyphen" or @Code "nohyphen"
+for turning hyphenation on or off. It may also have @Code "nobreakfirst"
+or @Code "nobreaklast" (or both), meaning to disallow a page break after
+the first line of a paragraph, or before the last, respectively.
+@PP
+@Code "@InitialSpace" determines how Lout treats white space between
+two objects, as described in Section
+{@NumberOf white}. @Code "@InitialLanguage" determines the language
+of the bulk of the document.
+@PP
+@Code "@PageOrientation" determines the orientation of the page. Its
+value may be {@Code Portrait} (the default), {@Code Landscape},
+{@Code ReversePortrait}, or {@Code ReverseLandscape}. See
+Section {@NumberOf pagesize} for further details.
+@PP
+@Code "@PageHeaders" determines the appearance of page headers and
+footers throughout the document, and may be {@Code None},
+{@Code Simple}, {@Code Titles}, or {@Code NoTitles}. Section
+{@NumberOf headers} has the details, but just briefly, {@Code None}
+means no page headers at all, {@Code Simple} means a
+page number between hyphens at the top of each page except the first,
+@Code Titles produces full running titles as in this guide,
+and @Code "NoTitles" is like @Code "Titles" with the running titles
+omitted, leaving just the page numbers.
+@PP
+@Code "@FirstPageNumber" is the page number given to the first page.
+@PP
+@Code "@ColumnNumber" is the number of columns per page in the bulk of
+the document, and may be anything from {@Code 1} (the default value) to
+{@Code 10}. It is possible to produce full-width ordinary
+text in a multi-column document, using the @Code "@FullWidth"
+full.width. @Index @Code "@FullWidth"
+symbol:
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Document"
+" @ColumnNumber { 2 }"
+"//"
+"@Text @Begin"
+"@FullWidth {"
+"@CentredDisplay @Heading { NOTICE TO TRESPASSERS }"
+"}Trespassers are hereby notified that, ..."
+"@End @Text"
+}
+This produces a full-width heading above a two-column body. The word
+@Code Trespassers has been placed immediately after the closing brace
+of @Code "@FullWidth" because (regrettably) any space here will appear
+before @Code Trespassers in the output. Alternatively you could use
+a paragraph symbol:
+@ID @OneRow @Code {
+"@FullWidth {"
+"@CentredDisplay @Heading { NOTICE TO TRESPASSERS }"
+"}"
+"@PP"
+"Trespassers are hereby notified that, ..."
+}
+You can have several @Code "@FullWidth" symbols,
+producing full-width text wherever you want. Just be aware that
+@Code "@FullWidth" always causes a fresh page to be begun, it will never
+appear on the same page as a figure or table, and it is not able to hold
+a table of contents, a section, or an appendix.
+@PP
+Lout ordinarily places lines onto a page until space runs out, then moves
+to the next page and so on. This often produces ugly empty spaces at
+the bottoms of pages preceding large unbreakable displays. Setting the
+@Code "@OptimizePages" option to {@Code "Yes"} causes Lout to examine the
+overall situation and try to minimize the ugliness, using the @TeX
+tex.page @SubIndex { page optimization }
+optimal paragraph breaking algorithm. It takes two runs to do this,
+with intermediate results stored in Lout's cross reference database
+(Section {@NumberOf cross}); so deleting file {@Code lout.li} will reset
+it, which might be wise after major changes. It is possible for the
+optimizer to cycle, never settling on a single final best
+version; this is usually caused by footnotes or floating figures inserted
+at points that end up near page boundaries.
+@PP
+The @Code "@Unpaginated" option, whose value is ignored unless plain text
+output is in effect, produces unpaginated output when changed to
+{@Code Yes} (see Section {@NumberOf plain}).
+@PP
+Within the @Code "@Text" symbol, it is possible to have a sequence
+of sections:
+section. @RawIndex @Code "@Section"
+section.ordinary @SubIndex { in ordinary documents }
+beginsections. @RawIndex @Code "@BeginSections"
+beginsections.ordinary @SubIndex { in ordinary documents }
+endsections. @RawIndex @Code "@EndSections"
+endsections.ordinary @SubIndex { in ordinary documents }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSections"
+"@Section ... @End @Section"
+"@Section ... @End @Section"
+"..."
+"@Section ... @End @Section"
+"@EndSections"
+}
+as described in Section {@NumberOf largescale}. Within any
+section, a similar arrangement produces subsections:
+subsection. @RawIndex @Code "@SubSection"
+subsection.ordinary @SubIndex { in ordinary documents }
+beginsubsections. @RawIndex @Code "@BeginSubSections"
+beginsubsections.ordinary @SubIndex { in ordinary documents }
+endsubsections. @RawIndex @Code "@EndSubSections"
+endsubsections.ordinary @SubIndex { in ordinary documents }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubSections"
+"@SubSection ... @End @SubSection"
+"@SubSection ... @End @SubSection"
+"..."
+"@SubSection ... @End @SubSection"
+"@EndSubSections"
+}
+Within any subsection, there may be sub-subsections, obtained
+using {@Code "@BeginSubSubSections"}, {@Code "@SubSubSection"},
+subsubsection. @RawIndex @Code "@SubSubSection"
+subsubsection.ordinary @SubIndex { in ordinary documents }
+beginsubsubsections. @RawIndex @Code "@BeginSubSubSections"
+beginsubsubsections.ordinary @SubIndex { in ordinary documents }
+endsubsubsections. @RawIndex @Code "@EndSubSubSections"
+endsubsubsections.ordinary @SubIndex { in ordinary documents }
+and {@Code "@EndSubSubSections"}. There are no sub-sub-subsections.
+@PP
+Also within the @Code "@Text" symbol only, there may be a sequence of
+appendices:
+appendix. @RawIndex @Code "@Appendix"
+appendix.ordinary @SubIndex { in ordinary documents }
+beginappendices. @RawIndex @Code "@BeginAppendices"
+beginappendices.ordinary @SubIndex { in ordinary documents }
+endappendices. @RawIndex @Code "@EndAppendices"
+endappendices.ordinary @SubIndex { in ordinary documents }
+@ID @OneRow @Code {
+"preceding text"
+"@BeginAppendices"
+"@Appendix ... @End @Appendix"
+"@Appendix ... @End @Appendix"
+"..."
+"@Appendix ... @End @Appendix"
+"@EndAppendices"
+}
+These will be `numbered' A, B, C etc. as is conventional. Within any
+appendix there may be a sequence of subappendices, obtained in the
+usual way using {@Code "@BeginSubAppendices"}, {@Code "@SubAppendix"},
+subappendix. @RawIndex @Code "@SubAppendix"
+subappendix.ordinary @SubIndex { in ordinary documents }
+beginsubappendices. @RawIndex @Code "@BeginSubAppendices"
+beginsubappendices.ordinary @SubIndex { in ordinary documents }
+endsubappendices. @RawIndex @Code "@EndSubAppendices"
+endsubappendices.ordinary @SubIndex { in ordinary documents }
+and {@Code "@EndSubAppendices"}. There are sub-subappendices as well,
+following the same pattern, but no sub-sub-subappendices.
+subsubappendix. @RawIndex @Code "@SubSubAppendix"
+subsubappendix.ordinary @SubIndex { in ordinary documents }
+beginsubsubappendices. @RawIndex @Code "@BeginSubSubAppendices"
+beginsubsubappendices.ordinary @SubIndex { in ordinary documents }
+endsubsubappendices. @RawIndex @Code "@EndSubSubAppendices"
+endsubsubappendices.ordinary @SubIndex { in ordinary documents }
+@PP
+In addition to the {@Code "@Title"} option, each large-scale structure
+symbol ({@Code "@Section"}, {@Code "@SubSection"}, {@Code "@SubSubSection"},
+{@Code "@Appendix"}, {@Code "@SubAppendix"}, and {@Code "@SubSubAppendix"})
+has a @Code "@Tag" option for cross referencing (Section {@NumberOf cross}),
+an @Code "@InitialLanguage" option for changing the language of that part
+of the document, and a @Code "@RunningTitle" option which will be used in
+place of @Code "@Title" in running headers if given. @Code "@RunningTitle"
+is useful when the full title is rather long.
+@PP
+The features described in other chapters are all available within
+ordinary documents. Endnotes and references appear automatically at
+the end of the document. Figures are labelled Figure 1, Figure 2,
+etc., and tables are labelled Table 1, Table 2, etc.
+@PP
+To get a table of contents, set the @Code "@MakeContents" option in
+the setup file to {@Code Yes}, and insert the symbol
+@Code "@ContentsGoesHere" at the point where you would like the
+contents.goes.here. @Index @Code "@ContentsGoesHere"
+table of contents to appear, anywhere before the first section:
+@ID @OneRow @Code {
+"@SysInclude { doc }"
+"@Text @Begin"
+"@CentredDisplay @Heading { Safety Procedures }"
+"@Heading { Contents }"
+"@DP"
+"@ContentsGoesHere"
+"@DP"
+"..."
+"@End @Text"
+}
+You must supply your own heading, as well as paragraph symbols
+before and after. Regrettably, @Code "@ContentsGoesHere" may
+not be placed inside a display, nor inside {@Code "@FullWidth"}.
+@PP
+To get an index, set the @Code "@MakeIndex" option in the setup file
+to {@Code Yes}, and follow the instructions in Section
+{@NumberOf indexes}. The index will appear automatically at the end
+of your document.
+@PP
+Within the @Code doc setup file there is an @Code "@OrdinarySetup"
+symbol whose options control the appearance of features specific to
+ordinary documents (in other words, the features described in this
+section). Here is a representative sample of these options, showing
+their default values:
+ordinary.setup @Index @Code "@OrdinarySetup"
+@ID @OneRow @Code {
+"@Use { @OrdinarySetup"
+" # @IndexWord { index }"
+" # @AppendixWord { appendix }"
+" # @SectionNumbers { Arabic }"
+" # @SectionHeadingFont { Bold }"
+" # @SectionGap { 2.00v }"
+" # @SectionInContents { Yes }"
+"}"
+}
+Section {@NumberOf setup} explains how to make your own setup file and
+change its options.
+@PP
+The @Code "@IndexWord" option determines what the index is called, if
+there is one. The default value, {@Code "index"}, produces the word
+`Index' in the current language. Any other value produces itself. The
+@Code "@AppendixWord" option is similar; its default value is `Appendix'
+in the current language.
+@PP
+@Code "@SectionNumbers" determines how sections will be numbered, and may
+be @Code { None }, @Code { Arabic }, @Code { Roman }, @Code { UCRoman },
+@Code { Alpha }, or @Code { UCAlpha }. The default value is @Code Arabic
+for sections and also all other large-scale structure symbols except
+appendices, for which it is {@Code UCAlpha}. This produces the appendices
+numbered in upper-case letters (A, B, C, etc.) that were mentioned earlier.
+@PP
+@Code "@SectionHeadingFont" is the font used for section headings. The
+default value produces the bold face from the family of the
+initial font. A family name or size is also acceptable:
+@ID @Code "@SectionHeadingFont { Helvetica Base +2p }"
+makes the section heading appear in the Helvetica font, two
+points larger than the initial size.
+@PP
+@Code "@SectionGap" determines how much space is left blank before each
+section title; the default value shown above is twice the current
+inter-line spacing. The special value @Code "2b" may be used to get a
+page break rather than a space. There are similar options for other
+large-scale structure symbols, which determine how much space is left
+before each one.
+@PP
+@Code "@SectionInContents" determines whether or not an entry is made in
+the table of contents for each section; it may be @Code Yes or {@Code No},
+but would always be {@Code Yes}. The default value of the corresponding
+options for sub-subsections and sub-subappendices, however, is {@Code No}.
+@End @Section
diff --git a/doc/user/typ_orga b/doc/user/typ_orga
new file mode 100644
index 0000000..8ba6ab7
--- /dev/null
+++ b/doc/user/typ_orga
@@ -0,0 +1,93 @@
+@Section
+ @Title { Organizing large documents }
+ @Tag { organizing }
+@Begin
+@PP
+It is not a good plan to store a large document in a single large
+organizing.large @Index { organizing large documents }
+file. It takes too long to find things in it, and if some catastrophe
+occurs, you lose the lot. Lout encourages you to break documents into
+pieces by its willingness to read a sequence of files
+({@Code "lout file1 file2 ..."}). For large documents, the following
+plan is recommended.
+@PP
+Suppose you are making a book whose third chapter contains sections on
+banksias, grevilleas, acacias, and eucalypts. Place each section, from
+@Code "@Section" to {@Code "@End @Section"}, in a separate file, making
+four files called, say, {@Code banksias}, {@Code grevilleas},
+{@Code acacias}, and {@Code eucalypts}. Then make a single file for the
+chapter as a whole whose contents are as follows:
+@ID @OneRow @Code {
+"@Chapter"
+" @Title { Australian Native Plants }"
+"@Begin"
+"Australian native plants provide a distinctive identity to the garden. Although"
+"less colourful than their European alternatives, some banksias and grevilleas do"
+"flower strongly, and of course the acacias (wattles) are unsurpassable in late winter."
+"@BeginSections"
+"@Include { banksias }"
+"@Include { grevilleas }"
+"@Include { acacias }"
+"@Include { eucalypts }"
+"@EndSections"
+"@End @Chapter"
+}
+The @Code "@Include" symbol causes Lout to read the file whose name follows
+include. @Index @Code "@Include"
+it between braces, just as though the contents of that file had been included
+at that point.
+@PP
+With this arrangement you can easily rearrange the order of the
+sections: just swap their @Code "@Include" lines. You should be using
+Lout's automatic cross referencing features (Section {@NumberOf cross}),
+so you don't have to worry about keeping cross references up to date. You
+can also temporarily delete a section by placing a @Code "#" character at
+the start of its line:
+@ID @Code "# @Include { acacias }"
+This works because @Code "#" is the @I { comment character }: Lout will
+comment. @Index { comments }
+ignore this character (unless enclosed in double quotes) and everything
+following it up to the end of the line. You can even temporarily delete
+every section except the one you are working on at the moment, using
+these comments.
+@PP
+Suppose now that this chapter file is called @Code { natives }, and you
+have others called @Code { preface }, @Code { flowers }, etc. Then you
+can make one file (call it @Code { garden }) for the whole book like this:
+@ID @OneRow @Code {
+"@SysInclude { book }"
+"@Book"
+" @Title { The Australian Garden }"
+" @Author { Martha S. Vineyard }"
+"//"
+"@Include { preface }"
+"@Include { flowers }"
+"@Include { shrubs }"
+"@Include { natives }"
+"@Include { trees }"
+}
+You can play the same tricks here: swap chapters around, or temporarily
+delete one or more with a {@Code "#"}. When a chapter is finished
+you can temporarily delete it to save formatting time and paper, and
+bring it back at the end. To format the book, use
+@Code "lout garden > out.ps"
+in Unix. Lout will read each @Code "@Include" file as it comes to it,
+and if it finds an @Code "@Include" of a section while reading a chapter
+file, it will read the section too.
+@PP
+If the order of your chapters is fairly stable, it might be advantageous
+to use the @Code "@BypassNumber" option of @Code "@Chapter" (described
+in Appendix {@NumberOf bypass}) to fix the numbers of all your chapters,
+so that you get correct chapter numbers even when formatting one
+chapter at a time.
+@PP
+If you decide to store chapters in separate Unix directories, make sure
+that any @Code "/" characters in the file names are enclosed in double
+quotes:
+@ID @Code "@Include { \"natives.dir/acacias\" }"
+Be careful not to give the directory the same name as your chapter
+file. You might also find it useful to construct your book
+@I { top-down }, as computer scientists call it, laying out all the
+chapters and sections as empty skeletons and filling their contents in
+later.
+@End @Section
diff --git a/doc/user/typ_over b/doc/user/typ_over
new file mode 100644
index 0000000..fd14e2a
--- /dev/null
+++ b/doc/user/typ_over
@@ -0,0 +1,314 @@
+@Section
+ @Title { Overhead transparencies }
+ @Tag { overheads }
+@Begin
+@PP
+To produce overhead transparencies
+@FootNote {
+In Version 3.15 overhead transparencies were updated and brought into line
+with the other document types. Although existing source files do not need
+to be modified, their printed appearance may change (spacing, running
+headers). There are some new setup file options, and some changes to
+existing setup file options.
+}
+(hereafter called overheads), start off
+overheads. @Index { overhead transparencies }
+slides. @RawIndex { slides @I see overhead transparencies }
+with the @Code slides setup file and the @Code "@OverheadTransparencies"
+overhead.transparencies. @Index @Code "@OverheadTransparencies"
+symbol:
+@ID @OneRow @Code {
+"@SysInclude { slides }"
+"@OverheadTransparencies"
+" @Title {}"
+" @RunningTitle {}"
+" @Author {}"
+" @Institution {}"
+" @DateLine { No }"
+" @InitialFont { Times Base 20p }"
+" @InitialBreak { ragged 1.2fx nohyphen }"
+" @InitialSpace { lout }"
+" @InitialLanguage { English }"
+" @PageOrientation { Portrait }"
+" @PageHeaders { Titles }"
+" @FirstPageNumber { 1 }"
+" @FirstOverheadNumber { 1 }"
+" @FirstLectureNumber { 1 }"
+" @OptimizePages { No }"
+"//"
+}
+This shows all the options of @Code "@OverheadTransparencies" with their
+default values. As usual with options, they may be given in any order, and
+only the ones whose values need to be changed need be given at all. The
+meaning of the @Code "//" symbol after the last option is beyond our
+scope, but disaster will ensue if it is forgotten.
+@PP
+If @Code "@Title" is not empty, an initial overhead will be produced
+containing the {@Code "@Title"}, {@Code "@Author"}, {@Code "@Institution"},
+and {@Code "@DateLine"} options. @Code "@DateLine" may be set to
+{@Code "No"}, meaning no dateline, {@Code "Yes"}, meaning print the current
+date, or anything else, which is taken to be a date and printed.
+@PP
+Each overhead has a running header printed in small type at the top
+left. The @Code "@RunningTitle" option goes into this header, or, if
+there is no @Code "@RunningTitle" option, @Code "@Title" is used instead.
+@PP
+The remaining options are a selection of setup file options (Section
+{@NumberOf setup}) that frequently need to be changed. If your changes
+to the overall formatting are confined to these options, you can change
+them here and avoid having your own setup file. If you already have
+your own setup file, change them in either place and omit them in
+the other.
+@PP
+@Code "@InitialFont" is the font in which the overheads will be set, and
+should contain a family, a face, and a size. A good font size for
+overheads is 20 points, so that is the default size.
+@PP
+@Code "@InitialBreak" controls the behaviour of paragraph breaking in
+the overheads. It should have three parts: a paragraph
+breaking style ({@Code adjust}, {@Code ragged}, etc.), an inter-line
+spacing ({@Code "1.2fx"} for single spacing, {@Code "2.4fx"} for
+double spacing, and so on), and either @Code "hyphen" or @Code "nohyphen"
+for turning hyphenation on or off. Adjusted lines and hyphenated words
+are difficult to read from overheads, so the default is not to have them.
+@Code "@InitialSpace" determines how Lout treats white space between
+objects (Section {@NumberOf white}). @Code "@InitialLanguage"
+determines the language of the overheads.
+@PP
+@Code "@PageOrientation" determines the orientation of the page. Its
+value may be {@Code Portrait} (the default), {@Code Landscape},
+{@Code ReversePortrait}, or {@Code ReverseLandscape}. See
+Section {@NumberOf pagesize} for further details.
+@PP
+@Code "@PageHeaders" determines the appearance of page headers and
+footers. Its value may be {@Code None}, {@Code Simple}, {@Code Titles},
+or {@Code NoTitles}. Section {@NumberOf headers} has the details, but
+just briefly, {@Code None} produces no page headers, {@Code Simple} produces
+page numbers only, @Code Titles produces full running titles, and
+@Code "NoTitles" is similar to @Code "Simple" in this context.
+@PP
+@Code "@FirstPageNumber" is the number given to the first page,
+@Code "@FirstOverheadNumber" is the number given to the first overhead,
+and @Code "@FirstLectureNumber" is the number given to the first lecture,
+of which more below. See preceding sections for {@Code "@OptimizePages"}.
+# Lout ordinarily places lines onto a page until space runs out, then moves
+# to the next page and so on. This often produces ugly empty spaces at
+# the bottoms of pages preceding large unbreakable displays. Setting the
+# @Code "@OptimizePages" option to {@Code "Yes"} causes Lout to examine the
+# overall situation and try to minimize the ugliness, using the @TeX
+# optimal paragraph breaking algorithm. It takes two runs to do this,
+# with intermediate results stored in Lout's cross reference database
+# (Section {@NumberOf cross}); so deleting file {@Code lout.li} will reset
+# it, which might be wise after major changes. It is possible for the
+# optimizer to cycle, never settling on a single final best
+# version; this is usually caused by footnotes or floating figures inserted
+# at points which end up near page boundaries.
+@PP
+After the compulsory {@Code "//"} come the overheads themselves. There
+are two alternatives: a series of overheads, corresponding to a single
+lecture, or a series of series of overheads, corresponding to a series
+of lectures. If the first is wanted, use this arrangement:
+overhead. @Index @Code "@Overhead"
+@ID @OneRow @Code {
+"@SysInclude { slides }"
+"@OverheadTransparencies"
+" ..."
+"//"
+"@Overhead ... @End @Overhead"
+"@Overhead ... @End @Overhead"
+"..."
+"@Overhead ... @End @Overhead"
+}
+@Code "@Overhead" is a large-scale structure symbol, similar to
+{@Code "@Section"}, with the usual options:
+@ID @OneRow @Code {
+"@Overhead"
+" @Title { Trends in investment since 1980 }"
+" @RunningTitle { Investment }"
+" @Tag { investment }"
+" @InitialLanguage { English }"
+"@Begin"
+"..."
+"@End @Overhead"
+}
+If @Code "@Title" is given it will appear as a centred, bold display
+at the beginning of the overhead. As usual, these options may be given
+in any order or omitted altogether.
+@PP
+The body of the overhead is quite arbitrary. Typically one tends to
+use lists and displays more than paragraphs, but all the usual features
+are available. Each overhead begins on a fresh page, but it may occupy
+more than one page.
+@PP
+@Code "@Overhead" also has a @Code "@Format" option which allows you to
+specify an arbitrary format for the body of the overhead (that is,
+everything except its title). For example,
+@ID @Code "@Format { @CurveBox @HExpand @VExpand @Body }"
+encloses the body in a curvebox, with the box expanded to the full
+available width and height. Unlike the similar option for figures
+and tables, however, this @Code "@Format" option unfortunately has
+not been set up to work with multi-page overheads, so if you use the
+format just given you have to make sure your overheads all fit on one
+page. To draw boxes around the @I entire page, use the @Code "@PageBox"
+setup file options.
+@PP
+Lout does not provide any special support for overlays. A good way to
+make them is to first produce one overhead containing all the layers
+simultaneously. Once this is correct, enclose the entire body of the
+overhead in {@Code "white @Colour"}, make one copy of the text of the
+overhead for each layer, separating the copies with @Code "@NP"
+(new page) symbols, and, in each copy, enclose the parts that are
+to appear in that layer in {@Code "black @Colour"} (or any other
+colour). This works because @Code "white @Colour" makes an object
+invisible without altering its size.
+@PP
+We turn now to the second major alternative, which is a series
+of lectures, like this:
+lecture. @Index @Code "@Lecture"
+@ID @OneRow @Code {
+"@SysInclude { slides }"
+"@OverheadTransparencies"
+" ..."
+"//"
+"@Lecture ... @End @Lecture"
+"@Lecture ... @End @Lecture"
+"..."
+"@Lecture ... @End @Lecture"
+}
+@Code "@Lecture" is a large-scale structure symbol, again with
+the usual options:
+@ID @OneRow @Code {
+"@Lecture"
+" @Title { Macro-Economic Policies for the Nineties }"
+" @RunningTitle { Macro-economic policies }"
+" @Tag { macro-economics }"
+" @InitialLanguage { English }"
+"@Begin"
+"..."
+"@End @Lecture"
+}
+If @Code "@Title" is non-empty the series of overheads will begin with
+an overhead containing the title alone, centred on the page using the
+@Code "clines" paragraph breaking style. This means that it makes
+sense to have a multi-line title. Any text following the @Code "@Begin"
+will appear under the lecture title as you would expect.
+@PP
+Within the body of {@Code "@Lecture"}, place a series of overheads
+bracketed by @Code "@BeginOverheads" and {@Code "@EndOverheads"}:
+beginoverheads. @Index @Code "@BeginOverheads"
+endoverheads. @Index @Code "@EndOverheads"
+@ID @OneRow @Code {
+"@BeginOverheads"
+"@Overhead ... @End @Overhead"
+"@Overhead ... @End @Overhead"
+"..."
+"@Overhead ... @End @Overhead"
+"@EndOverheads"
+}
+The @Code "@Overhead" symbol is exactly as described earlier.
+@PP
+The features described in other chapters are available with
+overheads. Endnotes and references appear automatically at the
+end of the overheads. You can have a table of contents, by setting
+the @Code "@MakeContents" option of the setup file to {@Code Yes}. It
+will appear automatically after any title overhead. The setup file
+options have been set on the assumption that you want your lectures
+to appear in the table of contents, but not individual overheads. It is not
+possible to have an index, and it is not possible to have multiple columns.
+@PP
+Within the @Code slides setup file there is an @Code "@OverheadSetup"
+symbol whose options control the appearance of features specific to
+overhead.setup. @Index @Code "@OverheadSetup"
+overheads (in other words, the features described in this section). Here
+are some of these options and their default values:
+@ID @OneRow @Code {
+"@Use { @OverheadSetup"
+" # @DateLine { No }"
+" # @FirstOverheadNumber { 1 }"
+" # @FirstLectureNumber { 1 }"
+" # @ContentsWord { contents }"
+" # @LectureNumbers { Arabic }"
+" # @OverheadNumbers { Arabic }"
+" # @TitlePageFont { Helvetica Base }"
+" # @LectureHeadingFont { Bold 1.20f }"
+" # @LectureHeadingFormat { @Centre number @DP @Centre title @DP }"
+" # @OverheadHeadingFormat { @Centre title @DP }"
+" # @OverheadHeadingFont { Bold }"
+" # @LectureInContents { Yes }"
+" # @OverheadInContents { No }"
+" # @ReferencesInContents { Yes }"
+"}"
+}
+For an introduction to setup files and their options, consult
+Section {@NumberOf setup}. The first four options are as for
+@Code "@OverheadTransparencies" as described above. @Code "@ContentsWord"
+determines the table of contents heading; its default value, {@Code contents},
+produces `Contents' in the current language. @Code "@LectureNumbers"
+and @Code "@OverheadNumbers" determine the style of numbering of lectures
+and overheads, and may be {@Code None}, {@Code Arabic}, {@Code Roman},
+{@Code UCRoman}, {@Code Alpha}, or {@Code UCAlpha} as usual. Next come
+options for setting the font of the overall title page, the
+title page of each lecture, and so on, and finally options which
+determine which entries are made in any table of contents.
+@PP
+The @Code "@LectureHeadingFormat" option determines the
+format of the heading of each lecture. Within it, the symbol @Code "number"
+stands for the number of the lecture, including the `Lecture' word if
+there is one, and @Code "title" stands for the title of the lecture. The
+default value centres the number and title, with display gaps below
+each one. @Code "@OverheadHeadingFormat" is similar; it has the same
+symbols but the default value chooses not to use {@Code "number"}.
+@PP
+Other setup file options exist which permit you to have a box drawn
+around each overhead, and to change the page size, margins, and
+orientation. These are described in Chapter {@NumberOf changes}.
+@PP
+Section {@NumberOf headers} describes the setup file options that
+control the appearance of page headers and footers. With overheads,
+the values given to the {@Code "@MajorTitle"}, {@Code "@MinorTitle"},
+{@Code "@MajorNum"}, and {@Code "@MinorNum"} symbols within those
+options are as follows. If @Code "@Lecture" is being used:
+@ID @Tab
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { @Code "@MajorTitle" }
+ B { The @Code "@RunningTitle" option of
+{@Code "@OverheadTransparencies"}, or its @Code "@Title" option
+if @Code "@RunningTitle" is absent; }
+@Rowa
+ A { @Code "@MinorTitle" }
+ B { The @Code "@RunningTitle" option of the current
+{@Code "@Lecture"}, or else its @Code "@Title" option if
+@Code "@RunningTitle" is absent; }
+@Rowa
+ A { @Code "@MajorNum" }
+ B { The number of the current {@Code "@Lecture"}; }
+@Rowa
+ A { @Code "@MinorNum" }
+ B { A two-part number, for example 5.2, containing the number of
+the current @Code "@Lecture" and the number within that lecture
+of the current overhead. }
+}
+If @Code "@Lecture" is not being used:
+@ID @Tab
+ @Fmta { @Col A ! @Col B }
+{
+@Rowa
+ A { @Code "@MajorTitle" }
+ B { The @Code "@RunningTitle" option of
+{@Code "@OverheadTransparencies"}, or its @Code "@Title" option
+if @Code "@RunningTitle" is absent; }
+@Rowa
+ A { @Code "@MinorTitle" }
+ B { Empty; }
+@Rowa
+ A { @Code "@MajorNum" }
+ B { Empty; }
+@Rowa
+ A { @Code "@MinorNum" }
+ B { The number of the current overhead. }
+}
+The first page occupied by any overhead is a @Code Start page; subsequent
+pages are @Code NonStart pages. There are no @Code Intro pages.
+@End @Section
diff --git a/doc/user/typ_plai b/doc/user/typ_plai
new file mode 100644
index 0000000..a880ccb
--- /dev/null
+++ b/doc/user/typ_plai
@@ -0,0 +1,76 @@
+@Section
+ @Title { Plain text documents }
+ @Tag { plain }
+@Begin
+@PP
+Occasionally you may need to produce an output file containing plain text
+plain.text. @Index { plain text documents }
+rather than PostScript, for example for an online manual entry or to send
+as electronic mail. Any document that can be produced by Lout in
+PostScript can be produced in plain text as well, by adding a @Code "-p"
+flag to the Unix command line:
+@ID @Code "lout -p simple"
+No other changes are required. Here we are sending the output directly to
+the screen, but it can be redirected to a file, or piped through the
+@Code more command for viewing one page at a time, etc.
+@PP
+Of course, plain text is an extremely limited medium of communication
+compared with PostScript, and this forces Lout to make some rather
+drastic compromises:
+@BulletList gap { @ParaGap }
+@LI { Symbols like {@Code "@Bullet"}, which stand for unusual characters,
+produce printable characters which approximate the PostScript ones. For
+example, {@Code "@Bullet"} produces {@Code "o"}. However, the @Code "@Char"
+and @Code "@Sym" symbols often produce unprintable characters, and are best
+avoided; }
+@LI { All font and size changes are ignored, since plain text has only
+one font and size. Every character is taken to be @Eq { 1 frac 10 } inch
+wide and @Eq { 1 frac 6 } inch high; }
+@LI { No underlines are printed; }
+@LI { No margin notes are printed; }
+@LI { Scaled objects are not printed unless the scale factor happens to be 1; }
+@LI { Rotated objects are not printed unless the angle happens to be zero
+degrees. This means that page orientations (Section {@NumberOf pagesize})
+other than @Code Portrait do not work; }
+@LI { Ruled lines are not printed, and paint and colour options are
+ignored. This spoils the graphics and graphs of Chapters
+{@NumberOf graphics}, {@NumberOf diagrams}, and {@NumberOf graphs}. }
+@EndList
+Despite the problems, many things work surprisingly well. Tables, for example,
+look very good. It does no harm to try things and see if they work out.
+@PP
+The worst problem with plain text is that characters cannot be placed at
+arbitrary points on the page. A superscript, for example, is impossible to
+place correctly, so Lout uses a different layout for footnote labels (and
+makes a mess of equations, which are best avoided). Because of this problem
+it's best to make all horizontal lengths multiples of @Eq {1 frac 10} inch
+(conveniently expressed as {@Code 1s}), and all vertical lengths multiples
+of @Eq { 1 frac 6 } inch (conveniently expressed as {@Code 1f}). To help
+you do this, the setup files contain many entries that look like this
+example:
+@ID @Code "# @InitialBreak { {adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen} }"
+The meaning is that the value of @Code "@InitialBreak" will be
+@Code "adjust 1.2fx hyphen" usually, but will switch to
+{@Code "ragged 1fx nohyphen"}, which is better suited to plain text,
+if the @Code "-p" command line flag is used. These setup file values
+allow you to switch from PostScript to plain text and back again without
+changing anything at all except the @Code "-p" command line flag.
+@PP
+If you use @Code "lout -P" instead of {@Code "lout -p"}, the plain text
+output will contain a form-feed character (control-L) after each page
+form.feed @Index { form-feed in plain text }
+except the last. This character causes most printing devices to start
+a new page, which is very useful when your page height is not exactly
+right.
+@PP
+The @Code "@Document" symbol (Section {@NumberOf ordinary}) has an
+unpaginated. @Index @Code "@Unpaginated"
+@Code "@Unpaginated" option which, when set to {@Code "Yes"}, causes
+the plain text output to appear unpaginated, that is, in one long
+continous stream with no page breaks. Its value is ignored if plain text
+output is not in effect, so it can be safely set to @Code "Yes" in
+documents intended for formatting both ways. The usual margins apply;
+footnotes appear at the end; figures and tables do not work. Lout
+stupidly reads the entire document before producing any output when
+this option is used, so if the document is long you might run out of memory.
+@End @Section
diff --git a/doc/user/typ_repo b/doc/user/typ_repo
new file mode 100644
index 0000000..b73671a
--- /dev/null
+++ b/doc/user/typ_repo
@@ -0,0 +1,359 @@
+@Section
+ @Title { Technical reports }
+ @Tag { reports }
+@Begin
+@PP
+To make a technical report,
+start off with the @Code "report" setup
+reports. @Index { reports }
+technical.reports. @Index { technical reports }
+report. @Index @Code "@Report"
+file and the @Code "@Report" symbol:
+@ID @OneRow @Code {
+"@SysInclude { report }"
+"@Report"
+" @Title {}"
+" @Author {}"
+" @Institution {}"
+" @DateLine { No }"
+" @AtEnd {}"
+" @CoverSheet { Yes }"
+" @ContentsSeparate { No }"
+" @InitialFont { Times Base 12p }"
+" @InitialBreak { hyphen adjust 1.2fx }"
+" @InitialSpace { lout }"
+" @InitialLanguage { English }"
+" @PageOrientation { Portrait }"
+" @PageHeaders { Simple }"
+" @ColumnNumber { 1 }"
+" @FirstPageNumber { 1 }"
+" @OptimizePages { No }"
+" @AbstractDisplay { Yes }"
+" @AbstractTitle { Abstract }"
+" @Abstract {}"
+"//"
+}
+This shows all the options of {@Code "@Report"}
+@FootNote {
+Version 3.13 of Lout is not completely upwardly compatible with
+previous versions in its handling of technical reports. The change
+concerns the abstract, and if you see the error message
+@ID @Code "symbol @Abstract unknown or misspelt"
+you probably need to convert your document. To convert an older
+document to Version 3.13, move any @Code "@Abstract" from after the
+@Code "//" to before it, delete any options to the @Code "@Abstract"
+symbol, and delete any initial paragraph symbol within the abstract.
+You can use the @Code "@AbstractTitle" option described in this section
+to change the title of the abstract.
+}
+with their default values. As usual with options, they may be given in
+any order, and only the ones whose values need to be changed need be
+given at all. The meaning of the @Code "//" symbol is beyond our scope,
+but disaster will ensue if it is forgotten.
+@PP
+The @Code "@Title" option holds the title of the report. It will be
+printed using the @Code clines paragraph breaking style (Section
+{@NumberOf paras}), which centres each line, so it makes sense
+to have multi-line titles:
+@ID @OneRow @Code {
+"@Report"
+" @Title {"
+"The solution of real instances of"
+"the timetabling problem"
+"}"
+" ..."
+}
+With a multi-line title, each line after the first should begin
+at the left margin, not indented. It doesn't matter where the first
+line begins, because space following an open brace is ignored.
+@PP
+The @Code "@Author" and @Code "@Institution" options hold the author's
+name and institution or address, and will also be printed using the
+@Code clines style. If there are several authors but only one
+institution, list all the authors in the @Code "@Author" option:
+@ID @Code "@Author { Tim B. Cooper and Jeffrey H. Kingston }"
+With more authors, or with more than one institution, it is best to
+ignore the @Code "@Institution" option and place all the information
+within the @Code "@Author" option, enclosing institution information
+in @Code "@I" symbols. In extreme cases, a table with columns of
+authors might be necessary (Chapter {@NumberOf tables}).
+@PP
+@Code "@DateLine" may be set to {@Code No}, meaning no dateline,
+{@Code Yes}, meaning print the current date, or anything else, which is
+taken to be a date and printed:
+@ID @Code "@DateLine { 4 July, 1776 }"
+A good plan is to use @Code "@DateLine { Yes }" until
+the report is finalized.
+@PP
+The {@Code "@AtEnd"} option will come out on a single unnumbered
+page with no page headers or footers, and using the same margins as for
+even pages, after the very last page of the report; even after the
+index if there is one. It is intended to make it possible to
+include a back cover, so @Code "@PageOf last.page" does not take
+account of any @Code "@AtEnd" page.
+@PP
+The remaining options (except {@Code "@Abstract"}) are setup file options
+(Section {@NumberOf setup}) that frequently need to be changed. If your
+changes to the overall formatting are confined to these options, you can
+change them here and avoid having your own setup file. If you already have
+your own setup file, change them in either place and omit them in
+the other.
+@PP
+If @Code "@CoverSheet" is {@Code Yes}, an unnumbered cover
+cover.sheet. @Index @Code "@CoverSheet"
+sheet will be produced containing the title, author, institution,
+abstract, and dateline. Otherwise they will appear on the
+first page. The `cover sheet' is in reality a sequence of Intro pages
+(Section {@NumberOf headers}), numbered by default with Roman numerals
+on pages after the first.
+@PP
+In order to get a table of contents, it is necessary to use your
+own setup file (Section {@NumberOf setup} explains how to do this)
+and to set the @Code "@MakeContents" option within it to
+{@Code Yes}. The table of contents will ordinarily appear beginning
+on the first page, but if the @Code "@ContentsSeparate" option of
+@Code "@Report" is
+contents.separate @Index @Code "@ContentsSeparate"
+set to @Code "Yes" it will appear on separate pages. This is only
+effective if @Code "@CoverSheet" is {@Code No}, since a separate cover
+sheet and separate pages for the table of contents would leave nothing on
+the first page.
+@PP
+@Code "@InitialFont" is the font of the bulk of the report,
+and should contain a family, a face, and a size. The default
+value selects the Times family, the Base face, and the 12 point size.
+@PP
+@Code "@InitialBreak" controls the behaviour of paragraph breaking in
+the bulk of the report. It should have three parts: a paragraph
+breaking style ({@Code adjust}, {@Code ragged}, etc.), an inter-line
+spacing ({@Code "1.2fx"} for single spacing, {@Code "2.4fx"} for
+double spacing, and so on), and either @Code "hyphen" or
+@Code "nohyphen" for turning hyphenation on or off. It may also
+have @Code "nobreakfirst" or @Code "nobreaklast" (or both), meaning
+to disallow a page break after the first line of a paragraph, or
+before the last, respectively.
+@PP
+@Code "@InitialSpace" determines how Lout treats white space between
+two objects, as described in Section
+{@NumberOf white}. @Code "@InitialLanguage" determines the language
+of the bulk of the report.
+@PP
+@Code "@PageOrientation" determines the orientation of the page. Its
+value may be {@Code Portrait} (the default), {@Code Landscape},
+{@Code ReversePortrait}, or {@Code ReverseLandscape}. See
+Section {@NumberOf pagesize} for further details.
+@PP
+@Code "@PageHeaders" determines the appearance of page headers and
+footers. Its value may be {@Code None},
+{@Code Simple}, {@Code Titles}, or {@Code NoTitles}. Section
+{@NumberOf headers} has the details, but just briefly, {@Code None}
+produces no page headers, {@Code Simple} produces a centred page number
+between hyphens on every page except the cover sheet and the first
+page, @Code Titles produces full running titles as in the present
+document, and @Code "NoTitles" is like @Code "Titles" with the running
+titles omitted, leaving just the page numbers.
+@PP
+@Code "@ColumnNumber" is the number of columns per page in the bulk of
+the report, and may be anything from {@Code 1} (the default value) to
+{@Code 10}. However, there is nothing analogous to the @Code "@FullWidth"
+symbol of ordinary documents. Instead, the cover sheet, title material,
+and all figures and tables will be printed full width, and the rest will
+be set in columns. There is a separate @Code "@IndexColumnNumber" option
+in the setup file which determines the number of columns in the index
+(Section {@NumberOf indexes}).
+@PP
+@Code "@FirstPageNumber" is the page number given to the first page.
+@PP
+Lout ordinarily places lines onto a page until space runs out, then moves
+to the next page and so on. This often produces ugly empty spaces at
+the bottoms of pages preceding large unbreakable displays. Setting the
+@Code "@OptimizePages" option to {@Code "Yes"} causes Lout to examine the
+overall situation and try to minimize the ugliness, using the @TeX
+optimal paragraph breaking algorithm. It takes two runs to do this,
+with intermediate results stored in Lout's cross reference database
+(Section {@NumberOf cross}); so deleting file {@Code lout.li} will reset
+it, which might be wise after major changes. It is possible for the
+optimizer to cycle, never settling on a single final best version; this
+is usually caused by footnotes or floating figures inserted at points
+which end up near page boundaries.
+@PP
+Finally we have three options that control the abstract.
+@Code "@AbstractDisplay" may be @Code { Yes } or {@Code No};
+it determines whether the abstract is displayed (occupying
+the full page width except for an indent at each side like a quoted
+display) or inline (occupying the column width).
+@Code "@AbstractTitle" is the title of the abstract; its default
+value is @Code Abstract or its equivalent in the current language.
+abstract. @Index @Code "@Abstract"
+Finally, @Code "@Abstract" contains the abstract itself; it may be
+empty or absent, in which case there will be no abstract.
+@PP
+The abstract may contain footnotes in the usual way. Regrettably, each
+footnote in the abstract will generate one spurious `unresolved cross
+reference' error message that does not go away. This slight problem
+might be fixed in the future.
+@PP
+After the compulsory {@Code "//"} comes the report body in the
+form of a sequence of sections:
+section.reports @SubIndex { in reports }
+@ID @OneRow @Code {
+"@Section"
+" @Title { Introduction }"
+"@Begin"
+"@PP"
+"..."
+"@End @Section"
+}
+No @Code "@BeginSections" or @Code "@EndSections" symbols are needed. The
+beginsections.reports @SubIndex { in reports }
+endsections.reports @SubIndex { in reports }
+general rule is that you need these bracketing symbols only when you are
+inside something else. Sections lie inside
+@Code "@Text" in ordinary documents, but they don't lie inside anything
+else in technical reports.
+@PP
+A section may have subsections, between
+subsection.reports @SubIndex { in reports }
+beginsubsections.reports @SubIndex { in reports }
+endsubsections.reports @SubIndex { in reports }
+@Code "@BeginSubSections" and {@Code "@EndSubSections"}:
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubSections"
+"@SubSection ... @End @SubSection"
+"@SubSection ... @End @SubSection"
+"..."
+"@SubSection ... @End @SubSection"
+"@EndSubSections"
+}
+Within each subsection there may be sub-subsections, each introduced
+by {@Code "@SubSubSection"}, with the whole sequence bracketed by
+subsubsection.reports @SubIndex { in reports }
+beginsubsubsections.reports @SubIndex { in reports }
+endsubsubsections.reports @SubIndex { in reports }
+@Code "@BeginSubSubSections" and {@Code "@EndSubSubSections"}:
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubSubSections"
+"@SubSubSection ... @End @SubSubSection"
+"@SubSubSection ... @End @SubSubSection"
+"..."
+"@SubSubSection ... @End @SubSubSection"
+"@EndSubSubSections"
+}
+There are no sub-sub-subsections.
+@PP
+After the sections comes an optional sequence of appendices:
+appendix.reports @SubIndex { in technical reports }
+@ID @OneRow @Code {
+"@Appendix"
+" @Title { Derivation of the renewal formula }"
+"@Begin"
+"@PP"
+"..."
+"@End @Appendix"
+}
+No @Code "@BeginAppendices" or @Code "@EndAppendices" symbols are needed,
+beginappendices.reports @SubIndex { in reports }
+endappendices.reports @SubIndex { in reports }
+because (like the sections above) these appendices do not lie inside
+any other large-scale structure symbol. The appendices are numbered
+A, B, C, etc., as is conventional for them. Within each appendix
+there may be a sequence of subappendices, obtained with the
+@Code "@SubAppendix" symbol and bracketed by @Code "@BeginSubAppendices"
+subappendix.reports @SubIndex { in reports }
+beginsubappendices.reports @SubIndex { in reports }
+endsubappendices.reports @SubIndex { in reports }
+and {@Code "@EndSubAppendices"}:
+@ID @OneRow @Code {
+"preceding text"
+"@BeginSubAppendices"
+"@SubAppendix ... @End @SubAppendix"
+"@SubAppendix ... @End @SubAppendix"
+"..."
+"@SubAppendix ... @End @SubAppendix"
+"@EndSubAppendices"
+}
+There are sub-subappendices following the same pattern, but no
+subsubappendix.reports @SubIndex { in reports }
+beginsubsubappendices.reports @SubIndex { in reports }
+endsubsubappendices.reports @SubIndex { in reports }
+sub-sub-subappendices.
+@PP
+The report ends with the last section or appendix; any reference list or
+index will be appended automatically. Although we have described how to
+create reports as though everything was in one large file, in practice it
+is much better to divide the report into multiple files, following the
+method given in Section {@NumberOf organizing}.
+@PP
+In addition to the {@Code "@Title"} option, each large-scale structure
+symbol ({@Code "@Section"}, {@Code "@SubSection"}, {@Code "@SubSubSection"},
+{@Code "@Appendix"}, {@Code "@SubAppendix"},
+and {@Code "@SubSubAppendix"}) has a @Code "@Tag" option for cross
+referencing (Section {@NumberOf cross}), an @Code "@InitialLanguage"
+option for changing the language of that part of the document, and a
+@Code "@RunningTitle" option which will be used in place of @Code "@Title"
+in running headers if given. @Code "@RunningTitle" is useful when the
+full title is rather long.
+@PP
+The features described in other chapters are all available within
+technical reports. To get a table of contents, change the @Code
+"@MakeContents" option in the setup file to {@Code Yes}; the rest is
+automatic, and you don't need the @Code "@ContentsGoesHere" symbol from
+ordinary documents. To get an index, again you need only change the
+@Code "@MakeIndex" setup file option to {@Code Yes}. Endnotes and
+references appear at the end of the report. Figures and tables are
+numbered 1, 2, 3, etc.
+@PP
+Within the @Code "report" setup file there is a @Code "@ReportSetup"
+symbol whose options control the appearance of features specific to
+report.setup @Index @Code "@ReportSetup"
+reports (in other words, the features described in this section). Section
+{@NumberOf setup} explains setup files and their options in general; here
+is a representative sample of these options, showing their default values:
+@ID @OneRow @Code {
+"@Use { @ReportSetup"
+" # @CoverSheet { Yes }"
+" # @DateLine { No }"
+" # @ReferencesBeforeAppendices { No }"
+" # @AbstractWord { abstract }"
+" # @ContentsWord { contents }"
+" # @SectionNumbers { Arabic }"
+" # @SectionHeadingFont { Bold }"
+" # @SectionGap { 2.00v }"
+" # @SectionInContents { Yes }"
+"}"
+}
+@Code "@CoverSheet" and @Code "@DateLine" are as for {@Code "@Report"};
+you can set them in either place as you prefer. @Code
+"@ReferencesBeforeAppendices" determines whether the reference list is
+printed out before or after any appendices. @Code "@AbstractWord"
+determines the value of the title of the abstract if none is given there;
+its default value, {@Code abstract}, produces `Abstract' in the current
+language. @Code "@ContentsWord" is similar; its default value produces
+`Contents' in the current language. The other four options
+control the appearance of sections, and there are similar options for
+controlling the other large-scale structure symbols.
+@PP
+@Code "@SectionNumbers" determines how sections will be numbered, and may
+be @Code { None }, @Code { Arabic }, @Code { Roman }, @Code { UCRoman },
+@Code { Alpha }, or @Code { UCAlpha }. The default value is @Code Arabic
+for sections, and also for all large-scale structure symbols except
+appendices, for which it is {@Code UCAlpha}. This produces the appendices
+numbered in upper-case letters (A, B, C, etc.) that were mentioned earlier.
+@PP
+@Code "@SectionHeadingFont" is the font used for section headings. The
+default value shown above produces the bold face from the family of the
+initial font. A family name and size is acceptable here as well:
+@ID @Code "@SectionHeadingFont { Helvetica Base +2p }"
+produces section headings in the Helvetica font, two points larger
+than the initial font size.
+@PP
+@Code "@SectionGap" determines how much space is left blank before each
+section title; the default value shown above is twice the current
+inter-line spacing. The special value @Code "2b" may be used to get a
+page break rather than a space. @Code "@SectionInContents" determines
+whether or not an entry is made in the table of contents for each section;
+it may be @Code Yes or {@Code No}. There are similar options for other
+large-scale structure symbols.
+@End @Section
diff --git a/doc/user/vbas b/doc/user/vbas
new file mode 100644
index 0000000..0004cfb
--- /dev/null
+++ b/doc/user/vbas
@@ -0,0 +1,3 @@
+vi bas bas_star bas_objs bas_spac bas_char bas_empt bas_font bas_head \
+ bas_par1 bas_par2 bas_line bas_hyph bas_unde bas_date bas_lang \
+ bas_supe bas_verb bas_drop bas_conv
diff --git a/doc/user/vfmt b/doc/user/vfmt
new file mode 100644
index 0000000..39d5efe
--- /dev/null
+++ b/doc/user/vfmt
@@ -0,0 +1 @@
+vi fmt fmt_setu fmt_size fmt_marg fmt_head
diff --git a/doc/user/vref b/doc/user/vref
new file mode 100644
index 0000000..55e3596
--- /dev/null
+++ b/doc/user/vref
@@ -0,0 +1 @@
+vi ref ref_sett ref_cite ref_labe ref_entr ref_chan ref_crea
diff --git a/doc/user/vstr b/doc/user/vstr
new file mode 100644
index 0000000..7f4e2d0
--- /dev/null
+++ b/doc/user/vstr
@@ -0,0 +1,2 @@
+vi str str_disp str_list str_foot str_marg str_theo str_figs str_larg \
+ str_cros str_cont str_indx str_colu str_defs
diff --git a/doc/user/vtbl b/doc/user/vtbl
new file mode 100644
index 0000000..24f6a4d
--- /dev/null
+++ b/doc/user/vtbl
@@ -0,0 +1,2 @@
+vi tbl tbl_intr tbl_cell tbl_rows tbl_marg tbl_widt tbl_inde tbl_rule \
+ tbl_span tbl_mult tbl_alig tbl_mark tbl_plai tbl_setu tbl_summ
diff --git a/doc/user/vtyp b/doc/user/vtyp
new file mode 100644
index 0000000..003ff0b
--- /dev/null
+++ b/doc/user/vtyp
@@ -0,0 +1,2 @@
+vi typ typ_ordi typ_repo typ_book typ_over typ_illu typ_plai \
+ typ_apdf typ_orga